获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

查看 Cloud Firestore 定价示例

使用这个基本聊天应用的真实示例来衡量您的 Cloud Firestore 使用情况和成本。这不是一个准确的估计,但它可以帮助您更好地了解您的 Cloud Firestore 使用量是如何计费的。

概览:按使用级别划分的成本

为了说明典型成本,请考虑一个示例聊天应用程序,用户可以在其中发起与两个或更多参与者的聊天。用户可以在列表中查看他们的活动聊天、阅读消息和发送消息。对于此示例,我们使用北美多区域(特别是nam5 )的定价。

假设

考虑以下关于使用和数据存储的假设:

  • 每日活跃用户 (DAU) 占应用总安装量的 10%。您可以使用每日活跃用户 (DAU) 的粗略估算来估算您的每日成本。这些是在给定日期主动打开和使用您的应用程序的用户,这通常是您的应用程序总安装量的一小部分。对于下面的计算,我们将 DAU 估计为应用安装总数的 10%。
  • 文档大小相对较小。请参阅下表,了解按类型划分的文档大小明细。
  • 数据仅存储三个月。示例聊天应用程序中的消息仅存储三个月。为了说明删除操作,下面的计算显示了每日删除对应于每天的每次写入。
  • 这些成本估算反映了示例应用的大部分成本,但并非全部。我们通过计算操作、用户和消息存储以及本指南中概述的最频繁用户任务的出口来计算应用程序的大部分成本。但是,您可能需要考虑额外费用,具体取决于应用程序的结构和数据需求。使用此示例来指导您的计算,但请参阅定价页面以获取对 Cloud Firestore 成本的更详尽解释。

有关按用户任务划分的操作细分,请参阅细分:按用户任务划分的计费使用量部分。

小的
(5 万次安装)

50,000 次应用安装(5,000 日活跃用户):12.14 美元/月

读/写成本
每月总费用 = 11.10 美元/月
每日总阅读量 400K = 50,000 次免费读取 +(350,000 次读取,0.06 美元/100,000 美元) = 3.5 * 0.06 美元
0.21 美元/天 * 30 = 6.30 美元
每天总计 100K 次写入= 20,000 次免费写入 +(80,000 次写入,0.18 美元/100,000 美元) = .8 * 0.18 美元
0.14 美元/天 * 30 = 4.20 美元
每日总删除量 100K = 20,000 次免费删除 +(80,000 次删除,每 100,000 美元 0.02 美元) = .8 * 0.02 美元
0.02 美元/天 * 30 = 0.60 美元
存储/网络成本
每月总费用 = 1.04 美元/月
每日出口的 20KB / DAU * 5K DAU = 100MB 每日出口 * 30 =每月 3GB 网络出口
3 GB 免费出口 = 免费1
15KB 每日消息存储/DAU + 3KB 存储/安装2 = 45KB 存储/DAU * 5K DAU = 225MB 每日存储空间/DAU * 30 = 6.75GB 每月存储使用量
1GB 免费存储空间 + (5.75 * 0.18 美元) = 1.04 美元/月

1 Cloud Firestore 每月 10GB 的网络出口是免费的。
2由于我们假设 DAU 占应用总安装量的 10%,因此该数字占安装您应用的用户总数。

中等的
(100 万次安装)

对于 1,000,000 次应用安装(100,000 日活跃用户):292.02 美元/月

读/写成本
每月总费用 = 261.90 美元/月
每日总阅读量 800 万= 5 万次免费读取 +(795 万次读取,每 10 万美元 0.06 美元) = 79.5 * 0.06 美元
4.77 美元/天 * 30 = 143.10 美元
每日总写入量为 2M = 2 万次免费写入 +(198 万次写入,每 10 万美元 0.18 美元) = 19.8 * 0.18 美元
3.56 美元/天 * 30 = 106.80 美元
每日总删除量 200 万= 20K 次免费删除 +(198 万次删除,每 100K 美元 0.02 美元) = 19.8 * 0.02 美元
0.40 美元/天 * 30 = 12.00 美元
存储/网络成本
每月总费用 = 30.12 美元/月
每日出口的 20KB / DAU * 100K DAU = 2GB 每日出口 * 30 =每月 60GB 网络出口
10 GB 免费出口 +(50GB 出口 * 0.12 美元/GB)= 6.00 美元/月
15KB 每日消息存储/DAU + 3KB 存储/安装1 = 45KB 存储/DAU * 100K DAU = 4.5GB 每日存储空间/DAU * 30 =每月 135GB 存储空间使用量
1GB 免费存储空间 + (134GB * 0.18 美元/GB) = 24.12 美元/月

1由于我们假设 DAU 占应用总安装量的 10%,因此该数字占安装您应用的用户总数。


(10M 安装)

对于 10,000,000 次应用安装(1,000,000 日活跃用户):2951.52 美元

读/写成本
每月总费用 = 总计:2637.90 美元/月
每日总阅读量 8000 万= 5 万次免费读取 +(7995 万次读取,每 10 万美元 0.06 美元) = 799.5 * 0.06 美元
47.97 美元/天 * 30 = 1439.10 美元
每日总写入量为 20M = 2 万次免费写入 +(1998 万次写入,每 10 万美元 0.18 美元) = 199.8 * 0.18 美元
35.96 美元/天 * 30 = 1078.80 美元
每日总删除量 20M = 20K 次免费删除 +(1998 万次删除,每 100K 美元 0.02 美元) = 199.8 * 0.02 美元
4.00 美元/天 * 30 = 120.00 美元
存储/网络成本
每月总费用 = 313.62 美元/月
每日出口的 20KB / DAU * 1M DAU = 20GB 每日出口 * 30 =每月 600GB 网络出口
10 GB 免费出口 +(590GB 出口 * 0.12 美元/GB)= 70.80 美元/月
15KB 每日消息存储/DAU + 3KB 存储/安装1 = 45KB 存储/DAU * 1M DAU = 45GB 每日存储空间 / DAU * 30 = 1350GB 每月存储使用量
(1GB 免费存储)+ (1349GB * 0.18 美元/GB) = 242.82 美元/月

1由于我们假设 DAU 占应用总安装量的 10%,因此该数字占安装您应用的用户总数。

值得考虑的 Cloud Firestore 计费模型的一个好处是您只需为使用的内容付费。因此,您的账单可能会随着 DAU 数量的增加而减少。

细分:按用户任务计费

对于我们的示例聊天应用程序,数据结构如下:

  • users/{userId} — 用户记录
  • groups/{groupId} — 2 个或更多用户之间的聊天
    • messages/{messageId} — 聊天中的每条消息。

数据存储

要计算存储应用程序数据的存储成本,请应用以下关于文档大小的假设:

收藏文档尺寸(传输中)文档大小(在磁盘上)*
用户1KB 3KB
团体0.5KB 1.5KB
消息0.25KB 0.75KB

*此大小计算包括消息字段的索引,但假定对消息内容禁用索引。

该应用程序还只存储最多三个月的消息,以降低存储成本。

有关计算存储成本的更多信息,请参阅了解存储大小计算

操作

用户通常在应用程序中完成以下常见任务:

示例应用在 Cloud Firestore 中针对三个典型用户任务的总估计操作如下:

  • 读取: (5 * 10) + (30) = 80 次读取/用户/天
  • 写入: (10 * 2) = 20 次写入/用户/天
  • 网络出口:(50 * 0.25KB) + (30 * 0.25KB) = 20KB/用户/天
  • 存储:(20 * 0.75KB) = 15 KB/用户/天

用户任务的总使用量

选择每个用户任务以查看应用程序中操作、存储和网络成本的完整描述和细分。

查看聊天列表

该应用程序的主屏幕加载了 25 个最近的聊天记录,产生 25 次文档读取费用。假设活跃用户每天打开应用 5 次,每位用户每天总计阅读 125 次。但是,更高效的查询(如以下示例中的查询)可以减少此负载。

在下面的示例中,我们使用应用程序存储的每次成功获取的时间戳将查询限制为新聊天:

db.collection('groups')
  .where('participants', 'array-contains', 'user123')
  .where('lastUpdated', '>', lastFetchTimestamp)
  .orderBy('lastUpdated', 'desc')
  .limit(25)

假设每次用户检查应用程序时平均有 10 个更新的聊天记录。此查询仅产生 10 次文档读取。

在聊天中阅读消息

用户从主屏幕点击进入聊天线程以查看最近的消息,在初始加载中加载 50 条最近的消息。

假设典型用户每天执行此操作 5 次(每次打开主屏幕一次),导致每个用户每天总共阅读 250 次。我们还可以将查询限制为自上次获取时间以来的新消息:

db.collection('groups')
  .doc('group234')
  .collection('messages')
  .where('sentTime', '>', lastFetchTimestamp)
  .orderBy('sentTime', 'desc')
  .limit(50)

假设用户在所有聊天中每天收到大约 30 条消息。由于您已将查询限制为获取新消息,这意味着每天仅检索 30 条消息。

向聊天发送消息

用户可以在聊天后向其他参与者发送消息。假设一个活跃用户每天发送大约 10 条消息。

每条发送的消息都会导致两次文档写入:一次写入聊天的messages子集合,另一次写入聊天父文档以更新lastUpdated时间戳和其他元数据。

请注意,阅读这些消息的成本已计入其他旅程,因此以下总计仅考虑此写入成本。

包含的好处:为您的应用程序提供免费服务

虽然 Cloud Firestore 操作、存储和网络带宽都被视为计费用量,但您还可以免费获得各种其他好处。在将 Cloud Firestore 与其他数据库选项进行比较时,请考虑以下免费服务:

  • 直接客户端访问:使用我们的原生 SDK 从您的客户端代码直接访问 Cloud Firestore。这意味着您不需要构建和运行 API 服务器来将您的移动客户端连接到数据库。
  • 负载平衡:由于 Cloud Firestore 会自动扩展以支持流向数据库的流量,因此您不必运行负载平衡器。
  • 服务器正常运行时间: Cloud Firestore 数据库在谷歌云服务器上运行,提供超过 99% 的每月正常运行时间
  • 身份验证:使用Firebase 身份验证简单安全地对无限用户进行身份验证。 Firebase 身份验证直接与 Cloud Firestore 集成,因此您无需运行自己的身份验证服务。
  • 推送通知:使用Cloud Messaging发送消息和通知。
  • 其他 Firebase 产品:免费集成其他 Firebase 产品,包括 A/B 测试、分析、Crashlytics、性能监控和远程配置。详细了解其他 Firebase 产品Firebase 定价