Firebase 群聊 Firestore 与 RTDB

问题描述 投票:0回答:1

我需要创建一个群聊。 我在网上搜索了一些用于构建数据的示例和最佳实践,但找不到很好的解决方案。 主要问题是:所有消息应该存储在Firestore中还是RTDB中? 这是我的第一个想法: 似乎我需要将它们保存到 RTDB 中,甚至 Firebase RTDB 文档也在示例中建议这样做,因为这些消息将被组中的每个人接收,而且我也可以安全地使用它,因为每个用户在消息发送时都会同步已添加到 RTDB 聊天中。 然而,一旦消息被写入,就不会被编辑,或者至少,很难每条消息都被编辑,所以它应该保存在Firestore上。 另外,当我打开群聊时,我想使用分页,所以加载最后 20 条消息,如果我使用 RTDB,它将下载完整的节点及其所有子节点,下载的数据很多,可能不是不使用,同时在 Firestore 上存储并在需要时下载。

我想过同时使用两者,但后来意识到我应该在 RTDB 上真正节省什么?只是每个用户的在线/离线、“正在写入”状态等等。

firebase google-cloud-platform google-cloud-firestore firebase-realtime-database
1个回答
0
投票

我在网上搜索了一些构建数据的示例和最佳实践,但找不到很好的解决方案。

您没有找到解决方案,因为没有“好的”解决方案可用于构建 NoSQL 数据库。当涉及 NoSQL 数据库时,我们根据要执行的查询创建一个架构。

所有消息,应该存储在 Firestore 还是 RTDB 中?

对此没有任何规则。如果您已经了解查询,那么您将能够在速度、扩展和成本方面决定使用哪个数据库。

请记住,对于构建 Firestore 或实时数据库等 NoSQL 数据库,不存在“完美”、“最佳”或“正确”的解决方案。最好的、“好的”解决方案是适合您的需求并使您的工作更轻松的解决方案。另外,请记住,NoSQL 数据库世界中不存在单一的“正确的数据结构”。所有数据都经过建模,以允许您的应用程序所需的用例。 NoSQL 类型数据库的有效结构完全取决于您打算如何查询它。

似乎我需要将它们保存到 RTDB 中,甚至 Firebase RTDB 文档也在示例中建议这样做,因为这些消息将被组中的每个人收到,而且我也可以安全地使用它,因为每个用户在消息已添加到 RTDB 聊天中。

您可以使用 Firestore 和实时数据库来获取实时更新。所以这不是一个或另一个。您必须选择更适合特定用例的每一个。

另外,当我打开群聊时,我想使用分页,因此加载最后 20 条消息。

是的,无论您使用什么数据库,始终实现分页,以便您始终可以以较小的块加载数据。

如果我使用 RTDB,它将下载完整的节点及其所有子节点,并且下载了大量数据,并且可能不会使用。

这就是 Firebase 实时数据库的工作方式。当您将侦听器附加到节点时,您将获得该节点下的“所有内容”。但是,您可以构建数据,这样您就只能下载您需要的内容。

我想过同时使用两者,但后来意识到我应该在 RTDB 上真正节省什么?

您确实可以同时使用它们,但您应该自己计算一下,看看如何同步它们,以及哪种最适合您想要在计费方面执行的查询。

© www.soinside.com 2019 - 2024. All rights reserved.