7

小規模で単純なリレーショナル データベース (SQLite など) をピア間で複製する方法を探しています。これは、ネットワーク接続が不安定な環境でも機能するはずです。そのため、各ピアにデータベースの完全なコピーが必要です。これにより、ネットワーク障害が発生した場合でも、ピアはオフラインで作業を続けることができます。

単純にするために、レプリケーションはデータの追加のレプリケーションのみをサポートする必要があります。つまり、DELETE や UPDATE ではなく、INSERT のみをサポートする必要があります。

そのようなシステムを作成するための優れた、そして理想的にはクロスプラットフォームのテクノロジーまたは方法を知っている人はいますか? 私は現在 JXTA と JXSE を検討していますが、その複雑さと Oracle による Sun の買収後、そのコミュニティでの明らかな活気の欠如に気が進まないのです。

ありがとう!フランス

4

3 に答える 3

0

JXTAが気に入らない場合は、通信レイヤーのJGroupsを調べることをお勧めします。レプリケーションについては、独自のコードを実装する必要があると思います。

于 2011-10-07T22:27:54.343 に答える
0

私は似たようなことに取り組んでいます (コードは準備ができていませんが)。意図したアプローチについて少し説明しますが、それが適切かどうかは、考慮すべき重要な設計ポイントによって異なります。残念ながら、これを行う既製のプロジェクトは知りません。

  • 特に、どの言語を使用したいのか、またはどの言語を避けたいのかを知る必要があります。
  • また、ピア検出を行う方法を検討してください。ノード ペア間の信頼を手動で設定できますか、それとも自動検出しますか?
  • おそらくすべてのピアがデータを挿入できますか?

PHP を使用でき、ノード ペアを手動でピアリングすることに満足している場合は、私のアプローチに興味があるかもしれません。Doctrine、Propel、NotORM などの ORM をセットアップし、各ノードをインターネット時刻ソースと定期的に同期させます。データベースの新しい行ごとに、データを (配列または ORM オブジェクトのいずれかで) 取得し、シリアル化し、信頼関係にあるすべてのノードにプッシュします。プッシュが失敗した場合は、これを記録し、定期的に再試行してください (リモート ノードが多数の再試行に応答できなかった場合は、あきらめる可能性があります)。

プッシュは、行を作成するアプリケーションによって開始されるか、各マシンで使用可能なスケジューラによって呼び出されます。プッシュ メッセージは XML にすることも、簡単にするために新しい行とあらゆるメタデータを含む POST メッセージにすることもできます (たとえば、複数のノードからの INSERT 順序を解決するための保存のタイムスタンプ)。

ノードに静的 IP アドレスがない場合は、動的 DNS アドレス指定サービスに登録して、IP が変更された場合でも各ノードがピアと連絡を取り合うことができるようにすることができます。ノード間のメッセージが本物であることを保証するために、メッセージ署名システムを追加することも検討してください。

于 2011-10-10T21:51:59.200 に答える