MySqlバックエンドを使用して、さまざまなショップでJava PoS(Point of Sale)アプリケーションを実行しています。ショップのデータベースをホストサーバーのデータベースと同期させたい。
ショップで変更が発生した場合は、ホストサーバーで更新する必要があります。どうすればこれを達成できますか?
MySqlバックエンドを使用して、さまざまなショップでJava PoS(Point of Sale)アプリケーションを実行しています。ショップのデータベースをホストサーバーのデータベースと同期させたい。
ショップで変更が発生した場合は、ホストサーバーで更新する必要があります。どうすればこれを達成できますか?
回答:
レプリケーションの作成はそれほど難しくありません。
ここにいくつかの良いチュートリアルがあります:
http://www.ghacks.net/2009/04/09/set-up-mysql-database-replication/
http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html
http://www.lassosoft.com/Beginners-Guide-to-MySQL-Replication
ここで覚えておく必要のあるいくつかの簡単なルールがあります(もちろんもっとありますが、それが主な概念です):
このようにして、エラーを回避できます。
例: スクリプトがマスターとスレーブの両方の同じテーブルに挿入されると、重複する主キーの競合が発生します。
「スレーブ」は、マスターと同じ情報を保持しているがデータを直接追加できない「バックアップ」サーバーとして表示できます。マスターサーバーの指示に従うだけです。
注:もちろん、マスターから読み取ることもスレーブに書き込むこともできますが、同じテーブル(マスターからスレーブおよびスレーブからマスター)に書き込まないように注意してください。
サーバーを監視して、すべてが正常であることを確認することをお勧めします。
さらにサポートが必要な場合はお知らせください
3つの異なるアプローチ:
従来のクライアント/サーバーアプローチ:ショップにデータベースを配置しないでください。アプリケーションにサーバーにアクセスさせるだけです。もちろん、VPNを設定する方が良いですが、単に接続をSSLまたはsshでラップするのが妥当です。プロ:それはデータベースが最初に考えられていた方法です。短所:待ち時間が長く、複雑な操作が遅くなる可能性がある場合は、ストアドプロシージャを使用して、ラウンドトリップの数を減らす必要があります。
複製されたマスター/マスター:@Book OfZeusが提案したように。短所:セットアップがやや複雑になり(特に複数のショップがある場合)、ショップマシンに侵入すると、システム全体が危険にさらされる可能性があります。長所:読み取り操作は完全にローカルであり、書き込み操作は非同期で伝播されるため、応答性が向上します。
オフライン操作+同期ステップ:すべての作業をローカルで実行し、時々(1時間に1回、毎日、毎週など)、最後の同期操作からのすべての新規/変更されたレコードを含む要約を書き込み、サーバーに送信します。長所:ネットワークがなくても動作し、高速で、簡単に確認できます(要約が読みやすい場合)。短所:リアルタイムの情報がありません。
SymmetricDSがその答えです。一方向または双方向の非同期データレプリケーションで複数のサブスクライバーをサポートします。Webおよびデータベーステクノロジを使用して、必要に応じてほぼリアルタイムでリレーショナルデータベース間でテーブルを複製します。
ニーズに合わせた包括的で堅牢なJavaAPI。
見ていスキーマおよびデータ比較ツールをMySQLのDBフォージStudioで。これらのツールは、比較、違いの確認、同期スクリプトの生成、および2つのデータベースの同期に役立ちます。