Demo ZODB storage
The demo storage can have a "base" storage that is used in a read-only fashion. The base storage must not contain version data.
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
where version data is a mapping from oid to record
oid, pre, vdata, p, tid
None if not a version, ortherwise: version, non-version-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.