Module
ZODB.DemoStorage

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:

_data
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

_index
A mapping from oid to record
_vindex
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

where:

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

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

p
the pickle data or None
tid
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.