我在下面找到了一些讨论这种情况的帖子。
然而,如果有任何推荐的数据结构设计,仍然很难找到。 我看到一个多写库firebase-multi-write,表示在大多数情况下你可能不需要这样做。
但我认为我确实需要这个,我的情况是:3个用户
/users/A : {credit:20}
/users/B : {credit:3}
/users/C : {credit:10}
每个用户可以同时从所有人中窃取信用。
现在我需要为每个用户更新信用以保持这种一致性,这样每个窃取操作都是原子性的。
在 Java 中维护数据完整性的同时处理此类场景的最佳方法是什么?
答案 0 :(得分:5)
2015年9月,firebase开发人员发布了new version。
在此版本中,您现在可以通过对两个位置的单个原子更新来执行此操作:
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());
}
}
});