Firestore中的最优关系数据模型

时间:2018-04-30 10:42:54

标签: google-cloud-firestore data-modeling

我有一组静态和预定义的待办事项,我的应用中的每个用户都需要能够在其帐户中设置为已完成。

目前,我在todo项目上使用了一个地图,指定哪些用户已完成任务。我目前的数据模型如下:

- todos (collection)
  - todoA (document)
    - title, description etc
    - completedBy {
       uid1: true,
       uid2: true,
       uid3: false
      }

这使我可以轻松地为每个用户设置已完成/未完成的待办事项,并且我可以轻松地过滤/查询。它确实有两个缺点:

  1. 单个Firestore文档只能“拥有”20 000个属性。如果我的应用程序变大,这将是一个问题。
  2. 文件大小
  3. 我想的可能是在我的用户文档上创建一个类似的地图,将todo ID设置为true / false。这将摆脱上面的两个缺点,但每当我收到我的待办事项时,我需要两个数据库查询,一个用于待办事项,一个用于检查它是否已完成。

    有没有更好的方法在Firestore中实现所需的功能?

1 个答案:

答案 0 :(得分:1)

如果您遇到最大字段数或最大文档大小,那么通常意味着您应该使用单独的集合来使文档变得如此之大&#34;。< / p>

在您的情况下,意味着您存储&#34;用户已完成任务&#34;在一个单独的集合中。这可以是用户文档的子集合,任务文档的子集合和/或单独的顶级集合。哪一个是正确的取决于您的用例。

NoSQL数据库中没有单一的最佳数据模型。这完全取决于您的使用案例,权衡和一些个人偏好。如需精彩的介绍,请阅读NoSQL data modeling并观看Get to Know Cloud Firestore