转到控制台

查看 Cloud Firestore 价格示例

您可以使用这个真实的基本聊天应用示例来衡量 Cloud Firestore 使用量和费用。此为估算并不准确,但可以帮助您更好地了解如何对自己的 Cloud Firestore 使用量进行计费。

概览:按使用量级别划分费用

为了说明典型的费用案例,请考虑采用这样一个示例聊天应用,用户可以在此应用中发起与两位或多位参与者的聊天。用户可以在列表中查看他们的活跃聊天,阅读消息和发送消息。在此示例中,我们使用的是北美多区域(具体来说就是 nam5)的价格。

假设条件

请考虑采用以下使用量和数据存储假设:

  • 日活跃用户数 (DAU) 占应用安装总数的 10%。 您可以使用日活跃用户数 (DAU) 的粗略估计值来估算您的每日费用。此数值对应的是某一天主动打开并使用您应用的用户数,通常只占您应用安装总数的一小部分。在下面的计算中,我们估计 DAU 为应用安装总数的 10%。
  • 文档大小相对较小。 如需了解按类型分列的文档大小统计,请参阅下表
  • 数据仅存储三个月。 示例聊天应用中消息的存储时间仅为三个月。对于删除操作,下面的计算显示每个日写入操作对应一个日删除操作。
  • 这些费用估算值反映了示例应用的大部分费用,但并非所有费用。 我们通过计算本指南中述及的最常见用户任务的操作、用户和消息存储以及出站流量,估算出了应用的大部分费用。您可能还需要考虑其他费用,具体取决于您的应用结构和数据需求。此示例只为指导您如何计算费用,如需 Cloud Firestore 费用的更全面说明,请参阅价格页面

如需了解按用户任务分列的操作统计,请参阅细分:按用户任务划分的计费使用量部分。


(5 万次安装)

对于 5 万次应用安装(5000 位日活跃用户):$12.14/月

读/写操作费用
月费用总计 = $11.10/月
日读取操作总计 40 万次 = 5 万次免费读取操作 +(35 万次读取操作,价格为 $0.06/10 万次) = 3.5 * $0.06
$0.21 / 天 * 30 = $6.30
 
日写入操作总计 10 万次 = 2 万次免费写入操作 +(8 万次写入操作,价格为 $0.18/10 万次) = .8 * $0.18
$0.14 / 天 * 30 = $4.20
 
日删除操作总计 10 万次 = 2 万次免费删除操作 +(8 万次删除操作,价格为 $0.02/10 万次) = .8 * $0.02
$0.02 / 天 * 30 = $0.60
存储/网络费用
月费用总计 = $1.04/月
20KB / DAU 日出站流量 * 5000 位 DAU = 100MB 日出站流量 * 30 = 3GB 月网络出站流量
3 GB 免费出站流量 = 免费1
 
15KB 日消息存储 / DAU + 3KB 存储 / 安装2 = 45KB 存储 / DAU * 5000 位 DAU = 225MB 日存储 / DAU * 30 = 6.75GB 月存储空间使用量
1GB 免费存储 + (5.75 * $0.18) = $1.04 / 月

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


(100 万次安装)

对于 100 万次应用安装(10 万位日活跃用户):$292.02/月

读/写操作费用
月费用总计 = $261.90/月
日读取操作总计 800 万次 = 5 万次免费读取操作 +(795 万次读取操作,价格为 $0.06/10 万次) = 79.5 * $0.06
$4.77 / 天 * 30 = $143.10
 
日写入操作总计 200 万次 = 2 万次免费写入操作 +(198 万次写入操作,价格为 $0.18/10 万次) = 19.8 * $0.18
$3.56 / 天 * 30 = $106.80
 
日删除操作总计 200 万次 = 2 万次免费删除操作 +(198 万次删除操作,价格为 $0.02/10 万次) = 19.8 * $0.02
$0.40 / 天 * 30 = $12.00
存储/网络费用
月费用总计 = $30.12/月
20KB / DAU 日出站流量 * 10 万位 DAU = 2GB 日出站流量 * 30 = 60GB 月网络出站流量
10 GB 免费出站流量 +(50GB 出站流量 * $0.12/GB)= $6.00 / 月
 
15KB 日消息存储 / DAU + 3KB 存储 / 安装1 = 45KB 存储 / DAU * 10 万位 DAU = 4.5GB 日存储 / DAU * 30 = 135GB 月存储空间使用量
1GB 免费存储 + (134GB * $0.18/GB) = $24.12 / 月

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


(1000 万次安装)

对于 1000 万次应用安装(100 万位日活跃用户):$2951.52

读/写操作费用
月费用总计 = 总计:$2637.90/月
日读取操作总计 8000 万次 = 5 万次免费读取操作 +(7995 万次读取操作,价格为 $0.06/10 万次) = 799.5 * $0.06
$47.97 / 天 * 30 = $1439.10
 
日写入操作总计 2000 万次 = 2 万次免费写入操作 +(1998 万次写入操作,价格为 $0.18/10 万次) = 199.8 * $0.18
$35.96 / 天 * 30 = $1078.80
 
日删除操作总计 2000 万次 = 2 万次免费删除操作 +(1998 万次删除操作,价格为 $0.02/10 万次) = 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 * 100 万位 DAU = 45GB 日存储 / DAU * 30 = 1350GB 月存储空间使用量
(1GB 免费存储)+ (1349GB * $0.18/GB) = $242.82 / 月

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

Cloud Firestore 计费模式的一项优点就在于,您只需为实际使用量付费。因此,您的费用可能会随着 DAU 数量的变化而上下浮动。

细分:按用户任务划分的计费使用量

以示例聊天应用为例,其数据结构如下:

  • users/{userId} - 用户记录
  • groups/{groupId} - 两位或多位用户之间的聊天
    • 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 数据库在 Google Cloud Platform 服务器上运行,每月正常运行时间百分比超过 99%
  • 身份验证:使用 Firebase 身份验证,可以简单而安全地对无限数量的用户进行身份验证。Firebase 身份验证直接与 Cloud Firestore 集成,因此您无需运行自己的身份验证服务。
  • 推送通知:使用云消息传递发送消息和通知。
  • 其他 Firebase 产品:集成其他免费的 Firebase 产品,包括 A/B 测试、Analytics、Crashlytics、性能监控、预测和远程配置。详细了解其他 Firebase 产品Firebase 价格