我在下面找到了一些讨论这个场景的线程.
但是仍然很难找到,如果有任何推荐的数据结构设计.我看到一个多写库firebase-multi-write,它说你在大多数情况下可能不需要这个.
但我认为我确实需要这个,我的情况是:3个用户
/users/A : {credit:20}
/users/B : {credit:3}
/users/C : {credit:10}
Run Code Online (Sandbox Code Playgroud)
每个用户可以窃取相互学分都在同一时间,
现在我需要为每个用户更新信用以保持这种一致性,这样每个窃取操作本质上都是原子的.
在保持Java数据完整性的同时,处理此类场景的最佳方法是什么?
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)