首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Firestore文档的自动生成ID与使用自定义ID

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

Stack Overflow用户
提问于 2019-05-28 01:47:01
回答 1查看 2.5K关注 0票数 5

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

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

下面是我的产品的字段

objects

  • price: number

的strings

  • images:数组的
  • uniqueKey: string
  • description:数组

问题

我应该使用Firestore自动生成的ID作为我的文档的ID,还是使用我的uniqueKey (我会在很多情况下查询它)作为文档ID更好?两者之间有没有最好的选择?

我想,如果我使用我的uniqueKey,它将使我在检索单个文档时的工作变得更容易,但我也将不得不在许多情况下查询多个产品。

将我的uniqueKey用作ID

代码语言:javascript
运行
复制
db.collection("products").doc("myUniqueKey").get();

使用Firestore自动生成的ID

代码语言:javascript
运行
复制
db.collection("products").where("uniqueKey", "==", "myUniqueKey").get();

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 02:14:30

就从客户端进行查询而言,仅使用您在问题中提供的信息,我看不出使用已知ID的文档get与对也是唯一的字段的查询之间有多大的实际区别。无论哪种方式,索引都是在服务器端使用的,它只需要读取一次文档。文档get()可能稍微快一点,但不值得这样优化(在我看来)。

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

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

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

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

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56330456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档