SQLite3 を組み込み、メモリ内データベースを使用するアプリケーションで、アプリケーションの 2 つの実行中のインスタンス間でデータベースを複製することは可能ですか? すべてのDBアクセスを複製する自作プロトコルを使用して手動でこれを行うことができますが、DBレイヤー内で行う必要があるようです。
7 に答える
力ずくのアプローチ: 「.dump」コマンドを送信して、データのテキスト表現を作成します。そのデータを 2 番目のデータベースに読み込みます。あなたがそれを使用できるかどうかわかりません。
細かい更新 (それぞれのコピーを他のコピーに送信する) が必要な場合は、以下を参照してください。sqlite3_update_hook
しかし、どのようにエラーを処理する予定ですか? たとえば、app2 の DB のコピーが何らかの理由で更新できない場合はどうなりますか?
これを解決するには、データベースをサーバー プロセスに移動し、2 つのアプリが対話するようにします。
メモリ内データベースでレプリケーションが必要な場合は、berkeley DB (BDB)を確認する必要があります。ただし、BDB のデータ モデルは文字列辞書であるため、SQL の柔軟性が失われます。さらに、3 条項ライセンスがあるため、プロジェクトが商用の場合はライセンスを取得する必要があります。
いいえ、プロジェクトのスコープは単純なインプロセス データベースであるため、そうではありません。ただし、データベースは 1 つのファイルにすぎないため、単純なファイル コピー操作、rsync などに基づいて独自のレプリケーション スクリプトを作成できます。
RDBMS の SQLite ベースのクライアント/サーバー タイプが本当に必要な場合は、SQLiteDBMSを参照してください。
ユニゾン?ただし、SQLite db は 1 つのモノリシック ファイルに含まれているため、ホット スペアを使用することをお勧めします。2 つの「インスタンス」間でラウンドロビンを行うことはできませんでした。ホット スペアは悪くありません。簡単ではない手動の介入がある MySQL マスター/スレーブまたはアクティブ/パッシブと比較して、大騒ぎせずに他の app+db を選択するだけです。MySQL レプリケーションは、unison/rsync のような差分だけでなく、SQL を通過します。しかし、ユニゾンではマスターマスターになります。