Firebase - 可以在多个实时数据库之间共享分片数据吗

Posted

技术标签:

【中文标题】Firebase - 可以在多个实时数据库之间共享分片数据吗【英文标题】:Firebase -Can Shard Data be shared between multiple Realtime Databases 【发布时间】:2020-04-10 18:07:21 【问题描述】:

使用实时数据库时,here 表示,如果您想扩展超过 200,000 个同时连接,您可以创建/shard 另一个数据库。它还说:

每个查询仅针对单个数据库实例运行。即时的 数据库不支持跨数据库实例的查询。

不跨数据库实例共享或复制数据(或 最少的共享或重复)。

每个应用实例在任何给定时刻仅连接到一个数据库。

假设在第一个数据库中,我有一个 Posts 引用、一个 Users 引用和一个 Search Posts 引用,其中包含 10 万个用户对象、20 万个帖子对象和 20 万个搜索对象。我现在决定创建/shard 另一个具有相同参考的数据库。

当下 x 个用户注册时,如果他们的 User、Post 和 Search Posts ref 都在新的 shard 数据库中,这是否意味着他们将无法访问用户或搜索那些用户的帖子来自第一个数据库?反之亦然,第一个数据库中的用户将无法访问第二个数据库中的用户或他们的帖子?

【问题讨论】:

这个问题是关于分片,这主要与同时连接有关。您是否有 200,000 个实时 连接 的情况?一般的想法是将您的数据分组 - 换句话说,如果您有帖子,用户并且您对帖子运行查询,然后在另一时间对用户运行查询,将帖子放在一个数据库实例中,将用户放在另一个数据库实例中。换句话说,不要将用户放在多个数据库中。 我没有 200k 的实时连接,但我正在考虑为我的下一个应用程序学习 FireStore。最大的吸引力是多搜索查询,它会自动扩展。但是我对 RTD 非常满意,但我讨厌我必须使用 Algolia 进行多查询。说到 RTD,我想一旦你建立了第一个数据库,如果你添加第二个具有相同规则和结构的数据库,当用户注册时,RTD 本身就会决定在哪里添加它们。如何在一个数据库中添加用户、在另一个数据库中添加帖子以及在另一个数据库中搜索帖子。看起来有点矫枉过正,因为您可能只能获得 10 个用户。 再次强调,分片的目的是平衡您的连接,与数据量无关。 RTDB 不会决定数据的存储位置,您可以。一台服务器将包含用户,另一台将包含帖子。您将针对带有用户的服务器运行用户查询,并针对带有帖子的服务发布查询。您所做的就是在运行查询之前将您的应用程序指向您要查询的服务器。换句话说,没有理由先将用户添加到服务器 1,然后再将更多用户添加到服务器 2,因为数据量无关紧要。 啊,好吧,你刚才解释的内容我从未见过其他地方解释过。一切基本上都说您可以添加另一个数据库。谢谢(你的)信息。我将在下周末开始,如果我有任何问题,请发布它们。不确定您是否有时间,但 FB 博客文章会很好。感谢您的帮助! 【参考方案1】:

分片的目的是对连接进行负载平衡,与数据量无关。

RTDB 不会决定数据的存储位置,您可以。一台服务器将包含用户,另一台将包含帖子。

您将针对带有用户的服务器运行用户查询,并针对带有帖子的服务运行帖子查询。

您所做的只是在运行查询之前将您的应用指向您要查询的服务器。

换句话说,没有理由先将用户添加到服务器 1,然后再将更多用户添加到服务器 2,因为数据量无关紧要。

【讨论】:

以上是关于Firebase - 可以在多个实时数据库之间共享分片数据吗的主要内容,如果未能解决你的问题,请参考以下文章

多个用户的 Firebase 实时数据库身份验证

使用flutter如何在同一个App中使用多个firebase实时数据库

在地图上同时显示多个用户的位置(Kotlin、Firebase 实时数据库)

已实现 Firebase 实时数据库存储的 Android 应用中的多个应用内产品

Firebase:实时数据库和文件存储之间的差异

处理 Firebase 身份验证和数据库实时之间事务的最佳方式