我想问一下,当一个人开发聊天应用程序时,是否有针对firestore的最佳做法,以及为聊天室存储消息的最佳做法是什么。
这里假设每个聊天室都有自己的文档。
我开始使用数组来存储来自用户的消息。这种方法的问题在于,每次向聊天室提交新消息时都无法添加,插入(追加)新条目。必须保存数组的新副本并附加新消息。除非聊天历史记录在子数组等中分割,否则这似乎会扩展得非常糟糕。
在官方文档中,他们提出了一种结构,其中应该将特定聊天室的消息作为单独的文档存储在该聊天室的子集合中。我想知道这种方法是否最好,有什么缺点,或者是否有另一种首选方法可以做到这一点。
答案 0 :(得分:9)
我通常采用的方法是“每个聊天室都有一个消息的子集合。而且每个新消息都是这个子集合中的单独文档。”这有几个优点:可以轻松添加或编辑单个邮件,并且您可以执行许多不同的查询(例如“抓取20条最新邮件”)
我认为,最大的缺点是,如果您发现新用户经常会进入您的聊天,并希望在他们加入之前查看房间的整个聊天记录,那么这将导致大量数据库读取。但实际上,我不知道在现实生活中会发生多少次,你可以通过使用分页来批量获取历史聊天来缓解这种情况。