[ZODB-Dev] Re: Database size increase on commit()
Tres Seaver
tseaver at palladion.com
Wed Nov 21 14:02:58 EST 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
tsmiller wrote:
> ZODB guys,
>
> I have discovered the following.
>
> db.dbRoot is the root of my database and 'accounts' is a key. I simply
> want to set a timestamp for when a user logs in. I make the timestamp
> persistent by assigning the database key to a variable and back again as in
> the following code.
>
> accounts = db.dbRoot['accounts'][accountKey]
> accounts[accountKey]['last-login-time'] = int(time.time())
> db.dbRoot['accounts'][accountKey] = accounts
> transaction.commit()
>
> I have discovered that each time this code is executed, it increases the
> size of my database by about 800,000 bytes. Even though I suspect that it
> writes all of the accounts, the data in all of the accounts is not anywhere
> near 800,000. It is about 2k.
>
> I have been googling the ZODB and need to learn. Your answers on this list
> are pretty much over my head, but for now could you please tell me how to
> save about 50 bytes of information without the additional 799,950?
The simple answer is to use PersistentMappings or OOBTrees, rather than
a set of dict objects, for your 'accounts' data structure: those
classes store the mapping data across multiple persistent objects, and
only write the sub-objects which have actually changed in a transaction.
Tres.
- --
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFHRIDi+gerLs4ltQ4RAotkAJ9SDMDRL2wG3TRIOB720vOXlQTYmwCfT086
5xuaao0Iy1OYIihyPUvTXYM=
=vwSa
-----END PGP SIGNATURE-----
More information about the ZODB-Dev
mailing list