Firebase:在单个事务中更新多个对象

dus*_*awn 6 java firebase

我在下面找到了一些讨论这个场景的线程.

但是仍然很难找到,如果有任何推荐的数据结构设计.我看到一个多写库firebase-multi-write,它说你在大多数情况下可能不需要这个.

但我认为我确实需要这个,我的情况是:3个用户

/users/A : {credit:20}

/users/B : {credit:3}

/users/C :  {credit:10}
Run Code Online (Sandbox Code Playgroud)

每个用户可以窃取相互学分都在同一时间,

  • B点数的抢断看起来像{21,2}
  • 来自C点数的B抢断看起来像{3,9}
  • 来自A学分的C抢断看起来像{11,20}

现在我需要为每个用户更新信用以保持这种一致性,这样每个窃取操作本质上都是原子的.

在保持Java数据完整性的同时,处理此类场景的最佳方法是什么?

Die*_*cio 5

2015年9月,firebase开发者发布了新版本.

在此版本中,您现在可以在两个位置的单个原子更新中执行此操作:

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
// Generate a new push ID for the new post

Firebase newPostRef = ref.child("posts").push();
String newPostKey = newPostRef.getKey();

// Create the data we want to update
Map newPost = new HashMap();
newPost.put("title", "New Post");
newPost.put("content", "Here is my new post!");

Map updatedUserData = new HashMap();
updatedUserData.put("users/posts/" + newPostKey, true);
updatedUserData.put("posts/" + newPostKey, newPost);

// Do a deep-path update
ref.updateChildren(updatedUserData, new Firebase.CompletionListener() {
   @Override
   public void onComplete(FirebaseError firebaseError, Firebase firebase) {
       if (firebaseError != null) {
           System.out.println("Error updating data: " + firebaseError.getMessage());
       }
   }
});
Run Code Online (Sandbox Code Playgroud)