There must be a way without violating 1st normal form and storing everything twice. Maybe an "updated"-timstamp or something may help.
(Also I`m concerned that still loading all transactions from the db into ram will work out after a few years of bookkeeping. You cannot split a database by year as you can an xml-file. I'm thinking about maybe 100 splits and 40 transactions as well as 10 currency-quotes every day for 10 years as a sensible testcase for scalability.) Marcus On Fri, Aug 14, 2009 at 9:11 PM, Phil Longstaff<plongst...@rogers.com> wrote: > I've thought a bit about an audit log for the sql backend. If all you need > is a parallel set of tables (e.g. for accounts, have accounts_audit_log which > contains the same fields, as well as an autoinc index and date), then you > might be able to implement it using triggers - any change to the accounts > table would have a trigger which would copy the changes to the audit log. > > Phil > > > > > ________________________________ > From: Vladimir Bashkirtsev <vladi...@bashkirtsev.com> > To: Derek Atkins <warl...@mit.edu> > Cc: gnucash-devel@gnucash.org > Sent: Friday, August 14, 2009 2:43:24 PM > Subject: Re: MySQL sync > > Derek Atkins wrote: >> Hi, >> >> Please remember to CC gnucash-devel on all replies using your mailer's >> Reply-To-List or Reply-All functionality. >> > Missed that. Now I have pressed correct button. :) >> Vladimir Bashkirtsev <vladi...@bashkirtsev.com> writes: >> >> >>> Derek, >>> >>> Perhaps I need to check ascertain amount of work involved. There's two >>> approaches we can take: first one is using timestamps and re-reading >>> data if change happened. Second one is to get data straight out of DB >>> each time it is needed and use DB transactions (if available). First >>> approach most likely will be prone to data corruption and re-reading >>> whole lot will slow things right down. Second approach looks like more >>> appropriate but most likely it will require good amount of work as it >>> is quite different to current architecture. Can you give your opinion >>> about how hard it would be to implement second approach? How hard it >>> is to get GnuCash not to use data from memory but use it directly from >>> DB? >>> >> >> The hardest part is figuring out "what changed". Ideally we'd have an >> audit log in the database, which would effectively mimic the .log files >> for XML. Every operation would get logged in the DB both for potential >> undo and also for later auditing. >> >> It would be nice if there were some way to "notify" clients that there's >> a change to the DB so it knows it should reload. However most DBs dont >> have that, so we'd need to do it manually by, say, an epoch number for >> the database. Everytime the db is updated you increase the epoch. >> Another way you could do this would be an autoincrement in the 'audit >> log' and thereby use your audit log id number as your epoch. >> >> Really, tho, this is just a cache coherency problem, which has been >> solved many times in many ways. >> >> However, changing the architecture of GnuCash to be a pure DB app would >> entail rewriting MOST of the engine. I wouldn't recommend going that >> route in the short term. >> > Well... Rewriting most of engine is definitely not something I plan. :) > > So I should take on board your idea to go with audit log. It should not be > too hard to implement. Then use autoincrement in DB and have GnuCash to check > it at regular intervals and before any operation which requires access to the > data. If there's new entries in the log then just replay them to get updated. > Something tells me that ability to store log records and ability to replay > them back already is part of the engine. > > Have I missed anything? If not then I am quite excited and... (read below) >> >>> Of course I can just read the source but it would take sometime and >>> your opinion can get me to make a decision to do it or not a bit >>> quicker. >>> >> >> You should still read the source. :) >> > I will read the source! :) >> >>> Vladimir >>> >> >> -derek >> >> >>> Derek Atkins wrote: >>> >>>> Hi, >>>> >>>> Vladimir Bashkirtsev <vladi...@bashkirtsev.com> writes: >>>> >>>> >>>>> Hello, >>>>> >>>>> I was testing latest development version with MySQL backend and in >>>>> general I was satisfied with the results. Great piece of software! >>>>> >>>>> Now here the scenario I want to happen: I have PHP scripts which deal >>>>> with GnuCash data in MySQL DB. It is not a problem to read and show >>>>> account records from MySQL. But PHP scripts should be able to post >>>>> invoices back to GnuCash DB. This side of business is working well too >>>>> but if I have GnuCash open and connected to the same MySQL DB no >>>>> update in GnuCash happens. I've being looking for something what may >>>>> get GnuCash to re-read records but I cannot find anything like >>>>> it. Does MySQL backend has something like this? Perhaps having "last >>>>> modified" in DB record would be good and GnuCash should check it >>>>> periodically. Or the best way is to not to cache anything in memory >>>>> and use MySQL for each single operation. Or I just dreaming? :) >>>>> >>>>> Generally it comes to concurrent use of the same DB by two separate >>>>> GnuCash processes and how they get in sync. Without syncing use of DB >>>>> does not gain much in relation to XML file. >>>>> >>>> This would be "multi-user support" which is not supported at this time. >>>> As Phil says, it's also not on the current path so unless some developer >>>> comes in and offers to implement multi-user I don't see this happening >>>> any time soon. >>>> >>>> >>>>> Regards, >>>>> Vladimir >>>>> >>>>> PS: I have read warnings about modification of the data by something >>>>> but GnuCash. Still it appears to be the best way to resolve my >>>>> problem. >>>>> >>>> -derek >>>> >>>> >>>>> gnucash-devel mailing list >>>>> gnucash-devel@gnucash.org >>>>> https://lists.gnucash.org/mailman/listinfo/gnucash-devel >>>>> >>>>> >>>>> >>>> >>> >>> >> >> > > _______________________________________________ > gnucash-devel mailing list > gnucash-devel@gnucash.org > https://lists.gnucash.org/mailman/listinfo/gnucash-devel > _______________________________________________ > gnucash-devel mailing list > gnucash-devel@gnucash.org > https://lists.gnucash.org/mailman/listinfo/gnucash-devel > _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel