【问题标题】:Array or Subcollection for storing events user uploaded用于存储用户上传事件的数组或子集合
【发布时间】:2019-03-06 20:42:57
【问题描述】:

我正在使用本机反应创建一个事件应用程序。我只是想要一些建议,哪些是在 Firestore 中构建我的数据模型的性能更好、可扩展性更好的方法。 我有 2 个集合事件和用户。

用户创建一个进入事件集合的事件,然后在我的应用程序中,用户可以进入主页并查看事件集合中的事件列表。 我还希望在应用程序中有第二个页面,即“用户个人资料”页面,用户可以在其中查看自己的事件列表,更新和删除它们。 我的问题是哪个更好:

  1. 将事件的密钥存储在 users/user1 中的数组中
  2. 基本上将重复事件存储在名为 events in users/user1 的子集合中

我觉得选项 1,将文档的引用存储在数组中可能会更好,所以我没有重复的事件,如果用户必须更新事件,只需 1 次写入对事件集合中的实际事件进行处理。

该事件将来可能会有更多的字段出现,例如 cmets 字段等,所以我觉得只使用选项 1 我不必继续做双重工作,尽管我可能需要阅读两次,即读取用户/用户1->(然后是数组)事件:[事件:{dockey}],然后使用该键获取事件集合中的实际事件文档。

感谢您的任何反馈和建议

【问题讨论】:

    标签: javascript arrays firebase react-native google-cloud-firestore


    【解决方案1】:

    当您需要在这两个选项之间进行选择时,没有简单的正确或错误答案。数据复制是加快读取速度的关键,不仅在 Firebase 实时数据库或 Cloud Firestore 中,在一般情况下也是如此。每当您将相同的数据添加到不同的位置时,您都在复制数据以提高读取性能。不幸的是,作为回报,您有更复杂的更新和更高的存储/内存使用率。但您需要注意,Firebase 实时数据库中的额外调用并不昂贵,而在 Firestore 中则如此。多少重复数据与额外的数据库调用对您来说是最佳的,这取决于您的需求以及您是否愿意放弃“单点定义心态”,这也可以称为非常主观的。

    完成几个 Firebase 项目后,我发现如果我复制数据,我的阅读代码会变得非常简单。但当然,编写代码同时变得更加复杂。在这两者和您的需求之间进行权衡决定了您的应用的最佳解决方案。

    还请查看我在此 post 中的回答,我在其中详细解释了 Firestore 中的 collectionsmapsarrays

    【讨论】:

    • 你好安德鲁!一切都好吗,我可以帮助您了解其他信息吗?
    • 嗨,亚历克斯,感谢您的回答。很抱歉这么久才回复您,昨晚很晚(我在爱尔兰),当我看到您的回答并想今天回复时。非常感谢您为每个选项分离出不同的优点和缺点,我想我只想在一个数组中保留一个对文档键的引用,因为我不打算每个用户一次有超过 20 个事件,而且我还希望保持它更具可扩展性和开放性,以防将来事件变得更加复杂,而且我喜欢单一定义方法。谢谢
    • 我在上一条评论中用完了字符,但是如果我添加用户可以将 cmets 留在事件中,那么我想提防一件事,这意味着它将再次成为双重写入,并且对事件的任何更新都将是双重写入,我认为这两个选项都有很多副作用和场景,但我认为数组选项是目前最轻量级的(我总是喜欢保持轻量级) , & 数组选项看起来很适合缩放
    • 在这种情况下,继续使用数组。不客气,干杯!
    猜你喜欢
    • 2021-12-07
    • 2021-12-07
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多