2012-02-22 8 views
6

メインデータベースとしてMongoDB(Linux)を使用しています。しかし、アナログを実行するには、MongoからMS SQLサーバーにコレクションの一部を定期的に(たとえば夜間に)エクスポートする必要があります。mongoコレクションをSQL Serverにエクスポートするためのベストプラクティス

  1. バックアップ(おそらくレプリカから)モンゴデータベース使用してmongodump
  2. モンゴは
  3. は、カスタムを書くistalledされているWindowsマシンにデータベースを復元します。私は、次のアプローチを考えています

    MongoからSQLにコレクションをインポートするために作られたアプリです(必要な正規化を処理する可能性もあります)。

  4. Windows SQL Serverインストールで解析を実行します。

他の「試して真実」の代替品はありますか?

おかげで、 ステファノ

EDIT:ポイント4のために、分析は、SQL Serverのではなく、モンゴ上で実行されます。

+1

あなたの手順は私にはうまく聞こえます。もう1つの選択肢は、元のマシンでMySQLにインポートし、SQLダンプを行い、Windowsマシン上でSQLをインポートすることです(両者間のすべての標準SQLだとします)。いずれにしても、元のサーバーにMySQLをインストールするか、ターゲットサーバーにMongoをインストールするかによって異なります。 –

答えて

3

全体的には正常に見えるが、私は二つのことをお勧めすることができます

  1. スキップバックアップ/ステップを復元し、LinuxにMongoDBから直接データを読み込み、それはバックアップに難しくなりますので、それが成長すると/データベースを復元します。
  2. 夜間の輸出のためにカスタムメイドアプリではなくQuartz.netを使用するのは使いやすく、他のスケジュールタスクを解決することができます。

また、私はcqrs and event sourcingのような新しいアプローチを検討することをお勧めします。これは基本的にエクスポートタスクを避けることを可能にしています。小さな遅延でリアルタイムでメッセージを処理し、データを2つのデータソース(linux mongodb、windows sql server)に格納したり、メッセージのデータを分析してmongodbに格納することさえできます。

+0

ライブインスタンスから直接データを読み取るとデータの整合性が損なわれる可能性はありません(特に、操作が数分に及ぶ場合)。コピーの進行中にデータが変更されたらどうなりますか? –

+0

@StefanoRicciardi:データの読み取り時にデータの整合性をどのように破ることができるかわかりません。あなたがそれを読んでも5日間。あなたがそれを読んでいる間にデータが変更されたら、大丈夫です。何らかの方法で古いデータで分析を実行します。 –

+0

実際、私はソースではなく、_target_データの完全性に懸念しています。アイテムAがコレクションBからアイテムbを参照するコレクションAを掃引しているとします。一方、bはソースから削除され、コレクションBをコピーする準備ができたらアイテムbはもう存在しません。 –

関連する問題