Firebase如何避免数据冲突

时间:2017-09-19 19:14:31

标签: firebase firebase-realtime-database nosql

Firebase official guides

// 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与上述方法有何区别?

2 个答案:

答案 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应用程序中,客户端和服务器也必须平衡职责。