【问题标题】:How to optimize firestore read per app launch如何优化每次应用启动时的 Firestore 读取
【发布时间】:2019-12-27 09:11:07
【问题描述】:

了解基于读/写操作的 Firestore 费用。 但我注意到每次应用启动时,firestore 都会从服务器读取,如果很多用户非常频繁地打开应用,它会导致大量读取计数。

Q1 我可以限制用户在首次登录时从服务器读取吗?之后它只是读取每个应用启动的更新文档?

例如,有一个聊天应用组。 100 个用户 100 条消息 100 个应用启动/用户/天

会变成每天 1,000,000 次阅读? 这太荒谬了。

Q2 读取是每个文档的计数,不管是根集合/子集合,对吧? 例如,我从包含 10 个子集合的根集合中读取,每个子集合都有 10 个文档,这将导致 100 个读取计数,对吗?

谢谢。

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    没错,Cloud Firestore 不太关心下载的数据量,而更关心执行操作的数量。

    由于 Cloud Firestore 的 pricing 取决于您执行的读取写入删除的次数,这意味着如果您如果有 100 个用户在一个聊天室中进行交流,那么一旦有人在该聊天室中发送消息,每个用户都会收到更新,因此增加了读取操作的数量。

    由于读取操作的数量会在很大程度上受到同一聊天室中的人数的影响,Cloud Firestore 最适合(在价格方面)人与人之间的聊天应用程序。 但是,您可以构建您的应用程序以拥有更多聊天室,以减少阅读量。 Here你可以看到如何存储不同的聊天室,而下面的link将指导你如何优化你的Cloud Firestore实时更新的最佳实践。

    请注意,Cloud Firestore 本身默认没有任何速率限制。但是,Google Cloud Platform 具有可配置的 billing alerts,适用于您的整个项目。

    您还可以使用Flame plan 将账单限制为25 美元/月,如果您的账单中有任何不清楚的地方,您可以随时联系Firebase support 寻求帮助。

    关于您的第二个问题,只要客户端从文档中获取数据,就会发生读取。请记住,只计算检索到的文档 - Cloud Firestore 会搜索索引,而不是文档本身。

    通过使用 subcollections,您仍然可以从单个文档中检索数据,这将仅计为 1 次读取,或者您可以使用集合组查询来检索子集合中的所有文档,根据文档的数量计入多次读取(在您放置的示例中,它将是 10x10 = 100)。

    【讨论】:

    • a read occurs any time a client gets data from a document:假设我在一个片段(普通列表视图)中触发一个查询,然后在另一个片段中触发相同的查询(用于图形表示),那么我会被收取两次费用吗?
    • Flame plan 不再可用,我猜 Google 认为它对于 firebase 提供的服务范围过于“友好”
    猜你喜欢
    • 2021-05-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多