数据库结构
{
"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在联机时更新值 .