If you accept the slowdown of .dump you can directly use the backup option...

On Thu, Jun 6, 2013 at 2:10 PM, Philip Bennefall <phi...@blastbay.com> wrote:
>
> ----- Original Message ----- From: "Simon Slavin" <slav...@bigfraud.org>
>
> To: <phi...@blastbay.com>; "General Discussion of SQLite Database"
> <sqlite-users@sqlite.org>
> Sent: Thursday, June 06, 2013 1:45 PM
>
> Subject: Re: [sqlite] Serialize an in-memory database
>
>
>
> On 6 Jun 2013, at 10:45am, Philip Bennefall <phi...@blastbay.com> wrote:
>
>> I have a bunch of data structures in memory that I am looking to replace
>> with an SqLite database, primarily for the purpose of avoiding reinventing
>> the wheel with various sorts etc. I would then like to serialize the data
>> into a memory buffer and do additional processing before finally rendering
>> it to disk. The additional processing might include compression, encryption,
>> and a few other things specific to my application.
>
>
> Two problems:
>
> Unlike the SQLite file format, the format SQLite uses when it keeps things
> in memory is not published, and changes from version to version.  Because
> the writers of SQLite expect the in-memory format to be accessed only by
> things built into the SQLite API, you have to read the source code to know
> what's going on.  So any routines you come up will have to just deal with
> whatever they find rather than trying to understand its structure.  Also
> your data will be able to restored only back to versions of SQLite where the
> internal data format hasn't changed.
>
> SQLite does not, by its nature, keep everything in one long block of memory.
> It allocates and frees smaller blocks of memory as data is stored or
> deleted, and also as it needs to create temporary structures such as indexes
> needed to speed up a specific command.  So turning a stored database into
> one stream of octets takes more than just reading a section of memory.
>
> Rather than try to mess with the internals of SQLite I suspect you would be
> better served by doing the following:
>
> 1) Using SQLite's existing in-memory databases to keep your data in memory
> while your app executes.
>
> 2) Writing your own routine in your preferred programming language to dump
> your data into text or octets in memory or disk in whatever format you want.
> One standard way to do this is to generate the SQL commands needed to
> reproduce your database.  Since these are very repetitive standard ASCII
> commands they compress down extremely well and you can do encryption at the
> same time using any of a number of standard libraries.  Data in this format
> has the added advantages that it is human-readable (after decompression) and
> can be passed straight to sqlite3_exec() to rebuild the database.  However,
> you might prefer to invent your own format, perhaps more like CSV, that
> makes implicit use of your data structures.
>
> Simon.=
>
> Hi Simon,
>
> Oh I never intended to attempt to rip the data right out of an SqLite memory
> database. I realize that it is not at all the same as the disk file that I
> could create with, say, the backup API. I am considering two options:
>
> 1. Writing a memory vfs that I use when I want to save my data, backing up
> the existing in-memory database to a new database that uses this memory vfs
> and then taking the data from the resulting block where SqLite writes what
> it thinks is the database file.
>
> 2. Doing something like .dump in the shell, but writing the output to memory
> and then processing that. This seems to be the simplest approach, but would
> waste a lot of space and import/export would be slower as far as I can
> judge. This would primarily be the case if I export as SQL, as I would then
> not be able to reuse prepared statements with parameters but would have to
> use sqlite3_exec.
>
> The memory vfs seems like the most appealing choice in the longterm, but the
> second approach is much more straightforward.
>
> Kind regards,
>
> Philip Bennefall
> _______________________________________________
> 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