firebase - 在 firestore 中使用子集合有什么好处吗?

标签 firebase google-cloud-firestore

我的应用程序的用户集合中的每个文档都有一个子集合。这个子集合存储与用户相关的文档,但是它们也可以保存到主集合中,每个文档都有一个关联的 userId。

我选择了这种结构,因为它在当时看起来是最明显的,但我可以想象,如果我需要进行数据库维护,它将使事情变得更加困难。例如。如果我想清理这些文档,我必须查询每个用户,然后查询每个用户的文档,而如果我有一个主集合,我可以查询所有文档。

这让我质疑子集合的意义到底是什么,如果您可以将这些文档与 ID 相关联。如果您的文档接近 1MB 限制,它是否仅存在于那里以便您可以扩展?

最佳答案

我发现子集合的最大优点是它们有自己的写入速率限制,因为每个子集合都有自己的索引(假设您没有集合组索引)。这对于小型应用程序可能不是问题,但对于中型/大型应用程序来说可能非常重要。
想象一个聊天应用程序,其中每个聊天都有一系列消息。您需要按时间戳索引消息以按时间顺序显示它们。连续值的 Firestore 写入限制 is 500/second ,这绝对是中型应用程序可以实现的(特别是如果您考虑到流氓用户脚本消息的可能性——目前使用安全规则不容易防止)

// root collection

/messages {
  chatId: string
  timeSent: timestamp // the entire app would be limited to 500/second
}
// sub-collection

/chat/messages {
  timeSent: timestamp // each chat could safely write up to 500/second
}

关于firebase - 在 firestore 中使用子集合有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266090/

相关文章:

javascript - ngIf 不评估异步代码 Angular 和 Firebase

swift - 图像未显示在 imageView 中

firebase - 将 firestore 文档转换为 flutter 类

firebase - Flutter Firebase 时间戳

java - 查询Firestore数据并向与查询匹配的所有文档添加一个字段

java - Cloud Firestore - 从多个位置获取文档

javascript - 在Firebase函数中,如何在使用后清理数据库引用?

android - 云功能与 Firebase 安全规则

ios - Firebase iOS 崩溃报告可读性问题

java - 如何让 Firestore 在后台同步?