Did you check out http://www.sqlite.org/inmemorydb.html
Could you use an in-memory db to act as a db for a save point? When you are ready to commit, do so from 1 in memory db, while accumulating into another in preparation for that save point. Adam On Tue, May 15, 2012 at 1:55 PM, Charles Samuels <char...@cariden.com>wrote: > > I'm using sqlite in addition to another database ("otherdb") storing data > in a > specific manner. I'm trying to keep atomicity of my disk commits. It can > take > several minutes for otherdb to commit, and while it commits it can already > start accumulating data for a future transaction. > > Some of the data coming into this application also goes into the sqlite > database. But I'd like to keep what's "on the oxide" between sqlite and > otherdb consistent with eachother. Let's accept that otherdb > > At some point, we get a checkpoint; at this instant, what is in otherdb and > what is in sqlite is what we want committed to sqlite, if either of them > fails, we can rollback both of them and both databases return to a > consistent > state of a previous checkpoint. The problem is that in the time between > checkpoint 1 and checkpoint 1 being committed to disk, more data is > arriving. > > The question here is: where can I put that "more data" so that it won't be > part of checkpoint 1, but is still accessable by sqlite select statements? > (Accept that otherdb allows asychronous commits such that I can add more > data > to it that doesn't wind up on disk). > > There's a few possibilities with some serious disadvantages: > > * When otherdb completes its checkpoint, I commit sqlite; until otherdb and > sqlite finish their commits, any data going into sqlite instead goes into a > "mirror" sqlite that I can do queries against meanwhile (but then I have to > replay *all* of those modifications against the primary sqlite). This can > cost > huge amounts of memory because the sqlite database can get big: 3GiB or > more. > It's also slow because all of a sudden I have to do a whole bunch of sqlite > statements. It's even slower because now any update I do *normally* has to > be > cloned. > > * I could write a virtual filesystem layer for sqlite that somehow > accumulates > changes that I can merge in with insert statements. So it's like the > previous > solution but I use some arm waving in combination with smoke and mirrors > to at > least not make me have two total copies of the database. The problem with > this > one is I don't know how to do it, and even if I did, I wouldn't know how > reliable it was. > > * If sqlite had a "commit transaction to savepoint X", then sqlite commits > to > the oxide everything up to a specific savepoint, keeping the savepoints > after > those committed still as active and uncommitted savepoints. The only > disadvantage I can think of to this is that sqlite has no such feature. > > So how could I do this? > > > Charles > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > -- VerifEye Technologies Inc. 905-948-0015x245 151 Whitehall Dr, Unit 2 Markham ON, L3R 9T1 Canada _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users