带查询的 Firebase 实时数据库定价

jma*_*ps9 4 firebase swift firebase-realtime-database

我有一个关于 firebase 数据库定价的问题。我的数据库排行榜中有大约 400,000 行,但在我的应用程序中,我只想加载最后 500 行,所以我的问题是我会为运行查询时加载的 500 行收费,还是会为所有行收费400,000 行。

实时数据库存储每 GB 收费 5 美元,下载每 GB 收费 1 美元。我用 Firestore 进行了计算,发现如果我为 500 行而不是 400,000 行收费,那么实时数据库会便宜得多。

我搜索了所有文档,但没有找到有关查询的任何信息:https : //firebase.google.com/pricing https://firebase.google.com/docs/database/usage/billing

有人可以告诉我,我是只对集合中的 500 行收费,还是对集合中的所有数据收费,是否有办法只对 500 行收费,也许有安全规则?

这是我的查询代码:

let queryRef = ref.child("Leaderboard").queryOrdered(byChild: "totalStars").queryLimited(toLast: 500)
Run Code Online (Sandbox Code Playgroud)

数据库的样子。(它将有大约 500,000 个与这些相同的孩子,每天加载 200,000 个,但我只想按我加载的前 500 个定价,而不是每次用户加载排行榜时的全部 500,000 个,这可能吗?)

在此处输入图片说明

Ren*_*nec 5

您只需为与查询结果相对应的Firestore文档数量(而不是集合中的文档数量)付费。

因此,在您的情况下,最多读取 500 次,因为您会将 Query 限制为 500 个文档。


另一方面,请注意实时数据库查询并不浅(而 Firestore 查询是),因此如果您查询 JSON 节点,您将在此节点下获得整个树

  • @jmapps9 这是一个很好的答案!让我补充一点想法;您问题中的查询是针对 RTDB 的。如果可以的话,我建议使用 RTDB 并对数据进行非规范化;保留一个单独的 *leaderboard_stars* 节点,该节点仅包含对排行榜中内容的引用,或者可能是一个非常浅的引用节点、名称和星星数量,当您需要加载最后 500 个时,请使用该节点而不是 Leaderboard 节点可能包含更多数据。在 RTDB 中加载 500 个非常浅的节点的数据量很小,而且成本非常低。 (2认同)