Demo ZODB storage
The Demo storage serves two purposes:
Provide an example implementation of a full storage without
distracting storage details,
Provide a volatile storage that is useful for giving demonstrations.
The demo strorage can have a "base" storage that is used in a
read-only fashion. The base storage must not not to 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 4-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, serial, pre, vdata, p,
where:
- oid
object id
- serial
object serial number
- 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
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. Foe example, in Zope, you can create an external
method:
import Zope
def info(RESPONSE):
RESPONSE['Content-type']= 'text/plain'
return Zope.DB._storage._splat()
and call it to minotor the storage.
|