{
"places": {
"<push-key>": {
"name": "Company X"
},
"<push-key>": {
"name": "Restaurant Y"
}
}
"users": {
"<push-key>": {
"name": "Harry"
}
},
"userPlaces": {
"<user-push-key>": {
"<place-push-key>": {
"name": "Company X"
}
}
}
}
我们正在开发一个应用程序,用户可以在其中为其帐户添加地点。我们已经对数据库进行了非规范化。这样我们就可以获得更快的阅读请求(以及更轻松的过滤和排序)。但是现在我们遇到了问题,当用户离线工作时,他们可以将缓存的地点添加到他们的帐户中。
但是如果在用户离线时更改了地点的名称,则缓存版本和实时版本将不再同步。 Wat恰好是应用程序使用旧位置数据将位置写入userPlaces节点。
这会导致数据不一致。这个问题有什么问题吗?
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Map<String, Object> update = new HashMap<>();
update.put("userPlaces/" + userId + "/" + mPlace.getKey(), place);
update.put("placeUsers/" + mPlace.getKey() + "/" + userId, user);
reference.updateChildren(update);
数据提供给firebase。 firebase在联机时会更新值。