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 Seaver          +1 540-429-0999          [EMAIL PROTECTED]
Palladion Software   "Excellence by Design"    http://palladion.com
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org


For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to