JAVAでリモートデータベースをローカルデータベースと同期する方法
-
06-07-2019 - |
質問
ローカルとリモートの2つのデータベースがあるプロジェクトを作成する必要があります。リモートデータベースは、ローカルデータベースで行われた変更を反映して、ローカルデータベースと毎日同期する必要があります。 JAVAを使用しています。データベースはORACLEです。ローカルデータベースでCRUD操作を行うJAVA / JPAコードがあります。 変更をリモートデータベースに同期する方法。
解決
Javaではこれを行いませんが、ネイティブのOracleデータベース同期メカニズム/ツールを探します。これは
- 実装するより速い
- より堅牢に
- より速い複製イベントがある
- もっと「正しい」
他のヒント
いくつかの同期製品をご覧ください。私が働いているSybaseのSQL Anywhereはそのような製品の1つです。開発者/評価用コピーを入手して、オプションを調べることができます。 Oracleにも似たようなものがあるはずです。
基本的な考え方は、中央データベースで発生した変更を追跡できるようにすることです。これは通常、各行のタイムスタンプを保持することによって行われます。同期中、リモートデータベースは最終同期時間を提供し、サーバーはそれ以降に変更されたすべての行を送信します。中央データベースで削除された行は、リモートデータベースから確実に削除されるように特別な処理が必要になることに注意してください。
真の双方向同期は、はるかに複雑です。また、リモートデータベースからセントラルに変更をアップロードする必要があります。また、リモートデータベースとセントラルデータベースの両方で同じ行が互換性のない方法で変更された場合、いくつかの競合解決戦略を実装する必要があります。
一般的な問題は複雑すぎてここでの説明では説明できませんが、役に立つポインターを提供できたことを願っています。
問題は、あなたが求めているものは、要件に応じて中程度の難易度(単純で非常に堅牢ではないシステムの場合)から小さなチームを1年間忙しく保つことができる非常に複雑な製品まで及ぶことです。
だからこそ、他の答えが「別の方法を見つける」と言ったのです。 (基本的に)
クラスの割り当てなどのためにこれを行う必要がある場合は可能ですが、おそらく迅速、堅牢、または簡単ではありません。
各サイドにサーバーソフトウェアが必要です。未知のテーブルを、ワイヤを介して転送できるデータに変換する方法(および他のサイドでそれを再作成するのに十分なメタデータ)が必要です。データベースの変更を(おそらくフラグまたはタイムスタンプを使用して)追跡して、毎回各レコードを送信する必要がないようにします。
これは非常に困難な問題であり、あまり助けにはなりません。顧客のためにそれをしなければならなかった場合、私は彼にそれを適度に信頼できるものにするために少なくとも1人年の仕事を引用したいと思います。
幸運
Oracleには、データベースを同期するための高度なレプリケーション機能があります。 詳細をご覧ください。 。
コメントから、Oracle Liteを使用しているようです。これは、 Liteのドキュメント。
これを使用したことはありませんが、 http://symmetricds.codehaus.org/ が役に立つ場合があります