// An index to track Ada's memberships
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}
这是双向关系的必要冗余。
如果我想使用该模型开发应用程序,当用户加入新组时,该客户端应用程序是否向我的Firebase发出2个请求以添加2条记录?
如果在操作过程中出现问题。我该怎么办?也许我需要一个定期检查数据冲突的后端服务器?
我无法在Firebase文档或有关NoSQL的文章中找到关于此数据冗余问题的进一步详细说明(可能是我使用了错误的关键字!)。
此外,indexing my data与上述方法有何区别?
答案 0 :(得分:0)
对于有关冲突的特定问题,您需要使用多位置更新来防止此类冲突。请参阅blog post introducing multi-location updates,后续post on client-side fan-out和我的answer on strategies for updating dulplicated data。
您似乎对Firebase数据库不熟悉,在这种情况下,看到数据复制和客户端连接等模式确实非常不安。我建议您阅读NoSQL data modeling以获取NoSQL的一般介绍,然后观看Firebase for SQL developers以了解Firebase的介绍。
答案 1 :(得分:0)
有很多videos解释说Firebase-Database作为nosql提供了速度和数据灵活性的优势,但也使开发人员有责任保持数据的一致性。
所以你想要的是与你需要的相反,你想要数据规范化,但实际上,你需要数据非规范化。您的数据结构将反映用户正在使用的内容。您的数据结构等同于您的信息架构。
正如Frank van Puffelen解释的那样,您可以使用'updateChildren()'方法来使用多次更新。
此外,您可以使用Firebase Functions作为服务器端方式来维持业务逻辑。从长远来看,即使在REST应用程序中,客户端和服务器也必须平衡职责。