如何在内存数据库中创建多个SQLite

How to create multiple SQLite in memory database

本文关键字:创建 SQLite 数据库 内存      更新时间:2023-10-16

我的C++项目使用SQLite内存数据库。在我的项目中,将有多个线程同时读取和写入内存数据库中的SQLite。然而,不同的线程正在读取和更新不同的表,但我仍然会遇到SQLite数据库表锁定错误。如果我没有错的话,我知道当一个编写器编写表时,SQLite会锁定整个数据库文件,而不是所涉及的表。虽然我不确定,但我认为内存中的数据库也是如此。所以我实际上想创建多个内存中的数据库来解决这个问题。所以我的问题是,这可能吗?如果可能,怎么做?提前谢谢。

从整体的角度来看,即使SQLite不支持表或行级别的锁定(我相信它必须这样做),实现多个数据库只是为了绕过它,这听起来也是错误的做法。它最终会使您的应用程序变得不必要的复杂,只为了解决一个技术问题。

例如,如何连接多个数据库之间的表?您将如何同步交易?如果你不需要这样做,问问自己你是否真的需要RDBMS的功能——一系列基于Boost/STL的对象/集合会不会工作得不好,而且可能更快?

至于如何做到这一点。一些最好的信息实际上在StackOverflow上。以这个答案为例。

类似这样的东西:

ATTACH ':memory:' as SCHEMA1
ATTACH 'file:SCHEMA2?mode=memory&cache=shared' as SCHEMA2

来源:https://www.sqlite.org/inmemorydb.html