可以在 firestore 数据库中添加时间戳作为文档字段吗?

Jay*_*abu 5 android firebase google-cloud-firestore

在使用Cloud Firestore 时,我在将数据添加到 Cloud Firestore文档中阅读了此声明:

重要提示:与 Firebase 实时数据库中的“推送 ID”不同,Cloud Firestore 自动生成的 ID 不提供任何自动排序。如果您希望能够按创建日期对文档进行排序,您应该将时间戳存储为文档中的一个字段。

所以,我设计了我的数据库,因为它包含timestamp所有文档中的字段。

但在那之后,我在最佳实践文档中阅读了这些声明:

请注意,具有单调递增值的索引字段(例如时间戳)可能会导致热点,从而影响具有高读取和写入速率的应用程序的延迟。

避免高读取或写入速率以按字典顺序关闭文档,否则您的应用程序将遇到争用错误。此问题称为热点,如果您的应用程序执行以下任一操作,则它可能会遇到热点:

  • 以非常高的速率创建具有单调递增字段(如时间戳)的新文档。

所以我现在很困惑。我正在开发一个安卓应用程序。我可以timestamp用作字段吗?如果我的应用程序有很多用户,它会产生任何问题吗?是的,我必须按创建日期订购文档。

Ale*_*amo 4

这两个文档之间存在巨大差异。

第一个是指 Cloud Firestore 自动生成的 ID 不像 Firebase 实时数据库推送 ID 那样具有时间组件。这就是它无法提供任何自动排序的原因。因此,它与时间戳作为对象的属性这一事实无关。

第二个是指不建议使用单调递增的值,例如时间戳作为文档的ID。因此请记住,只有在使用此类时间戳作为数据库中的键时才会出现这种情况,只有在这种情况下才会导致影响延迟的热点。

由于您在每个文档中使用时间戳作为字段,因此无需担心。如果您已将该时间戳用作 Coud Firestore 中的文档 ID 或 Firebase 实时数据库中的节点键,则适用上述规则。

  • @Alex Mamo,我不认为那里的参考资料是针对文档 ID 的。在 [Cloud Firestore 最佳实践](https://firebase.google.com/docs/firestore/best-practices#Indexes) 的索引部分下,它显示“请注意索引字段”而不是文档 ID。此外,后者在页面顶部有自己的部分。作为参考,我在 r/firebase 上发布了有关该问题的问题 [链接](https://www.reddit.com/r/Firebase/comments/kqv92s/q_about_be_aware_that_indexing_fields_with) (2认同)