计费示例

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

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

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

前提

假设此应用的使用量和数据存储情况如下所示:

  • 日活跃用户数 (DAU) 占应用安装总数的 10%。您可以使用日活跃用户数 (DAU) 的粗略估计值来估算您的每日费用。此数值对应的是某一天主动打开并使用应用的用户数,通常只占应用安装总数的一小部分。在下面的计算中,我们估计日活跃用户数为应用安装总数的 10%。
  • 文档大小相对较小。如需了解按类型分列的文档大小统计,请参阅下表
  • 数据仅存储三个月。示例聊天应用中消息的存储时间仅为三个月。为了计入删除操作,下面的计算显示每个日写入操作对应一个日删除操作。
  • 这些费用估算值反映了示例应用的大部分费用,但并非所有费用。我们通过计算本指南中述及的最常见用户任务的操作、用户和消息存储以及出站流量,考虑了应用的大部分费用。您可能还需要考虑其他费用,具体取决于您的应用结构和数据需求。此示例只为指导您如何计算费用,如需 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/月
20 KB / 日活用户的日出站流量 * 5000 位日活用户 = 100 MB 日出站流量 * 30 = 3 GB 月网络出站流量
3 GB 免费出站流量 = 免费1
 
15 KB 日消息存储 / 日活用户 + 3 KB 存储 / 安装2 = 45 KB 存储 / 日活用户 * 5000 位日活用户 = 225 MB 日存储 / 日活用户 * 30 = 6.75 GB 月存储空间使用量
1GB 免费存储 + (5.75 * $0.18) = $1.04 / 月

1 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/月
20 KB / 日活用户的日出站流量 * 10 万位日活用户 = 2 GB 日出站流量 * 30 = 60 GB 月网络出站流量
10 GB 免费出站流量 +(50 GB 出站流量 * $0.12/GB)= $6.00 / 月
 
15 KB 日消息存储 / 日活用户 + 3 KB 存储 / 安装1 = 45 KB 存储 / 日活用户 * 10 万位日活用户 = 4.5 GB 日存储 / 日活用户 * 30 = 135 GB 月存储空间使用量
1 GB 免费存储 + (134 GB * $0.18/GB) = $24.12 / 月

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

大型
(1,000 万次安装)

对于 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/月
20 KB / 日活用户(日出站流量) * 100 万位日活用户 = 20 GB 日出站流量 * 30 = 600 GB 月网络出站流量
10 GB 免费出站流量 +(590 GB 出站流量 * $0.12/GB)= $70.80 / 月
 
15 KB 日消息存储 / 日活用户 + 3 KB 存储 / 安装1 = 45 KB 存储 / 日活用户 * 100 万位日活用户 = 45 GB 日存储 / 日活用户 * 30 = 1350 GB 月存储空间使用量
(1 GB 免费存储)+ (1349 GB * $0.18/GB) = $242.82 / 月

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

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

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

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

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

数据存储

为了计算用于存储应用数据的存储费用,请使用以下文档大小假设:

数据收集 文档大小(传输中) 文档大小(磁盘上)*
用户 1KB 3KB
groups 0.5KB 1.5KB
消息 0.25KB 0.75KB

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

为降低存储费用,该应用存储消息的最长时间也仅为三个月。

如需详细了解如何计算存储费用,请参阅了解存储空间使用量计算

操作

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

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

  • 读取:(5 * 10) + (30) = 80 次读取 / 用户 / 天
  • 写入:(10 * 2) = 20 次写入 / 用户 / 天
  • 网络出站流量:(50 * 0.25 KB) + (30 * 0.25 KB) = 20 KB / 用户 / 天
  • 存储:(20 * 0.75 KB) = 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 时间戳和其他元数据。

请注意,读取这些消息的费用已在其他历程中计算,因此以下总计仅考虑此写入费用。

管理员任务的计费使用量

作为应用所有者或管理员,您可能需要基于应用数据生成报告。例如,您可能希望记录用户每天发送的消息数。为此,您可以对 messages 合集组进行 count() 聚合。

使用 count() 等聚合查询时,对于查询所匹配的每批索引条目(不超过 1,000 个),系统都会收取相当于一次文档读取的费用。运行这种每日聚合会增加以下月度费用:

小型
(5 万次安装)

5 万次应用安装(5,000 位日活跃用户):$0.0009/月

5,000 位活跃用户 * 每位用户 10 条新消息 = 每天 5 万新消息文档

算出的 5 万个文档 / 每次读取收费 1,000 次索引匹配 = 50 次读取

每天 50 次读取 * 30 天 = 每月 1,500 次读取

每月 1500 次读取 * .06/100,000 读取价格 = 每月 $0.0009

中型
(100 万次安装)

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

10 万位活跃用户 * 每位用户 10 条新消息 = 每天 100 万新消息文档

算出的 100 万个文档 / 每次读取收费 1,000 次索引匹配 = 1,000 次读取

每天 1,000 次读取 * 30 天 = 每月 3 万次读取

每月 3 万次读取 * .06/100,000 读取价格 = 每月 $0.018

大型
(1,000 万次安装)

1,000 万次应用安装(100 万位日活跃用户):$0.18

100 万活跃用户 * 每位用户 10 条新消息 = 每天 1,000 万新消息文档

算出的 1,000 万个文档 / 每次读取费用 1,000 次索引匹配 = 1 万次读取

每天 1 万次读取 * 30 天 = 每月 30 万次读取

每月 30 万次读取 * .06/10,0000 读取价格 = 每月 $0.18