【问题标题】:Firestore index limitationFirestore 索引限制
【发布时间】:2019-06-19 14:56:11
【问题描述】:

documentation Firestore 开始,除其他外,还有以下限制:

  • 每个文档的最大索引条目数:40,000

  • 文档索引条目大小的最大总和:8 MiB

我在理解文档中“文档”的含义时遇到了一些困难。它们是指单个文档,还是特定集合的整套文档?

例如,假设我有一个包含 10,000 个文档的集合,每个文档包含相同的 2 个字段:

Document: `students/00001`
  name: "Jeff"
  age: 32

Document: `students/00002`
  name: "Mary"
  age: 28

...

Document: `students/10000`
  name: "Anne"
  age: 45

根据文档,Firestore 将为每个字段按升序创建一个索引,并为每个字段按降序创建一个索引。因此,每个文档都有 4 个索引,而整个文档集合只有这 4 个索引,因为它们都具有相同的字段。

一切都好。

但是,现在假设我有一个集合,其中还包含 10,000 个文档,但是每个文档包含 2 个始终彼此不同的字段

Document: `students/00001`
  B2DcG6g9w: true
  YwY3g642D: true

Document: `students/00002`
  A3h7k3e6B: true
  w2Fh0j1g8: true

...

Document: `students/10000`
  8n4545f7k: true
  j2hle4oOp: true

Firestore 将按升序为每个字段创建一个索引,并按降序为每个字段再创建一个索引。因此,我们将每个文档只有 4 个索引。但由于每个文档的索引不同,我们将集合中的所有文档共有 40,000 个索引

问题:我是否达到了 40,000 个索引限制?这种限制真的是文档还是集合?

【问题讨论】:

    标签: firebase indexing google-cloud-firestore database-indexes


    【解决方案1】:

    集合中的文档数量与规定的限制无关。缺少字段的文档将没有该字段的索引。 (Firestore 不会索引不存在的内容。)您可以remove indexes 以节省空间和金钱。

    【讨论】:

    • 感谢您的回答。是的,我知道文件的数量无关紧要。我的问题实际上是索引限制是每个文档还是每个集合。
    • 当您说“但是由于每个文档的这些索引不同,我们将为集合中的所有文档提供总共 40,000 个索引”听起来您建议在集合中添加更多文档会引起问题。这就是为什么我说集合中的文档数量无关紧要。仅仅通过添加具有唯一字段的新文档,您并不能有效地为每个其他文档强制创建索引。限制是每个文件。如果您尝试针对文档中的多个字段创建多个索引组合,则会遇到问题。
    • 是的,但我对此并不安全,因为据我所知,索引不是每个文档,而是每个集合。如果集合中的两个文档具有相同的字段,它们将由单个集合索引索引,而不是 2 个索引(每个文档一个索引,这没有意义)。索引处于集合级别,所以我担心每个集合的限制是 40,000 个索引。如果限制是每个文档 40,000 个索引,那么我可以实现:stackoverflow.com/questions/54369877/…
    【解决方案2】:

    为您在集合中索引的每个字段或字段组合创建一个索引。每个文档可以出现在 40.000 个这样的索引中。

    【讨论】:

    • "每个文档可以出现在 40.000 个这样的索引中。"换句话说,每个文档总共有 40,000 个索引,而不是用于收集。所以,在我上面的例子中,我没有达到任何限制。
    • 你会说你的这个答案也回答了这个问题吗?:stackoverflow.com/questions/54369877/…
    • “所以,在我上面的例子中,我没有达到任何限制。”没错。
    猜你喜欢
    • 2018-10-08
    • 2019-07-03
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多