【问题标题】:sqlite in-memory db and multithreadingsqlite 内存数据库和多线程
【发布时间】:2011-10-30 14:38:55
【问题描述】:

我的应用程序使用 sqlite 作为后端创建了一个内存数据库 (:memory:)。

我希望我的主线程创建与内存数据库的连接,并且该连接由多个线程共享。这可能吗? SQLite 3.7.8 现在可以下载了。

the shared cached 是否可行?

【问题讨论】:

  • 我不这么认为,因为与:memory: 的每个连接都会在内存中创建一个独立的数据库...参见sqlite.org/inmemorydb.html
  • 可能与 [this question][1] [1] 重复:stackoverflow.com/questions/3267077/…
  • @NicolasModrzyk 您的链接没有答案。然而,这确实是同一个问题。
  • @Yahia,是的,多次打开调用会创建多个内存数据库;所以,只需打开一个并在线程之间共享连接。

标签: c database multithreading sqlite in-memory


【解决方案1】:

如果您使用serialized mode 打开与内存数据库的连接,则该连接可能会在多个线程之间共享。

为此,您的 SQLite 必须编译为 threadsafe -- 这是默认设置。

根据您的应用程序,如果您有很多读取器线程,您可能会使用大型共享缓存到磁盘数据库或使用 WAL 模式获得更好的性能。

示例:

sqlite3 *pDb

if (sqlite3_open_v2(":memory:", &pDb, SQLITE_OPEN_FULLMUTEX, NULL) == SQLITE_OK) {

    start_thread1_with_db_handle(pDb);

    start_thread2_with_db_handle(pDb);

    // etc.
}

【讨论】:

  • 不确定您需要什么;添加到答案的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多