2016-07-03 11 views
1

Zeoslibを使用してSQLiteでインメモリデータベースを作成しています。プログラムを閉じたり、ファイルに定期的にダンプしたりするときに、データベースにディスクを保存する必要があります。SQL挿入コマンドとして選択クエリを出力できるSQLiteコマンドはありますか?

メモリデータベースでSQLite3プログラムが処理できないため、クエリの出力をINSERT文としてエクスポートする方法はありますか?

PS。 sqlite3は、このスレッドで示されているようにメモリデータベースをディスクにダンプすることができますが、インメモリデータベースは別のアプリケーションによって作成されるため、このサンプルをどのように動作させるのかわかりません。

+0

ファイルが必要な場合は、最初にインメモリDBを使用しているのはなぜですか? –

+0

私はメモリ内処理の速度が必要ですが、完了したらディスクに戻したいと思います。 – vfclists

答えて

2

メモリDBをディスクに保存するには、SQLiteのbackup APIでコピーを作成します。これには、データベース・ドライバーが実際にバックアップAPIをサポートしている必要があります。ゼオスは明らかにそうではない。とても遅いディスク上のデータベースを作る何


は、ディスクが(ほとんどのキャッシュすることができた)自分自身にアクセスしますが、同期がDBがそのままとどまることを確実にするためにされていない場合でも、プログラムやコンピュータのクラッシュ。

、インメモリDBとして安全ではないとして、ディスク上のDBを作るのコストで、速度を向上させる設定がいくつかあります:

  • 設定しPRAGMA synchronousOFFへ:

    は、

    同期OFF(0)の場合、SQLiteはデータをオペレーティングシステムに渡すとすぐに同期せずに続行します。 SQLiteを実行しているアプリケーションがクラッシュした場合、データは安全ですが、オペレーティングシステムがクラッシュしたり、ディスク表面にデータが書き込まれる前にコンピュータの電源が切れた場合、データベースが破損する可能性があります。一方、コミットは、同期オフを使用すると、さらに速くなります。 MEMORYへ

  • 設定PRAGMA journal_mode

    MEMORYジャーナリングモードは揮発性RAMにロールバックジャーナルを格納します。これにより、ディスクのI/Oは節約されますが、データベースの安全性と整合性は犠牲になります。 MEMORYジャーナリングモードが設定されているときにトランザクションの途中でSQLiteを使用するアプリケーションがクラッシュすると、データベースファイルが破損する可能性が高くなります。

  • PRAGMA cache_size(デフォルトは通常2 MB)です。

  • 無効PRAGMA secure_delete

関連する問題