You could also set the TEMP_STORE to memory and copy the table to a temporary table. Then update the disk table from the temporary table using the 'changed' scheme below. Example:
Pragma temp_store=2; Create table datatable (tag text, value real); Create unique index dtags on datatable (tag); create temporary table tdatatable as select tag, value, 0 as changed from datatable; create unique index ttags on tdatatable (tag); create index ttchg on tdatatable (changed, tag); then do your normal updates against tdatatable update tdatatable set value=?, changed=1 where tag=? Then periodically, Begin immediate; insert or replace into datatable select tag, value from tdatatable where changed=1; update tdatatable set changed=0 where changed=1; Commit; The temp table is only visible to the single process/connection which created it though ... --- () ascii ribbon campaign against html e-mail /\ www.asciiribbon.org > -----Original Message----- > From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users- > boun...@sqlite.org] On Behalf Of Simon Slavin > Sent: Thursday, 20 September, 2012 06:21 > To: General Discussion of SQLite Database > Subject: Re: [sqlite] minimizing flash writes > > > On 20 Sep 2012, at 6:42am, Rojo James <rojoja...@gmail.com> wrote: > > > Is it possible to flush only the changed values from the in-memory database > > to the hard-disk and not backup the whole database (may be using something > > like a transaction log)? Is there some built-in function for this? > > Keep a column in your table(s) called 'changed'. After you startup and have > read the database into memory, set the 'changed' values in this memory copy > to 0/FALSE: > > UPDATE myTable SET changed=0 > > When a row is changed set its "changed" to 1. When you are ready to flush > memory look only at the rows with changed=1, write those away, then execute > the above UPDATE command again. > > > Is it possible to have a disk based database, with the WAL file residing in > > the RAM? In this case less IO cycles are required and the back-upping of > > data to flash drive is simpler. > > There are ways to mess with the drive used for temporary files, and point it > at a RAM drive. But that requires RAM drive support. I don't think you can > define it as ":memory:". > > > What other possibility do I have to minimize the write cycles to the flash > > memory? > > I think your idea of having a memory-based copy will work fine. And it has > the advantage of being completely standard SQLite without requiring any weird > coding or setup which another programmer might have trouble understanding. > > Simon. > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users