3

私は2つの異種データベースを持っています。1つはmysqlに、もう1つはmssqlにあります。

それらを同期させたい。

定期的にデータの流れがあり、情報の流れは双方向になります

誰かがそれに戦略/アプローチを持っていますか?

4

4 に答える 4

2

なんらかの既製のソリューションを使用しないと仮定すると、いくつかのオプションが開かれています。基本的に、あなたがしようとしているのは、1 つのデータベースで行われた変更をキャプチャし、それらを他のデータベースに複製する方法を見つけることです。

完全な抽出とデルタ
同期するテーブル内のすべての行のキーでソートされた完全なダンプを取得し、最後に実行した同期のダンプと行ごとに比較します。出力を並べ替えると、行が変更、削除、または削除されたかどうかを確認できるため、比較プロセスが大幅に高速化されます。

  • 長所:すべての変更をキャプチャすることが保証されています。
  • 長所:実装が簡単。
  • 短所:遅い。
  • 短所:実行時にデータベースに多くの負荷がかかります。

このオプションは、小規模または中規模のデータベースに適しています。

トランザクション ログ
データベースのトランザクション ログを分析して変更内容を特定し、それらの変更を他のデータベースに適用します。

  • 長所:データベースからすべてを読み取る必要がないため、高速です。
  • 長所:まだ比較的簡単に実装できます
  • 短所: DBA は、運用上の問題を解決するためにログをパージする必要がある場合があります。これにより、同期されない変更が失われる可能性があります。

ログが利用可能であると期待できる場合は、おそらく良い考えです。

トリガー トリガー
を使用して変更を記録し、それらを他のデータベースに複製します。

  • 長所:変更のみをキャプチャするため、高速です。
  • 短所:すべてのトランザクションにオーバーヘッドが追加されます

アプリケーションでの同期
アプリケーションが両方のデータベースに書き込むことを確認してください。

  • 長所:データベースの実際のオーバーヘッドはありません。
  • 短所:信頼できない。必要なのは、両方のデータベースへの書き込みを 1 人忘れるだけです。

これは、アプリケーションがいくつかの制御されたモジュールのみを介してデータベースに書き込む場合 (つまり、両方のデータベースの更新を忘れる場所が多くない場合) に機能する可能性があります。あまり管理されていない設定 (つまり、複数のアプリケーション / 制御されていない、または十分に分割されていないデータベース アクセス / アドホック スクリプト) では、これは単にオプションではありません。

于 2009-12-13T11:32:53.007 に答える
0

アナンド、これはGoogleで見つけることができます。

mysql と mssql を同期する

私はこのソフトウェアを使用していませんが、無料の試用版を提供しています

于 2009-12-13T11:02:04.730 に答える
0

最初に詳細情報が必要です:

  • 同期でどのくらいの遅延を許容できますか? 5秒?5時間?15時間?等
  • データベース間の変換はどの程度ですか? ビューで処理できるものは何もないか、些細な変更ですか、それとももっと実質的なものですか?
  • データ量はどのように見えますか? テーブルの大きさ、毎日変更されるデータの量、およびデータが分割されているか?
  • 同時実行要件は何ですか? ユーザーのアクセスを数分間遮断できますか?
  • 双方向の変更は、同じテーブルまたは別のテーブルに対して発生しますか?
  • データ品質要件は何ですか? 2 つの異なるトランザクションが、それぞれが同じテーブルの同じ行にあるが異なるデータベースにある場合、ほぼ同時に更新され、一方が他方を踏んでも問題ありませんか?
  • 粒度は何ですか?発生する各トランザクションをレプリケートする必要がありますか、それともある時点の現在のスナップショットだけをレプリケートする必要がありますか (その時点が 5 分ごとであっても)?

一般に、リアルタイム同期が必要な場合は、レプリケーション ソリューションになります。これは通常、非常に少量の変換を処理できます (通常、ストアド プロシージャを介して発生します)。これは通常、ログを盗聴する商用ソリューションです。ほとんどの人は、コードがログ形式に依存することを望まないため、ほとんどの場合、パッケージ化されたソリューションを使用します。

リアルタイムの同期が不要な場合、大量のデータがある場合、または重要な変換要件がある場合は、ETL ソリューションを使用することになります。選択できるものはかなりありますが、ほとんどが商用です。一方、時間をかけてベスト プラクティスを理解すれば、自分で開発するのは難しくありません。奇妙なことに、これは実際にはあまり話されていません。いずれにせよ、Adam Luchjenbroers は ETL を使ったアプローチのほとんどをうまく識別しました。スナップショット間のトランザクションを失う余裕がある場合は、ファイル デルタ アプローチをお勧めします。それ以外の場合は、すべての変更をキャプチャしないタイムスタンプ、トリガー、またはログに依存しているため、最も正確なアプローチです。

于 2009-12-14T14:34:17.277 に答える
0

synchrodb.com をご覧ください

SynchroDB は 2 つのデータベースの内容を比較し、パラメーターとソース データベースの内容に従って、宛先データベースの内容を更新します。

SynchroDB は、機能キーの概念を使用して、ソース データベースと宛先データベースの行を照合します。

SynchroDB は高度にカスタマイズ可能です。デフォルトの動作は次のとおりです。

•宛先データベースに含まれていない行を挿入する。

• 両方のデータベースに属する行について、それらのフィールドを 1 つずつ比較し、異なるフィールドを宛先データベースで更新します。

•ソースデータベースに存在しない行を宛先データベースから削除する。

SynchroDB は無料です。

于 2012-07-10T13:33:18.810 に答える