Firestore - 节省文档读取费用

Posted

技术标签:

【中文标题】Firestore - 节省文档读取费用【英文标题】:Firestore - Saving Money on Document Reads 【发布时间】:2019-08-21 20:03:11 【问题描述】:

我有来自 Firestore 的 5,000 位艺术家的集合,我想将它们作为可搜索的下拉列表加载到我的应用程序中。每个用户每次页面加载的成本都是昂贵的。我每月有 10,000 个活跃用户。

我尝试了 Algolia,但网站上的用户数量使它成为一个非常昂贵的选择。使用 Firestore,每次加载页面加载 5,000 条记录很快就会增加。我的想法是将所有艺术家的姓名和 ID 存储在 Firestore 中的单个文档数组中,这样每页加载的成本只有 1 个,而不是 5,000 个。然后,在选择艺术家时加载其他数据。

artists = 
  uniqueId: 'Artist Name',
  uniqueId2: 'Second Artist Name',

我希望使用这种方法每天可以节省数十万次文档读取。唯一增加的烦恼是在客户端做事。不过,这也不算太麻烦。我希望深入了解其他人在做什么。我应该考虑在 mysql 中存储一些数据吗?

【问题讨论】:

【参考方案1】:

如果您想要更容易使用的东西而不是数组,您可以在一个文档中为所有艺术家使用键值对。每个文档的限制为 1MB,因此即使有 5,000 位艺术家,您也应该在限制范围内。

db.collection('artists').doc(_all).set(
  uniqueId: 'Artist Name',
  uniqueId2: 'Second Artist Name',
)

然后,一旦您检索文档,您就可以使用 Object.values()Object.entries() 提取名称和/或密钥

如果您想要更灵活的解决方案,您可以使用云功能在 firebase 实时数据库或其他数据库(如 redis)中保持特定查询或文档集合的最新版本。这是一篇解释如何做后者的文章

https://thecloudfunction.com/blog/firebase-cloud-functions-and-redis/

【讨论】:

我从未想过将 Firebase 与 Firestore 一起使用!这可能是最简单和最快的解决方案。也感谢关于 Redis 的提示。 非常欢迎。是的,我发现实时计费模型更适合这种目的,您还可以添加一个云功能来自动同步从 firestore 到 rtdb 的写入数据,或者只是添加您自己的 cron/可触发方法

以上是关于Firestore - 节省文档读取费用的主要内容,如果未能解决你的问题,请参考以下文章

如果我第二天打开应用程序,我是不是会再次在 Firestore 中收取文件读取费用?

当我开始在 Firestore 中收听单个文档时,我是不是需要支付一次阅读费用,即使该文档没有更改?

即使没有数据更改,Firestore 缓存也无法正常工作

Cloud Firestore 中文档和字段的名称/键会影响我的配额吗?

DropBox:机器学习每年可以为我们节省170万的文档预览费用

firebase Firestore 文档已读取