[ZODB-Dev] Fetching multiple objects from the database with a single load.

Jim Fulton jim at zope.com
Tue Apr 6 09:19:04 EDT 2010


On Tue, Apr 6, 2010 at 2:42 AM, Leszek Syroka
<leszek.marek.syroka at cern.ch> wrote:
> Hello,
>
> I am optimizing  an application in which fetching objects from the ZODB
> seems to be a bottleneck. The problem is I would like to fetch an object
> that contains some persistent fields. For example:
>
> class A (Persistent):
>
>     def __init__(self):
>         self._primaryAuthors = PersistentList()
>         self._coAuthors = PersistentList()
>         self._speakers = PersistentList()
>
> After that there is a need to fetch every single persistent field
> (_primaryAuthors , _coAuthors,  __speakers etc. ) from this object,
> which takes a lot of time. It seems that access time to the ZODB takes
> significantly more time than operations performed inside the database to
> load an object.

Were you using ZEO?  Uncached ZEO loads take far longer that loading
data from a local database, or from a ZEO cache.

> Is there a possibility to fetch an object and its all
> persistent field with a single access to the ZODB?

No, not currently.

> Changing fields to
> non persistent is rather impossible due to complications in the
> application's architecture.

In the future, I plan to add support for persistent objects that
share database records, allowing multiple objects to be loaded
at once to address  use cases like yours.

Jim

-- 
Jim Fulton


More information about the ZODB-Dev mailing list