在 Firestore 中存储(潜在)巨大列表的最佳方法是什么?

And*_*ndy 3 firebase google-cloud-firestore

我有一个用户集合,其中包含一堆用户及其详细信息。我还有一个通知集合,用户可以查询。我预计通知的数量至少会达到数千,但多年来可能会达到数万。

我希望用户能够将通知标记为“已看到”。我该怎么办?

我考虑了以下选项:

  • notificationsSeen向每个用户文档添加一个包含对通知文档的引用的数组。如果用户看到例如 50k 通知,我很害怕在这里达到大小限制。
  • 添加相同但作为用户中的子集合。不过,我不知道该怎么做,因为我真的只需要一个属性(通知 ID)。我是否将通知 ID 作为子集合文档 ID 并且文档上没有字段?我是否让 Firestore 生成随机 ID 并将通知 ID 分配为子集合的属性?
  • seenBy向每个通知文档添加一个包含对用户文档的引用的数组。虽然这将允许用户查看其他用户看到的通知,但我认为我不想要这个。

希望你能帮助我,我没有想法,我不知道如何实现我迄今为止最好的想法(用户中的子集合),这里也提到了一个解决方案:Firestore storage size limit如何存储大型数组(但没有实现细节)。

Dou*_*son 6

在 Firestore 中存储任意大数据列表的唯一可扩展方式是使用集合中的文档。数组类型字段不会随着数据列表的增长而扩展,因为项目最终会超过单个文档的 1MB 大小限制,这显然会导致规模问题。

有一个没有字段的文档是可以的。如果您需要做的只是记录文档存在以便稍后在该集合中检查它的存在,那很好。如果您绝对确定 ID 符合 Firestore 中的有效 ID,则可以使用通知 ID 作为文档 ID。否则,你应该给它一个随机ID,并将通知ID作为一个字段放在文档中,以便稍后查询。

您需要熟悉有关 Firestore 限制的文档,其中讨论了文档的最大大小,以及 Firestore 文档 ID 的有效字符。