質問

SQLite3 が埋め込まれ、メモリ内データベースを使用するアプリケーションでは、アプリケーションの 2 つの実行インスタンス間でデータベースをレプリケートすることは可能ですか?すべての DB アクセスを複製する自作プロトコルを使用してこれを手動で行うこともできますが、DB 層内で行う必要があるようです。

役に立ちましたか?

解決

ブルートフォースアプローチ:「.dump」コマンドを送信して、データのテキスト表現を作成します。そのデータを 2 番目のデータベースに読み取ります。それを使えるかどうかはわかりません。

きめ細かい更新 (それぞれのコピーを他のコピーに送信する) が必要な場合は、以下を参照してください。 sqlite3_update_hook

しかし、エラーをどのように処理する予定ですか?たとえば、app2 の DB のコピーが何らかの理由で更新できない場合はどうなりますか?

これを解決するには、データベースをサーバー プロセスに移動し、2 つのアプリがデータベースと通信できるようにします。

他のヒント

ボックスのうち、ありません。 サードパーティ製のオプションの数が少ないがあります:

SQLiteの同期: https://ampliapps.com/sqlite-sync/ のこの1つは思わ魅力的な、それは他のデータベースに複製するだけでなく、SQLiteは、およびSQLiteのエンジンを変更しない可能性があるため。私はまだ試していません。

Litereplica:のみ http://litereplica.io/ の一つの方法。少し周りされているようです。

LiteSync: http://litesync.io/ の双方向のレプリケーション。かなり新しいが、そうおそらく、より成熟した見た目よりもLitereplicaの進化。私はこのビットを試してみましたが、開発者が見ているいくつかのバグで、スムーズに動作するようには思えません。あなたはに関する依存関係のように思える開発者の変更SQLiteのエンジンを、使用する必要があります。また、例えば、多くの制御を得ることはありませんあなたは、データベースを再オープンすることなく、今複製と言うことはできません。

rel="nofollow" - 使用のものであってもよいのライブの同期(ミラー)デーモンここに。これは、ファイルレベルでの連続レプリケーションを行うためにrsyncを使用します。

インメモリデータベースでレプリケーションが必要な場合は、次の点を確認する必要があります。 バークレー DB (BDB). 。ただし、BDB のデータ モデルは文字列-文字列辞書であるため、SQL の柔軟性が失われます。さらに、3 条項のライセンスがあるため、プロジェクトが商用の場合はライセンスを取得する必要があります。

プロジェクトのスコープは、単純なインプロセスデータベースされているので、

はありませんそれはしていません。データベースが1つだけのファイルですので、しかし、あなたはプレーンファイルのコピー操作、rsyncのか、似たようなに基づいて独自のレプリケーションのスクリプトを書くことができます。

あなたが本当にRDBMSのSQLiteのベースのクライアント/サーバ型にしたい場合は、

は、 SQLiteDBMS 。

ユニゾン?あなたができる最善のは、しかし1つのモノリシックファイルであるためのSQLite DB、ホットスペアでした。次の2つの「インスタンス」とのラウンドロビンができませんでした。ホットスペアが悪いわけではない、あなたは単に、大騒ぎせずに、他のアプリ+デシベルを拾う容易ではない、いくつかの手動による介入がある場合のMySQLマスタースレーブまたはアクティブ - パッシブと比較します。 MySQLのレプリケーションはSQLの周りだけでなく、ユニゾン/ rsyncのようにdiffを渡します。しかし、ユニゾンで、あなたはマスターマスターを持っています。

scroll top