Proposal
**This page is for historical purposes only. Support for Berkeley storages has been dropped. See http://zope.org/Wikis/ZODB/BerkeleyStorageDocs/BDBStorage.html
Logistics
The current Berkeley storage implementation lives inside the Packages/bsddb3Storage subdirectory on the main trunk of the Zope CVS tree. There is Jim's original implementation in Packless.py. The implementation describe in the fishbowl proposal lives in two other files: Minimal.py and Full.py (with a base class in BerkeleyBase.py). The Minimal storage does not support undo or versions, while the Full storage supports TransactionalUndo and versions. Both storages need to be packed occasionally, Full to eliminate old object revisions and cyclic garbage, and Minimal just to eliminate cyclic garbage. Both storages support an autopacking thread which will perform these packs in the background.
Status
The Full storage currently supports versions and a new style of undo called TransactionalUndo (essentially a non-destructive, redo-able undo). It manages object revisions via reference counting, and will garbage collect unreferenced objects during a pack operation. Packs are still required to get rid of old object revisions and to collect cyclic garbage.
Here is more information on the TwoPointZero? release of the Berkeley storages.
Requirements
Berkeley storage will require Sleepycat's Berkeley DB 4.0.14 and Robin Dunn's PyBSDDB 3.4 Python bindings. Berkeley storage has been tested with Python 2.1.3, Python 2.2.2, and occasionally Python 2.3 alpha. It should work with any Zope release of 2.4 vintage or newer.