Kent Boogaart
Kent Boogaart

Reputation: 178660

Can in-memory SQLite databases scale with concurrency?

In order to prevent a SQLite in-memory database from being cleaned up, one must use the same connection to access the database. However, using the same connection causes SQLite to synchronize access to the database. Thus, if I have many threads performing reads against an in-memory database, it is slower on a multi-core machine than the exact same code running against a file-backed database.

Is there any way to get the best of both worlds? That is, an in-memory database that permits multiple, concurrent calls to the database?

Upvotes: 8

Views: 2871

Answers (3)

Kent Boogaart
Kent Boogaart

Reputation: 178660

The answer is no. I asked on the SQLite user group and got the following response from Pavel Ivanov:

No, SQLite doesn't support full concurrent access to any database. The only concurrency you can earn is having on-disk database without shared cache (so actually having several copies of the database in memory). Of course I don't consider option of concurrency from different processes.

Upvotes: 4

Samuel Neff
Samuel Neff

Reputation: 74909

If you set the page size and cache size large enough to contain the entire database, read operations will be fulfilled from the cache and the performance will be nearly equal to an in-memory database.

Upvotes: 2

Andrey
Andrey

Reputation: 60065

from here i understood that answer is yes http://www.sqlite.org/faq.html#q6

Upvotes: 0

Related Questions