3

分散Javaアプリケーションがあり、別々のコンピューターシステムまたはAndroidデバイスにある2つのデータベース間でデータベースデータを送信したいと思います。テーブルデータを転送してソケット接続をスローするのに最適な方法はどれですか?テーブル行をテキスト行またはxml要素として送信するか、すべてのテーブルのクラス(Serializableインターフェイスを実装)を作成して、そのオブジェクトの配列リストを転送することを考えています各テーブル。あなたの意見では、どちらがより効果的な解決策ですか?それを行う他の方法はありますか?データベースはmysql、sqlite、h2databaseのように異なる可能性があるため、データベースのネイティブ関数を使用して同期することはできません(ここでは、似たようなものを探している間、orableデータベースについて何かを読んでいますが、このような関数があります)。

どうもありがとうございます!!

4

2 に答える 2

2

私がこれをしている場合に私が取るであろうステップのためのほんのいくつかのアイデア。

まず、データベースから各マシンまたはデバイスの一般的な形式にデータを読み取ります。JPAを使用して実行するのが最も簡単です。

2つのデバイスを同期させる必要があるため、比較するための共通のスポットが必要です。次に、データに不一致がある場合は、どのコピーが正しいかを判断する必要があります。または、これが単一のテーブルである場合は、両方のコピーの和集合を取得してから、それを各マシンにプッシュバックします。

したがって、これを行うにはキューイングサーバーを使用します。各マシンで、JPAを使用してデータを読み取り、Gsonを使用してキューイングサーバー(HornetQを使用します)に投稿します。両方のマシンからのデータが入力キューに到着します。

次に、この入力キュー用のリーダーを1つ用意します。このリーダーは、データをまとめて破棄し、重複を破棄して、データの正規ビューを作成します。最後に、このデータは、両方(またはすべて)のデバイスがサブスクライブされているJMSトピックに(再びGsonで)プッシュされます。

次に、各デバイスはデータベースの各行を取得し、それに応じて追加または更新できます。どこからでもデータを削除したい場合は、削除を記録するために各デバイスに特別なログが必要になります。

それは単なるスターターです...!:)

于 2011-04-27T18:03:24.827 に答える
2

個人的には、XMLはデータを転送するには冗長すぎると思います。最終的には、コンテンツ用に半分、構造用に半分のデータ量になる可能性があります。

<record>
   <name>John</name>
   <age>30</age>
</record>

構造を定義する際にほとんどのスペースが失われ、必要なデータ用にほとんど残されていません(John、30)。

プレーンテキストの行は制限が多すぎます。必要に応じて、少なくともコンマ区切りの値を検討してください。

Name;Age
John;30

最初の行はラベル専用です。変更されないことがかなり確実な場合は、削除できます。

オブジェクトのシリアル化は、データを転送するには危険すぎる可能性があります。これは、時間の経過とともに非互換性が生じ、逆シリアル化が失敗する可能性があるためです。たとえば、フィールドの導入または削除で十分です。

JSONを見てください。XMLほど冗長ではなく、単なる行よりも構造化されています。もちろん重要なのは、データを両端で適切に処理することですが、送信される構造がわかっていれば、データを適切に変換できます。

例:

{name: John, age: 30 }
于 2011-04-27T18:28:56.507 に答える