1

Zeoslib を使用して SQLite でメモリ内データベースを作成しています。プログラムを閉じるときにデータベースをディスクに保存するか、定期的にファイルにダンプする必要があります。

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

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

4

1 に答える 1

2

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


ディスク上のデータベースが非常に遅いのは、ディスク アクセス自体 (ほとんどはキャッシュ可能) ではなく、プログラムやコンピューターがクラッシュした場合でも DB が損なわれないようにするための同期です。

オンディスク DB をインメモリ DB と同じくらい安全ではないものにすることを犠牲にして、速度を上げる設定がいくつかあります。

  • PRAGMA 同期を次のように設定しOFFます。

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

  • PRAGMA journal_modeを MEMORY に設定します。

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

  • PRAGMA cache_sizeを増やします(デフォルトは通常 2 MB のみです)。

  • PRAGMA secure_deleteを無効にします。

于 2016-07-04T06:44:00.840 に答える