我可以在 Firestore 中重复使用现有字段作为分片时间戳吗?

Posted

技术标签:

【中文标题】我可以在 Firestore 中重复使用现有字段作为分片时间戳吗?【英文标题】:Can I reuse existing fields as Sharded timestamps in Firestore? 【发布时间】:2020-08-27 19:24:10 【问题描述】:

我正在寻找解决 Firestore 对顺序索引字段的限制的解决方案,这意味着来自 doc 的以下内容。

“顺序索引字段”是指任何文档集合 包含单调递增或递减的索引字段。在 很多情况下,这意味着时间戳字段,但任何单调 增加或减少字段值可以触发写入限制 每秒 500 次写入。

根据解决方案,我可以在我的集合中添加一个 shard 字段,该字段将包含随机值并使用时间戳创建一个复合索引。我正在尝试使用Document 中的现有字段来实现这一目标。

我的文档有以下字段:


   users: string[],
   createdDate: Firebase Timestamp
   ....

我已经创建了一个复合索引:users Arrays createdDate Descending。此外,我还为 Automatic index settings 的字段字段创建了豁免。 users 字段将包含 firebase 自动生成的 ID 列表,因此绝对是随机的。现在我不确定字段 users 是否会在示例文档中完成字段 shard 的工作。通过这种方式,我们可以避免添加新字段,并且仍然可以提高写入速率。有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

虽然我没有具体的经验来说明您正在尝试做的事情肯定会或不会按您期望的方式工作,但我会假设它可以工作,基于文档所说的事实(强调我的) :

在时间戳字段旁边添加一个分片字段。对分片字段使用 1..n 不同的值。这会将集合的写入限制提高到 500*n,但您必须聚合 n 个查询。

如果每个users 数组包含不同且本质上随机的用户 ID,则数组字段值将被视为“不同”(因为两个数组仅在其元素彼此相等时才相等),因此适用于分片。

【讨论】:

以上是关于我可以在 Firestore 中重复使用现有字段作为分片时间戳吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法在flutter中访问Firebase Firestore doc的字段[重复]

添加数据后,我从 Firestore 获得重复数据。在 React Native 中

如果不允许用户在firestore中更新文档,那么它也不允许使用merge进行设置?

更新firestore数据后显示重复事件,但firestore中的数据本身不重复

我可以在Firestore搜索中过滤多个字段吗?

如何将字段添加到现有模型[重复]