Android Firebase脱机数据不一致 数据库结构 { “地点”:{ "": { “名称”:“X公司” }, "": { “名称”:“Y餐厅” } } “用户”:{ "": { “姓名”:“哈里” } }, “用户位置”:{ "": { "": { “名称”:“X公司” } } } } 问题:
我们正在开发一个应用程序,用户可以在其中向其帐户添加位置。我们已经对数据库进行了非规范化。这样我们就有了更快的读取请求(以及更容易的过滤和排序)。但是现在我们遇到了一个问题,当用户脱机工作时,他们可以将缓存的位置添加到他们的帐户中 但是,如果在用户脱机时更改了位置的名称,则缓存版本和实时版本将不再同步。发生的情况是,应用程序使用旧的地点数据将地点写入userPlaces节点 这会导致数据不一致。这个问题有解决办法吗 编辑Android Firebase脱机数据不一致 数据库结构 { “地点”:{ "": { “名称”:“X公司” }, "": { “名称”:“Y餐厅” } } “用户”:{ "": { “姓名”:“哈里” } }, “用户位置”:{ "": { "": { “名称”:“X公司” } } } } 问题:,android,swift,firebase,firebase-realtime-database,nosql,Android,Swift,Firebase,Firebase Realtime Database,Nosql,我们正在开发一个应用程序,用户可以在其中向其帐户添加位置。我们已经对数据库进行了非规范化。这样我们就有了更快的读取请求(以及更容易的过滤和排序)。但是现在我们遇到了一个问题,当用户脱机工作时,他们可以将缓存的位置添加到他们的帐户中 但是,如果在用户脱机时更改了位置的名称,则缓存版本和实时版本将不再同步。发生的情况是,应用程序使用旧的地点数据将地点写入userPlaces节点 这会导致数据不一致。这个问题有解决办法吗 编辑 DatabaseReference=FirebaseDatabase.ge
DatabaseReference=FirebaseDatabase.getInstance().getReference();
映射更新=新的HashMap();
update.put(“userPlaces/”+userId+“/”+mPlace.getKey(),place);
update.put(“placeUsers/”+mPlace.getKey()+“/”+userId,user);
参考。更新儿童(更新);
数据将提供给firebase。firebase在线时会更新这些值。这取决于您如何同步数据。请(对于此问题和以后的问题)共享。我添加了一个小代码段。如果您想知道当两个客户端更新同一位置时发生了什么,并且更新发生冲突,那么最后一次写入将获胜。如果您想要更多的控制,请使用事务。但事务无法在应用程序重新启动后生存,因此限制了您可以使用它们。我也遇到了同样的问题,您是否设法解决了它?我们使用了一种结构,其中userPlaces和placeUsers不包含place对象,而只包含密钥。所以基本上我们选择了不复制数据。
{
"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"
}
}
}
}
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);