-----Original Message----- From: Michel Pelletier [mailto:michel@digicool.com] Sent: Wednesday, March 15, 2000 4:19 AM To: Jay, Dylan Cc: 'zope@zope.org' Subject: Re: [Zope] sub-transaction in DTML?
"Jay, Dylan" wrote:
I have a method that takes a long time on a system that
uses a level 2 DA,
therefore it blocks the entire site
To be more specific, it blocks all other requests through that and other level 2 DAs. Non SQL related calls and level 3 DA calls will not get blocked.
(it also uses UserDB so everything uses the DB).
Yeah that kinda puts a damper on the whole site... but that's just because every access is now an SQL related call.
but having a DB manage my user data is not an unresonable requirement on a site.
How can I put sub-transactions in my DTML to give others a chance to use the site?
This is not what ZODB sub-transactions do. Even if you were using a relational database that has a notion of sub-transactions (Oracle has
why do I need a concept of a sub-transaction. Is there just something that I can call that will commit all changes up until a certain point and then begin the new transaction? I realize this will break the transaction model to some extent but if the method is long and each iteration is indepedent this seems a reasonable thing to do.
'nested transactions' for example) that would not stop the blocking (of course if you were using Oracle you would be using a level 3 DA...). ZODB sub-transactions allow changed objects to get flushed to a temp filestorage so that you can accumulate more object changes then can fit in virtual memory. There is no mapping of sub-transaction semantics to any of the DAs. In fact, if I remember correctly using ZODB sub-transactions with SQL methods is Not A Good Thing. I don't remember the exact details.
Solutions? Execute a shorter query or upgrade to a concurrent DA.
To do the work using a shorter query would mean breaking the method up into chunks and then having to call it multiple times which is pretty ugly. Tell me how to get a concurrent DA on NT without breaking the bank and I'll do it. So far I have: - MS SQL server - Apparently sybaseDA will work but havn't been able to compile it on NT. You need certain files from sybase I believe. - SQLAnywhere - same problem as above. - Oracle - too expensive. - MySQL - No transactions. - PostgresSQL - Got the NT binaries but can't get it working. Also can't compile the postgresDA. - ODBC - Not level 3. As far as I can tell the above represents all the options I have open to me.
-Michel