Can you keep your database in-memory and just copy it to your flash 
periodically?  That would give you the most control and minimize the # of 
writes as much as you want.  It's good you recognize that you'll burn your 
flash out quickly with what you're doing now.
 
There's also the -DSQLITE_TEMP_STORE option which keeps temporary files 
in-memory.
You probably want SQLITE_TEMP_STORE=3 during compilation.
 
** This function returns true if main-memory should be used instead of
** a temporary file for transient pager files and statement journals.
** The value returned depends on the value of db->temp_store (runtime
** parameter) and the compile time value of SQLITE_TEMP_STORE. The
** following table describes the relationship between these two values
** and this functions return value.
**
**   SQLITE_TEMP_STORE     db->temp_store     Location of temporary database
**   -----------------     --------------     ------------------------------
**   0                     any                file      (return 0)
**   1                     1                  file      (return 0)
**   1                     2                  memory    (return 1)
**   1                     0                  file      (return 0)
**   2                     1                  file      (return 0)
**   2                     2                  memory    (return 1)
**   2                     0                  memory    (return 1)
**   3                     any                memory    (return 1)

Michael D. Black
Senior Scientist
Advanced Analytics Directorate
Northrop Grumman Information Systems
 

________________________________

From: sqlite-users-boun...@sqlite.org on behalf of Pankaj Chawla
Sent: Mon 8/30/2010 5:29 AM
To: sqlite-users@sqlite.org
Subject: EXTERNAL:[sqlite] Sqlite on NAND flash devices...



Hi

I have a Sqlite db on an embedded device on which there are
inserts happening at a rate of 1 insert every 3 seconds. That
being the case if Sqlite does file close/sync every 3 seconds
it is going to wear off the NAND in no time. I tried to instead
put 2 mins worth of inserts inside a transaction/commit block so
that now data only gets committed every 2 mins. What I observe
though is that now a journal file gets created during the time
transaction/commit block is active and I would assume now all
my 3 second updates are going into the journal file. If that is true it
means I am still writing to the NAND every 3 seconds through the
journal file even though the main DB is only getting synced
with the journal every 2 mins.

Is this understanding correct? If yes, is there a way to actually
reduce the number of writes happening to the NAND flash such
that I can save it from quick wear out? If no, how is the writes
to the main DB different from the writes to the journal?

Thanks
Pankaj
_______________________________________________
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

Reply via email to