[Zope-dev] Non Bloating Page Counter

Barry A. Warsaw barry@zope.com
Sat, 9 Nov 2002 12:15:41 -0500


>>>>> "kt" == kapil thangavelu <kvthan@wm.edu> writes:

    >> e.g. BerkeleyStorage or OracleStorage.

    kt> is there a useable undoable storage?

I think you meant "useable non-undoable storage", right?

If so, then I believe that ZODB 3.2 will have a such a useable
storage.  We've had some recent discussions with Sleepycat about some
of the worst problems with the BerkeleyDB storages, and I think we now
have some good strategies for greatly improving their utility.

In the ZODB cvs tree there are now two completely rewritten
implementations of the Full and Minimal storages.  Full storage, as
its name implies supports undo and versions.  It reference counts
objects and does mark-and-sweep garbage collection, but you need to
pack in order to get rid of old object revisions or unreferenced
objects.

An interesting byproduct of the rewrite is that Full now supports
something called "autopacking" -- essentially a background thread that
can be configured to pack the database, say as of 4 hours ago, once
per hour (these parameters are of course configurable).  Autopacking
usually only eliminates old object revisions (with reference
counting), but it can be configured to occasionally do a "classic
pack", which would also do a mark-and-sweep of the entire object space
to get rid of unreferenced cycles.  For example, you could tell
autopack to do one of those once per day.

Minimal storage does not support undo or versions because it keeps
only the most current object revision.  The current implementation
of Minimal isn't quite complete because while it performs reference
counting garbage collection, it doesn't yet do mark-and-sweep to
collect unreferenced object cycles.  I'll be adding this probably next
week, with pack and autopack interfaces.

One downside to the rewrite is that the table schemas aren't
compatible with the older versions of these storages, so if you have
data in an existing Berkeley storage, you'll need to use something
like copyTransactionsFrom() to move them to the new storages.

I plan on making a beta release of the new storages sometime early
next week.  They will be included in the ZODB 3.2 release, which will
like get alpha'd soon, with hopefully a final release by the end of
the year.  If you want to take an early look, check out the ZODB3 cvs
tree.  What's there passes all the tests.

Cheers,
-Barry