Skip to main content

Speed up getObjPositionInParent index in Plone

Project description

Plone’s getObjPositionInParent catalog index is optimized for fast writing and for sorting small result sets of objects which are loaded anyway in the request. The actual order is not stored in the catalog at all but only on the parent object. This means that sorting a result set can only be done by loading the parent object and getting the object position from it.

This works well for Plone’s standard use cases such as the navigation portlet or the portal tabs, but doing large queries with a bigger depth is very slow since all container objects must be woken up.

The goal of this package is to replace the getObjPositionInParent with an actual index storing the order in the catalog in a regular FieldIndex.

Compatibility

Plone 4.3.x

Installation

  • Add the package to your buildout configuration:

[instance]
eggs +=
    ...
    ftw.gopip
  • Install the generic setup profile ftw.gopip:default.

Implementation

This package replaces the GopipIndex, which is a fake index not storing any data, with a FieldIndex, which stores all positions.

The challenge is to keep the index properly up to date. This is achieved by customizing the standard IOrdering adapters and tracking changes there, so that we do not need to rely on other components triggering events at the right moment.

The three standard IOrdering adapters are wrapped with a tracking proxy:

  • DefaultOrdering (providing IExplicitOrdering)

  • PartialOrdering (providing IExplicitOrdering)

  • UnorderedOrdering (providing IOrdering)

If there are custom IOrdering or IExplicitOrdering adapters, they must be tracked accordingly.

There is no IOrdering adapter for the Plone site root. An IReorderedEvent-subsciber takes care of tracking first level reorderings.

Development

  1. Fork this repo

  2. Clone your fork

  3. Shell: ln -s development.cfg buildout.cfg

  4. Shell: python boostrap.py

  5. Shell: bin/buildout

  6. Shell: bin/test to test your changes.

Or start an instance by running bin/instance fg.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ftw.gopip-1.0.0.tar.gz (6.9 kB view details)

Uploaded Source

File details

Details for the file ftw.gopip-1.0.0.tar.gz.

File metadata

  • Download URL: ftw.gopip-1.0.0.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ftw.gopip-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4c895c9a0342604b6ea038acf73d94dfd414ff839c802f63bb40987c9f18006f
MD5 07d5a8a0b4a77e57e882eb862c394b90
BLAKE2b-256 4b6635c57e990a1998ee49c03fd91a2b011a45e54cef7f111c51f083eaa005fa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page