1

私はローカルサーバーを稼働させており、まったく同じサーバーが既にアマゾンで稼働しているとしましょう。PostgresとMongodbの双方向データベース同期

両方のサーバーは、データベースにCRUDデータを格納できます。誰もが(通常は夜間に)無線LANを使用していない今、ときに、ローカル上の各データベースにサーバー上の各データベースからのすべての書き込みが適切になるように

Note that the servers use both `postgres` and `mongodb`. 

、私は両方postgresmongodbデータベースを同期したいです適用される。

私はので、マルチマスターを使用したくない:MongoDBのは、このアーキテクチャ自体をサポートしていないので、おそらく私は、複雑な代替が必要になります

  1. 両方のデータベースをいつどのくらい同期させるかを制御したい。
  2. 他の人がインターネットを使用しているときにネットワーク帯域幅を使用したくありません。

誰も私に正しい方向を示すことができます。

また、私の問題を解決するいくつかのツールをリストすると、非常に役立ちます。おかげさまで

+0

[Drivers for MongoDB](http://www.cdata.com/drivers/mongodb/)は、クラウドベースのデータベースからローカルデータベースに新しい/更新されたドキュメントをプッシュする独自のアプリケーションを構築できるようにします。私は適切な回答を書いてすぐに投稿します。 –

答えて

1

私たちには、このプロセスを手助けできるドライバがいくつかあります。私はソフトウェア開発の知識を前提としており、よく知られているMongoDBConnectionMongoDBCommand、およびMongoDBDataReaderオブジェクトを使用しているMongoDBのADO.NET Providerを紹介します。

まず、あなたはあなたと接続するための接続文字列を作成したいと思うのMongoDBインスタンスをクラウド:あなたは私たちがフラット化がfalseにプロパティセットをオブジェクト持っていることに注意しましょう

string connString = "Auth Database=test;Database=test;Password=test;Port=27117;Server=http://clouddbaddress;User=test;Flatten Objects=false"; 

、これはそのいずれかのJSONを保証します/ BSONオブジェクトは、未処理のJSON/BSONとして返されます。

接続文字列を作成したら、接続を確立してデータベースからデータを読み取ることができます。将来の使用のために簡単にアクセスできるように、返されたデータを保存することをお勧めします。あなたは、レプリケートするオブジェクトごとにすべてのデータを収集した後

List<string> columns = new List<string>(); 
List<object> values; 
List<List<object>> rows = new List<List<object>>(); 
using (MongoDBConnection conn = new MongoDBConnection(connString)) 
{ 


    //create a WHERE clause that will limit the results to newly added documents 
    MongoDBCommand cmd = new MongoDBCommand("SELECT * FROM SomeTable WHERE ...", conn); 
    rdr = cmd.ExecuteReader(); 
    results = 0; 

    while (rdr.Read()) 
    { 
    values = new List<object>(); 
    for (int i = 0; i < rdr.FieldCount; i++) 
    { 
     if (results == 0) 
     columns.Add(rdr.GetName(i)); 
     values.Add(rdr.GetValue(i)); 
    } 
    rows.Add(values); 
    results++; 
    } 
} 

、あなたの地元のMongoDBインスタンスへの新しい接続を設定し、新しいドキュメントを挿入するためにクエリを構築することができます。

connString = "Auth Database=testSync;Database=testSync;Password=testSync;Port=27117;Server=localhost;User=testSync;Flatten Objects=false"; 
using (MongoDBConnection conn = new MongoDBConnection(connString)) { 
    foreach (var row in rows) { 
    //code here to create comma-separated strings for the columns 
    // and values to be inserted in a SQL statement 

    String sqlInsert = "INSERT INTO backup_table (" + column_names + ") VALUES (" + column_values + ")"; 
    MongoDBCommand cmd = new MongoDBCommand(sqlInsert, conn); 
    cmd.ExecuteQuery(); 
} 

この時点で、すべての新しいドキュメントが挿入されます。その後、UPDATEコマンドを使用して、ローカルのMongoDBインスタンス内の対応するエントリを更新し、更新された日付/時刻に基づいてフィルタリングするフィルタ(最初はWHERE句)を変更できます。外を見るために

もの:

  • あなたが適切に新しい/更新されたエントリをフィルタリングしていることを確認してください。
  • SQLクエリに値を入力するときに、引用符で囲む(またはしない)ように変数の型を正しく解釈していることを確認してください。

私たちには、あなたに役立ついくつかのドライバがあります。上記のADO.NET Providerを実演しましたが、driver for writing apps in XamarinJDBC driver (for Java)もあります。

関連する問題