Postgres和Mongodb的双向数据库同步
假设我有一个本地服务器在运行,我也有一个完全相似的服务器在amazon上运行 两台服务器都可以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本身不支持这种架构,所以我可能需要一个复杂的替代方案 我想控制同步这
CRUD
将数据传输到其数据库
Note that the servers use both `postgres` and `mongodb`.
现在,当没有人使用wifi时(通常是在夜间),我想同步postgres
和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();
}