我需要创建一个群聊。 我在网上搜索了一些用于构建数据的示例和最佳实践,但找不到很好的解决方案。 主要问题是:所有消息应该存储在Firestore中还是RTDB中? 这是我的第一个想法: 似乎我需要将它们保存到 RTDB 中,甚至 Firebase RTDB 文档也在示例中建议这样做,因为这些消息将被组中的每个人接收,而且我也可以安全地使用它,因为每个用户在消息发送时都会同步已添加到 RTDB 聊天中。 然而,一旦消息被写入,就不会被编辑,或者至少,很难每条消息都被编辑,所以它应该保存在Firestore上。 另外,当我打开群聊时,我想使用分页,所以加载最后 20 条消息,如果我使用 RTDB,它将下载完整的节点及其所有子节点,下载的数据很多,可能不是不使用,同时在 Firestore 上存储并在需要时下载。
我想过同时使用两者,但后来意识到我应该在 RTDB 上真正节省什么?只是每个用户的在线/离线、“正在写入”状态等等。
我在网上搜索了一些构建数据的示例和最佳实践,但找不到很好的解决方案。
您没有找到解决方案,因为没有“好的”解决方案可用于构建 NoSQL 数据库。当涉及 NoSQL 数据库时,我们根据要执行的查询创建一个架构。
所有消息,应该存储在 Firestore 还是 RTDB 中?
对此没有任何规则。如果您已经了解查询,那么您将能够在速度、扩展和成本方面决定使用哪个数据库。
似乎我需要将它们保存到 RTDB 中,甚至 Firebase RTDB 文档也在示例中建议这样做,因为这些消息将被组中的每个人收到,而且我也可以安全地使用它,因为每个用户在消息已添加到 RTDB 聊天中。您可以使用 Firestore 和实时数据库来获取实时更新。所以这不是一个或另一个。您必须选择更适合特定用例的每一个。
另外,当我打开群聊时,我想使用分页,因此加载最后 20 条消息。是的,无论您使用什么数据库,始终实现分页,以便您始终可以以较小的块加载数据。
如果我使用 RTDB,它将下载完整的节点及其所有子节点,并且下载了大量数据,并且可能不会使用。这就是 Firebase 实时数据库的工作方式。当您将侦听器附加到节点时,您将获得该节点下的“所有内容”。但是,您可以构建数据,这样您就只能下载您需要的内容。
我想过同时使用两者,但后来意识到我应该在 RTDB 上真正节省什么?
您确实可以同时使用它们,但您应该自己计算一下,看看如何同步它们,以及哪种最适合您想要在计费方面执行的查询。