【问题标题】:When are sequential field values important in Firestore index exemptions?Firestore 索引豁免中的顺序字段值何时重要?
【发布时间】:2020-06-25 01:56:15
【问题描述】:

如果您索引的字段在 集合中的文档,例如时间戳,然后是最大写入 对集合的速率是每秒 500 次写入。如果不查询 基于具有连续值的字段,您可以豁免该字段 从索引绕过这个限制。

Firestore index exemption best practices

Firestore 何时关心字段是否按顺序更改而不是简单更改?

【问题讨论】:

    标签: google-cloud-firestore


    【解决方案1】:

    时间戳仍然是连续的,只是不连续。这同样适用于按字母顺序排列的值,以及几乎任何可合理预测的生成值。

    索引中的顺序数据也可能在物理上非常接近地写入存储介质,这就是它导致写入吞吐量限制的原因。

    【讨论】:

    • 您似乎认为存在一个寻找这些模式的主动过程。事实并非如此。 Firestore 使用哈希函数将文档映射到位置,如果值不是随机分布的,则写入将不会均匀分布在这些位置上。这就是导致瓶颈的原因。
    • “为什么 Firestore 关心字段值是否是连续的?”在特定时间范围内可以将多少数据写入物理位置是有物理限制的。可预测的值/键通常最终位于相同的物理位置,因此更有可能达到这样的物理限制。在这一点上,我已经以多种方式多次回答了这个问题,所以如果这没有帮助,我希望你重新阅读它会变得更清楚,或者其他人可以更好地解释它。
    【解决方案2】:

    关于您问题的为什么部分,Firestore documentation 提供了很好的解释:

    Cloud Firestore 将按字典顺序关闭的索引条目放在同一个平板电脑上。如果平板电脑中的索引值过于靠近,例如时间戳字段,Cloud Firestore 无法有效地将平板电脑拆分为更小的平板电脑。这会产生一个热点,其中单个平板电脑接收到过多的流量,并且对热点的读写操作变得更慢。

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2020-09-15
      • 2020-07-24
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多