我正在尝试在两个系统之间进行一些集成,在同步数据方面我遇到了一些问题。
我正在使用 nodejs ,数据库是 mongodb 或 firebase
该方案描述如下:
执行以下操作:
systemA向systemB发送请求(POST或PUT),body
是这样的:
{ ..... fieldA1: valueA1, fieldA2: valueA2 ..... }
然后systemB需要根据systemA数据更新dbB中的几个字段(fieldB1,fieldB2),如下所示:
fieldB1: valueA1
fieldB2: valueA2
fieldB1
和fieldB2
成功更新后,然后执行更多逻辑
我正在使用async
来控制异步进程。我的代码实现了这3个步骤:
async.waterfall([
function (callback) {
//get valueA1 of fieldA1 and valueA2 of fieldA2
},
async.parallel([
function (callback) {
//set valueA1 to fieldB1
},
function (callback) {
//set valueA2 to fieldB2
}
], function (err, result) {
//more logic here
})
], function (err, result) {
//more logic here
})
由于fieldB1
和fieldB2
应该同时更新 ,因此无法更新fieldB1
或fieldB2
的任何一种情况都会导致数据不一致,这不是正确的结果。
但是,async.parallel
无法保证任何更新失败都会回滚或阻止其他更新失败吗?更新fieldB1
和fieldB2
时,是否有任何方法可以保持 BOTH 的数据一致性?
答案 0 :(得分:0)
我发现将代码映射到Firebase API很困难。但是您所描述的内容听起来就像使用transactions或multi-location updates可以实现的那样。
中深入介绍了这些类型的更新