【问题标题】:Realtime Database Firebase "All or nothing" transactions实时数据库 Firebase “全有或全无”事务
【发布时间】:2022-03-17 13:33:46
【问题描述】:

有没有办法在 RTDB 中为“批量”写入操作事务 API?(我们目前无法迁移到 Firestore)
我们的问题如下:
当向服务器写入一个新的“Job”对象时,我们会执行三个连续写入:

  1. 使用GeoFire API 写入位置键
  2. 写作业
  3. 将作业 ID 连接到创建它的用户

不幸的是,如果其中一个写入失败但前一个写入成功,则会导致系统出现重大错误。
我们正在寻找确保完整性的方法,或者在其中一个写入失败时恢复操作。

【问题讨论】:

    标签: firebase firebase-realtime-database transactions


    【解决方案1】:

    如果只是写入和“确保完整性,或者如果其中一个写入失败则恢复操作”的问题,您可以使用同步更新使用update() 方法。

    如文档中所述,“同时更新......是原子的:要么所有更新成功,要么所有更新失败。”。请参阅文档的这一部分:https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields

    请注意,实时数据库还提供了将数据保存为事务的可能性,请参阅文档项 here 和 here。但是,在您的情况下,使用同时更新可能就足够了。

    【讨论】:

      【解决方案2】:

      这是我的代码中的一个 sn-p,仅供将来参考。 (使用雷诺的答案)

      private void pushJob(Person person) {
              DatabaseReference dataBase = FirebaseDatabase.getInstance().getReference();
      
              GeoHash geoHash = new GeoHash(new GeoLocation(choosenLatLng.latitude,choosenLatLng.longitude));
              Map<String, Object> geofireData = new HashMap<>();
              geofireData.put("g", geoHash.getGeoHashString());
              geofireData.put("l", Arrays.asList(choosenLatLng.latitude,choosenLatLng.longitude));
      
      
              Map<String, Object> childUpdates = new HashMap<>();
              childUpdates.put("/Geofire/" + job.getmJobUid(), geofireData);
              childUpdates.put("/Jobs/" + job.getmJobUid(), job);
              childUpdates.put("/Users/" + job.getPersonUid(), person);
      
              dataBase.updateChildren(childUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
                  @Override
                  public void onComplete(@NonNull Task<Void> task) {
                      progressDialog.dismiss();
                      updateUI();
                  }
              });
          }
      

      【讨论】:

        猜你喜欢
        • 2021-11-23
        • 2020-08-08
        • 2021-12-22
        • 1970-01-01
        • 2021-09-27
        • 2020-12-28
        • 2021-10-26
        • 2021-02-13
        相关资源
        最近更新 更多