sqlite API の sqlite3_open 関数を使用して sqlite データベース ファイルを開くときに、データがどのように読み取られるかを知りたいです。私は次のことを考えてきました:
sqlite3_open 関数は、毎回データベース ファイルから直接データを読み取ります。
sqlite3_open関数は、システムの資金が十分にある場合、ファイルベースのデータベースをメモリにコピーし、データベース接続を更新して閉じるまでデータベースファイルをロックします。ユーザーがテーブルからデータを選択する場合、それらのデータはデータベース ファイルではなくメモリから取得する必要があります。
sqlite_open 関数が ":memory:" を使用してインメモリ データベースを開く場合は、ファイル ベース データベースをアタッチします。このデータベース全体は、プログラムの実行時にメモリベースのデータベースになりますか?
公式の sqlite フォーラム http://www.sqlite.org/cvstrac/wiki?p=InMemoryDatabaseでの議論を見ました。
およびhttp://sqlite.1065341.n5.nabble.com/Memory-Resident-Database-td42098.html
C++ アプリケーションのメモリ内データベースを取得するには、次のようにデータベースをメモリにコピーする必要がありますか?
proc loadDB {dbhandle filename} {
if {$filename != ""} {
#attach persistent DB to target DB
$dbhandle eval "ATTACH DATABASE '$filename' AS loadfrom"
#copy each table to the target DB
foreach {tablename} [$dbhandle eval "SELECT name FROM loadfrom.sqlite_master WHERE type = 'table'"] {
$dbhandle eval "CREATE TABLE '$tablename' AS SELECT * FROM loadfrom.'$tablename'"
}
#create indizes in loaded table
foreach {sql_exp} [$dbhandle eval "SELECT sql FROM loadfrom.sqlite_master WHERE type = 'index'"] {
$dbhandle eval $sql_exp
}
#detach the source DB
$dbhandle eval {DETACH loadfrom}
}
}
アプリケーションのいくつかのインスタンスを同時に実行したいのですが、それらがすべて同じデータベース ファイルを共有している場合、安全ではありません。各インスタンスは、実行時にメモリ内にデータベースの独自のコピーを持つ必要があります