Postgres和Mongodb的双向数据库同步

Postgres和Mongodb的双向数据库同步,mongodb,postgresql,synchronization,data-synchronization,database,Mongodb,Postgresql,Synchronization,Data Synchronization,Database,假设我有一个本地服务器在运行,我也有一个完全相似的服务器在amazon上运行 两台服务器都可以CRUD将数据传输到其数据库 Note that the servers use both `postgres` and `mongodb`. 现在,当没有人使用wifi时(通常是在夜间),我想同步postgres和mongodb数据库,以便正确应用服务器上每个数据库到本地数据库的所有写入操作 我不想使用多主机,因为: MongoDB本身不支持这种架构,所以我可能需要一个复杂的替代方案 我想控制同步这

假设我有一个本地服务器在运行,我也有一个完全相似的服务器在amazon上运行

两台服务器都可以
CRUD
将数据传输到其数据库

Note that the servers use both `postgres` and `mongodb`.
现在,当没有人使用wifi时(通常是在夜间),我想同步
postgres
mongodb
数据库,以便正确应用服务器上每个数据库到本地数据库的所有写入操作

我不想使用多主机,因为:

  • MongoDB本身不支持这种架构,所以我可能需要一个复杂的替代方案
  • 我想控制同步这两个数据库的时间和程度
  • 我不想在别人使用互联网时使用网络带宽
  • 谁能给我指一下正确的方向

    另外,如果你列出一些解决我问题的工具,这将非常有帮助。
    谢谢。

    我们有几个驱动程序可以帮助您完成此过程。我想了解一些软件开发方面的知识,并将展示我们针对MongoDB的ADO.NET提供商,它使用熟悉的
    MongoDBConnection
    MongoDBCommand
    MongoDBDataReader
    对象

    首先,您需要创建连接字符串,以便与云MongoDB实例连接:

    string connString = "Auth Database=test;Database=test;Password=test;Port=27117;Server=http://clouddbaddress;User=test;Flatten Objects=false";
    
    您会注意到,我们将flatte 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++;
      }
    }
    
    此时,您将插入所有新文档。然后可以将过滤器(开头的WHERE子句)更改为基于更新的日期/时间进行过滤,并使用update命令更新本地MongoDB实例中相应的条目

    注意事项:

    • 确保正确筛选出新的/更新的条目
    • 确保正确解释了变量的类型,以便在SQL查询中输入值时正确使用引号(或不使用引号)
    我们有一些可能对您有用的驱动程序。我已经演示了上述内容,但我们还有一个和。

    我们的任何一个应用程序都可以让您构建自己的应用程序,将新的/更新的文档从基于云的数据库推送到本地数据库。我很快就会得到一个正确的答案并贴出来。
    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();
    }