0

sqlite API の sqlite3_open 関数を使用して sqlite データベース ファイルを開くときに、データがどのように読み取られるかを知りたいです。私は次のことを考えてきました:

  1. sqlite3_open 関数は、毎回データベース ファイルから直接データを読み取ります。

  2. sqlite3_open関数は、システムの資金が十分にある場合、ファイルベースのデータベースをメモリにコピーし、データベース接続を更新して閉じるまでデータベースファイルをロックします。ユーザーがテーブルからデータを選択する場合、それらのデータはデータベース ファイルではなくメモリから取得する必要があります。

  3. 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}
}
} 

アプリケーションのいくつかのインスタンスを同時に実行したいのですが、それらがすべて同じデータベース ファイルを共有している場合、安全ではありません。各インスタンスは、実行時にメモリ内にデータベースの独自のコピーを持つ必要があります

4

0 に答える 0