【问题标题】:Firebase how to avoid data conflictFirebase如何避免数据冲突
【发布时间】:2017-09-23 23:12:40
【问题描述】:

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和上面的方法有什么区别?

【问题讨论】:

    标签: firebase firebase-realtime-database nosql


    【解决方案1】:

    对于有关冲突的具体问题,您需要使用多位置更新来防止此类冲突。见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 的介绍。

    【讨论】:

      【解决方案2】:

      videos 有很多系列,其中解释说 Firebase-Database 作为 nosql 提供速度和数据灵活性等优势,但也使开发人员有责任维护数据一致性。

      所以你想要的与你需要的相反,你想要数据规范化,但实际上,你需要数据非规范化。您的数据结构将反映用户正在消费的内容。你的数据结构相当于你的信息架构。

      正如 Frank van Puffelen 所解释的,您可以使用“updateChildren()”方法进行多重更新。

      此外,您可以使用Firebase Functions 作为服务器端方式来维持业务逻辑。从长远来看,客户端和服务器必须平衡职责,即使在 REST 应用程序中也是如此。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-02
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 2015-05-19
        • 1970-01-01
        • 2019-05-16
        • 1970-01-01
        相关资源
        最近更新 更多