数据库结构

{
    "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在联机时更新值 .