Demo ZODB storage

The Demo storage serves two purposes:

The demo storage can have a "base" storage that is used in a read-only fashion. The base storage must not contain version data.

There are three main data structures:

Transaction logging information necessary for undo

This is a mapping from transaction id to transaction, where a transaction is simply a 5-tuple:

packed, user, description, extension_data, records

where extension_data is a dictionary or None and records are the actual records in chronological order. Packed is a flag indicating whethe the transaction has been packed or not

A mapping from oid to record
A mapping from version name to version data

where version data is a mapping from oid to record

A record is a tuple:

oid, pre, vdata, p, tid


object id
The previous record for this object (or None)
version data

None if not a version, ortherwise: version, non-version-record

the pickle data or None
the transaction id that wrote the record

The pickle data will be None for a record for an object created in an aborted version.

It is instructive to watch what happens to the internal data structures as changes are made. For example, in Zope, you can create an external method:

  import Zope2

  def info(RESPONSE):
      RESPONSE['Content-type']= 'text/plain'

      return Zope2.DB._storage._splat()

and call it to monitor the storage.