我的应用程序的用户集合中的每个文档都有一个子集合。这个子集合存储与用户相关的文档,但是它们也可以保存到主集合中,每个文档都有一个关联的 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/