2016-12-30 5 views
1

ファイルに既存のデータベースがあります。私はメモリにデータベースをロードしたい。私はたくさんのクエリを実行しており、データベースはそれらのクエリを固定するために非常に大きくはありません(< 50MB)。これを行う方法はありますか?既存のSQLiteデータベースをメモリにロード

答えて

2

50 MBはOSファイルキャッシュに簡単に収まります。何もする必要はありません。

ファイルロッキングの結果、オーバーヘッドが目に見えない場合は、exclusive locking modeの使用を検討してください。

2

RAM driveを作成し、データベースにHDD/SSDホストファイルの代わりにこれらのファイルを使用させることができます。あなたが非常識な性能要件を持っているなら、あなたはインメモリデータベースに行くこともできます。

メモリ内のソリューションを実行する前に:「多くのクエリ」とは何ですか?クエリごとに予想される応答時間は何ですか?データベースプログラムがパフォーマンスのボトルネックではなく、アプリケーションコードが遅いか、非効率なクエリ/インデックスが欠落する可能性があります。

私はSQLiteがデータベースへの同時アクセスをサポートしていないと思うので、多くのパフォーマンスが浪費されます。書き込みがまれにしか発生しない場合は、データベースのコピーを保持し、異なるスレッドが異なるSQLiteインスタンスを読み取るようにすることでパフォーマンスを向上させることができます。

1

CLとRayによって提案されたソリューションのいずれも、ファイルシステムのオーバーヘッドの単純な事実(データがキャッシュされているかどうか、および/またはRAMドライブにあるかどうかにかかわらず)これらの測定値は役に立ちますが、ファイルシステムを完全に破棄することはできません)。

SQLiteでは複数の並行読者が許可されますが、書込みトランザクションがあれば読者は読者が完了するまでブロックされます。

SQLiteでは、メモリ内のデータベースを1つのプロセスで使用できますが、そのプロセスには複数のスレッドが含まれている可能性があります。

永続SQLiteデータベースをメモリ内のデータベースとしてロード(オープン)することはできません(少なくとも、最後に調べたとき)。 2番目のインメモリー・データベースを作成し、インメモリー・データベースをロードするために永続データベースから読み取る必要があります。しかし、データベースがわずか50 MBであれば、それは問題ではありません。サードパーティのツールでは、メモリ内のSQLiteデータベースを保存してからリロードすることができます。

関連する問題