[ZODB-Dev] High Write Applications
Phillip J. Eby
pje at telecommunity.com
Thu Jul 31 14:49:26 EDT 2003
At 06:36 PM 7/31/03 +0100, Chris Withers wrote:
>RDBS can handle high write volumes, so why can't ZODB be made to behave
>similarly?
The root causes is that RDBMS transaction logs record high-level details,
not blob snapshots. For example, when an RDBMS logs that you changed row
#2967's "foo" column to value "bar", it doesn't usually also log the entire
data page the row was contained in, plus copies of all the b-tree index
pages that changed as a consequence of the change. Thus, ZODB's disk usage
per write transaction generally exceeds RDBMS disk usage for the same
transaction by at *least* an order of magnitude, even before catalog
indexes come into play.
>This is just throwing this out here to stimulate some discussion, I'm not
>bitching, although I would eb over the moon if we can find some way to
>make ZODB handle high write volumes...
To do this, ZODB would have to be able to understand and log *differences*,
rather than just snapshotting object states. And, it would need to be able
to manage periodic checkpointing, so that recovering a database wouldn't
require rerunning all the transactions that had ever been done on it.
By the way, if you've looked at systems like Prevayler, you'll notice that
what I'm describing is actually pretty similar: high-level parameter log,
plus periodic checkpoints. Of course, that is also *exactly* what RDBMS
systems do, except that an RDBMS's "current state" is on disk as well as in
RAM, and checkpoints are done by flushing dirty buffers to the on-disk state.
More information about the ZODB-Dev
mailing list