QOF-to-SQL Proof of Concept

Derek Atkins warlord at MIT.EDU
Sun May 30 09:53:04 EDT 2004

I'm sorry, but all I have to say is:



"John Arrowwood" <jarrowwx at hotmail.com> writes:

> You've got to be careful here.  Some things to ponder:
> In a multi-user environment, you don't want user A to be blocked
> because user B is trying to do something.  If they are blocked, it
> should be for no longer than a second.  That means, for example, you
> can't have things locked for the entire time that a dialog is open.
> Another thing to keep in mind is the availability of features.  MySQL
> at one time didn't have transaction support.  Now it does.  Other
> database systems you might be thinking of supporting may or may not
> have this or that feature.
> I suggest a database abstraction.  Have the ability to write
> database-specific code that is optimized for the way things are done
> in a particular database.  That'll give you the speed that is both
> desired and deserved.  But if you have the ability to drop a different
> piece of code in for a different database for a particular action,
> then you can design it in such a way that you don't have to do
> 'least-common-denomenator' and all the performance penalties that
> doing so will impose on you.  Have an architecture that doesn't care
> what the data-store device is, and doesn't have any knowledge of that
> store, it just says "this is what I need done."  Figure out what kinds
> of things you will need done, and then find an OPTIMAL way of doing
> that in each database.
> That MAY mean that setting up the tables will be different for each
> back-end.  That's not as bad as you might think.  Design it such that
> doing so won't fundamentally break the system.  Then, you could have
> an XML back-end.  You could have a CSV back-end.  You could have a
> dbase back-end.  Or Oracle.  Or MySQL.  Or whatever you want.  And the
> limitations of the back-end could be completely transparent to the
> front-end.  The front-end doesn't suffer from the limitations of the
> back-end.  For example, some systems may require a file-based lock.
> Others may require a row-based lock. Others, a table-lock.  Design it
> in the abstract, and then take advantage of the available features of
> each back-end in order to make it work.
> Or, pick one database and say "this is it, folks!  it works here, no
> where else."  But we both know that there is a reason you don't want
> to do that...
> Now, you may have already planned on doing all of that.  Don't know.
> But on the off chance that you hadn't, I figured I'd toss it out
> there! :)
>>From: Derek Atkins <warlord at MIT.EDU>
>>To: Benjamin Carlyle <benjamincarlyle at optusnet.com.au>
>>CC: gnucash-devel at gnucash.org
>>Subject: Re: QOF-to-SQL Proof of Concept
>>Date: Sat, 29 May 2004 22:59:53 -0400
>>Benjamin Carlyle <benjamincarlyle at optusnet.com.au> writes:
>> > The database handles it for you.
>> >
>> > Whenever you say "BEGIN TRANSACTION;" a exclusive lock will be placed on
>> > the whole database. When you commit or rollback your transaction the
>> > lock is removed. Any insert, update, or other operation that modifies
>> > the database will implicitly begin and commit a transaction during its
>> > execution. Every select statement locks the whole database with a shared
>> > lock and unlocks when the query is done.
>>Good.  This is exactly what I expected.  So long as this works across
>>multiple applications connecting to the same database, then it's just
>>fine.  I think we'll still need to do some sort of internal locking
>>to stop the race condition of having two apps trying to change the
>>same piece of data..
>>I guess we could have the internal "begin edit" actually perform a
>>database lock, but that's not really a viable option because the app
>>could hold that lock for a long time waiting on user input.
>>So we just need to be careful to:
>>lock db
>>do {
>>    check status
>>    if (status changed)
>>       break;
>>    update record
>>} while (0);
>>unlock db
>>I'm not sure a BEGIN TRANSACTION / COMMIT TRANSACTION is sufficient to
>>do this, unless we can actually perform a SELECT and get back real
>>data in the middle of a transaction?
>> > Benjamin.
>>        Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
>>        Member, MIT Student Information Processing Board  (SIPB)
>>        URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
>>        warlord at MIT.EDU                        PGP key available
>>gnucash-devel mailing list
>>gnucash-devel at gnucash.org

       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available

More information about the gnucash-devel mailing list