nodejs中数据同步的最佳实践

时间:2016-11-12 04:23:53

标签: node.js mongodb asynchronous firebase synchronization

我正在尝试在两个系统之间进行一些集成,在同步数据方面我遇到了一些问题。

我正在使用 nodejs ,数据库是 mongodb firebase

该方案描述如下:

  • systemA with dbA
  • systemB with dbB

执行以下操作:

  1. systemA向systemB发送请求(POST或PUT),body是这样的:

    {
      .....
      fieldA1: valueA1,
      fieldA2: valueA2
      .....
    }
    
  2. 然后systemB需要根据systemA数据更新dbB中的几个字段(fieldB1,fieldB2),如下所示:

    fieldB1: valueA1
    
    fieldB2: valueA2
    
  3. BOTH fieldB1fieldB2成功更新后
  4. ,然后执行更多逻辑

  5. 我正在使用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
    })
    

    由于fieldB1fieldB2应该同时更新 ,因此无法更新fieldB1fieldB2的任何一种情况都会导致数据不一致,这不是正确的结果。

    但是,async.parallel无法保证任何更新失败都会回滚或阻止其他更新失败吗?更新fieldB1fieldB2时,是否有任何方法可以保持 BOTH 的数据一致性?

1 个答案:

答案 0 :(得分:0)

我发现将代码映射到Firebase API很困难。但是您所描述的内容听起来就像使用transactionsmulti-location updates可以实现的那样。

我过去在How to write denormalized data in Firebase

中深入介绍了这些类型的更新