Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Quickly dumping a database in memory to file

I want to take advantage of the speed benefits of holding an SQLite database (via SQLAlchemy) in memory while I go through a one-time process of inserting content, and then dump it to file, stored to be used later.

Consider a bog-standard database created in the usual way:

# in-memory database
e = create_engine('sqlite://')

Is there a quicker way of moving its contents to disc, other than just creating a brand new database and inserting each entry manually?

EDIT:

There is some doubt as to whether or not I'd even see any benefits to using an in-memory database. Unfortunately I already see a huge time difference of about 120x.

This confusion is probably due to me missing out some important detail in the question. Also probably due to a lack of understanding on my part re: caches / page sizes / etc. Allow me to elaborate:

I am running simulations of a system I have set up, with each simulation going through the following stages:

  1. Make some queries to the database.
  2. Make calculations / run a simulation based on the results of those queries.
  3. insert new entries into the database based on the most recent simulation.
  4. Make sure the database is up to date with the new entries by running commit().

While I only ever make a dozen or so insertions on each simulation run, I do however run millions of simulations, and the results of each simulation need to be available for future simulations to take place. As I say, this read and write process takes considerably longer when running a file-backed database; it's the difference between 6 hours and a month.

Hopefully this clarifies things. I can cobble together a simple python script to outline my process further a little further if necessary.

like image 450
JimmidyJoo Avatar asked Apr 05 '13 13:04

JimmidyJoo


People also ask

Why in-memory database is faster?

In-memory databases are faster than traditional databases because they require fewer CPU instructions. They also eliminate the time it takes to access data from a disk. In-memory databases are more volatile than traditional databases because data is lost when there is a loss of power or the computer's RAM crashes.

What is the meaning of in-memory database?

In-memory databases are purpose-built databases that rely primarily on memory for data storage, in contrast to databases that store data on disk or SSDs. In-memory data stores are designed to enable minimal response times by eliminating the need to access disks.


1 Answers

SQLAlchemy and SQLite know how to cache and do batch-inserts just fine.

There is no benefit in using an in-memory SQLite database here, because that database uses pages just like the on-disk version would, and the only difference is that eventually those pages get written to disk for disk-based database. The difference in performance is only 1.5 times, see SQLite Performance Benchmark -- why is :memory: so slow...only 1.5X as fast as disk?

There is also no way to move the in-memory database to a disk-based database at a later time, short of running queries on the in-memory database and executing batch inserts into the disk-based database on two separate connections.

like image 112
Martijn Pieters Avatar answered Nov 14 '22 23:11

Martijn Pieters