Syver Enstad wrote at 2004-4-21 18:03 +0200:
Syver Enstad <syver@inout.no> writes:
I am using ZODB 3.2 in a twisted based web application. I have read that I need to call sync to keep the connection up to date. When exactly should I call sync? Are there any drawbacks with calling it immediately after getting a connection, like this:
# for each http request. connection = db.open() # (a DB instance) connection.setLocalTransaction() connection.sync()
# start using the ZODB here.
# if something needs to be committed connection.getTransaction().commit()
I have done some experiments with this scheme and I find that everything gets unloaded when do a connection.close() or connection.sync() so that performance takes quite a hit.
Maybe, the connection cache is too small. Usually, an incremental cache garbage collection is performed in "connection.close()" and at transaction boundaries ("sync" causes an implicit "transaction.abort()" which means, it marks a transaction boundary). The cache garbage collection tries to flush as many objects from the cache as are necessary to reach the target cache size. -- Dieter