gpt4 book ai didi

firebase - 使用 Firestore 文档的自动生成的 ID 与使用自定义 ID

转载 作者:行者123 更新时间:2023-12-02 21:42:16 25 4
gpt4 key购买 nike

我目前正在决定我的 Firestore 数据结构。

我需要一个 products 集合,并且 products 项将作为文档存在于其中。

这是我的产品字段:

  • uniqueKey:字符串
  • 描述:字符串数组
  • 图像:对象数组
  • 价格:数字

问题

我应该使用 Firestore 自动生成的 ID 作为文档的 ID,还是使用我的 uniqueKey(我将在许多文档中查询)更好场合)作为文档 ID?两者之间有最好的选择吗?

我想,如果我使用 uniqueKey,检索单个文档时会更轻松,但在很多情况下我也必须查询 1 个以上的产品。

使用我的uniqueKey作为ID:

db.collection("products").doc("myUniqueKey").get();

使用我的 Firestore 自动生成的 ID:

db.collection("products").where("uniqueKey", "==", "myUniqueKey").get();

这是否足以成为使用我的 uniqueKey 而不是自动生成的 key 的理由?这里有经验法则吗?这种情况下的最佳做法是什么?

最佳答案

就从客户端进行查询而言,仅使用您在问题中提供的信息,我认为使用已知 ID 获取文档或对某个字段进行查询之间没有太大实际差异也是独一无二的。无论哪种方式,索引都是在服务器端使用的,并且它的成本恰好是 1 个文档读取。文档 get() 可能会稍微快一些,但不值得这样优化(在我看来)。

在做出此类数据建模决策时,更重要的是要考虑负载下的系统行为和安全规则等问题。

如果您正在读取和写入大量 ID 具有顺序属性的文档,则可能会遇到 hotspotting关于那些写的。因此,如果您想使用自己的 ID,并且希望在重负载下按该顺序读写它们,则可能会遇到问题。如果您预计不会出现这种情况,那么您使用谁的 ID 可能并不重要。

如果您要使用安全规则来限制对文档的访问,并且使用其他文档的内容来帮助实现此目的,则您需要能够在规则中唯一地标识这些文档。您无法对规则中的集合执行查询,因此您可能需要有意义的 ID,以便在规则使用时提供直接访问权限。如果您自己的 ID 可以在安全规则中以这种方式轻松使用,那么总体上可能会更方便。如果您被迫使用 Firestore 生成的 ID,则尝试维护您的 ID 与 Firestore ID 之间的关系可能会变得不方便、困难或成本高昂。

无论如何,您所做的决定不仅仅是一般意义上哪个ID“更好”,而是哪个ID更适合您特定的预期情况,在负载下,并考虑到安全性。

关于firebase - 使用 Firestore 文档的自动生成的 ID 与使用自定义 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56330456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com