[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