私のアプリケーションは、バックエンドとして sqlite を使用してメモリ内データベース (:memory:) を作成します。
マスター スレッドでメモリ内データベースへの接続を作成し、この接続を複数のスレッドで共有したいと考えています。これは可能ですか?SQLite 3.7.8 は現在ダウンロード可能です。
共有キャッシュは可能な方法ですか?
シリアル化モードを使用してメモリ内データベースへの接続を開くと、接続が複数のスレッド間で共有される場合があります。
これが機能するには、SQLite がスレッドセーフにコンパイルされている必要があります。これがデフォルトです。
アプリケーションによっては、ディスク上のデータベースに大きな共有キャッシュを使用したり、リーダー スレッドが多数ある場合は 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.
}