sqlite 内存数据库和多线程

发布于 2024-12-12 20:50:22 字数 208 浏览 4 评论 0原文

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

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

共享缓存是一种可能的方法吗?

My application creates a in-memory database (:memory:) using sqlite as a back end.

I want my master thread to create a connection to a in-memory database and this connection to be shared by multiple threads. Is this possible? SQLite 3.7.8 is available for download right now.

Is the shared cached a possible way to go?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不醒的梦 2024-12-19 20:50:22

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

为此,您的 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.
}

If you open the connection to your in-memory database using serialized mode, then the connection may be shared among multiple threads.

For this to work, your SQLite must be compiled threadsafe -- this is the default.

Depending on your application, you may get better performance with a large shared cache to an on-disk database, or with WAL mode if you have many reader threads.

Example:

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.
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文