Firestore 价格
本文档介绍 Firestore 的价格详情。
如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。
价格概览
使用 Firestore 时,您需要为以下各项支付费用:
- 读取、写入和删除的文档数量。
- 为满足查询要求而读取的索引条目数。详细了解索引读取。
- 数据库使用的存储空间容量,包括元数据和索引的开销。
- 网络带宽使用量。
存储空间和带宽使用量是以吉比字节 (GiB) 为单位计算的,其中 1 GiB = 230 个字节。所有费用每天进行累计。
以下部分详细介绍了 Firestore 使用量的收费方式。
免费配额
Firestore 提供了一定的免费配额,让您可以
(default)
数据库的免费配额。免费配额数量如下所示。
如果您需要更多配额,则必须为 Google Cloud 项目启用结算功能。
配额按日计算,并会在美国太平洋时间零点重置。
只有 (default)
数据库有资格使用免费配额。
免费层级 | 配额 |
---|---|
数据存储 | 1 GiB |
文档读取 | 每天 50000 次 |
文档写入 | 每天 20000 次 |
文档删除 | 每天 20000 次 |
出站数据传输 | 每月 10 GiB |
以下操作和功能不包括免费使用量。您必须启用结算功能才能使用这些功能:
- 使用命名(非默认)数据库
- TTL 删除
- PITR 数据
- 备份数据
- 恢复操作
如需详细了解这些功能的结算方式,请参阅存储价格。
不同位置的价格
下表列出了各个 Firestore 位置的读取、写入、删除和存储操作价格:
如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。
命名数据库没有免费配额
如需创建命名(非默认)数据库,您必须启用结算功能。
创建或删除命名数据库不会产生额外费用,但这些数据库不符合免费配额的条件。相反,您需要为这些命名数据库产生的用量付费。
读取、写入和删除
您需要支付为满足查询要求而产生的文档和索引条目读取费用。您需要为执行的每次文档写入和删除操作支付费用。
写入和删除操作的收费方式简单明了。对于写入操作,每个 set
或 update
操作计为一次写入。
但是读取操作的收费方式有一些您应该注意的细节。以下部分详细介绍了这些细节。
索引条目读取
对于查询所读取的每批不超过 1,000 个索引条目,系统都会收取相当于一次读取操作的费用,但以下情况除外:
在 K 最近邻向量搜索查询中,对于查询所读取的每批不超过 100 个 kNN 向量索引条目,系统都会收取相当于一次读取操作的费用。
例如,如果下面具有
limit: 5
限制的向量搜索查询返回了 5 个文档并读取了 1,550 个 kNN 向量索引条目,则您需要为返回的文档支付 5 次读取操作的费用并为读取的索引条目支付 16 次读取操作的费用:// Requires single-field vector index const vectorQuery: VectorQuery = db.collection('cities').findNearest('embedding_field', FieldValue.vector([3.0, 1.0, 2.0]), { limit: 5, distanceMeasure: 'EUCLIDEAN' });
不超过一个范围字段的查询不会产生索引条目读取费用。
例如,下面的查询包含一个等式字段 (
age
) 和一个范围字段 (start_date
),该查询就不会产生索引条目读取费用:db.collection("employees").whereEqualTo("age", 35) .whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1))
下面的查询包含两个范围字段(
age
和start_date
),该查询就会产生索引条目读取费用:db.collection("employees").whereGreaterThanOrEqualTo("age", 35) .whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1))
如果查询中至少有一个其他范围字段,“排序依据”子句中的字段便会被视为是范围字段。因此,下面的查询包含两个范围字段(
age
和start_date
),且该查询会产生索引条目读取费用:db.collection("employees").whereGreaterThanOrEqualTo("age", 35) .orderBy("start_date")
__name__
字段始终会被视为是范围字段,即使该字段仅用在等式过滤条件中也是如此。因此,下面的查询包含两个范围字段(age
和__name__
),且该查询会产生索引条目读取费用:db.collection("employees").whereIn("__name__", Arrays.asList("/employees/Alice", "/employees/Bob")) .orderBy("age")
聚合查询
对于聚合查询(例如,count()
、sum()
和 avg()
),您需要按上述规定为查询支付索引条目读取费用。对于读取 0 个索引条目的聚合查询,系统会收取相当于一次文档读取的最低费用。
例如,如果 count()
操作读取 0 至 1,000 个索引条目,则系统会收取相当于一次文档读取的费用;如果 count()
操作读取 1,500 个索引条目,则系统会收取相当于两次文档读取的费用。
您可以使用查询解释详细了解所用索引和所读取的索引条目。
监听查询结果
Firestore 可让您监听查询结果,并且在查询结果发生更改时获得实时更新。
当您监听查询的结果时,每次结果集内添加或更新了文档,您都需要支付读取费用。当从结果集中移除某个文档时,您同样需要支付读取费用,因为该文档已经发生了更改。(但如果某个文档被删除,您不需要支付读取费用)。
移动 SDK 和 Web SDK 中的监听器的结算还取决于是否启用了离线持久化:
如果启用了离线持久化,则在监听器断开网络连接的时间超过 30 分钟(例如用户下线)后,您才需要支付文档和索引条目读取费用,就像您进行了全新查询一样。
但如果停用离线持久化,则只要监听器断开网络连接并进行重新连接,您便需要支付文档和索引条目读取费用,就好像进行全新查询一样。
管理大型结果集
Firestore 有几项功能可以帮助您管理会返回大量结果的查询:
- 游标:可让您继续执行某个运行时间较长的查询。
- 页面标记:帮助您对查询结果进行分页。
- 限制:指定要检索多少条结果。
- 偏移:可让您跳过一定数量的文档。
使用游标、页面标记和限制时没有额外的费用。不仅如此,这些功能只会读取您实际需要的文档,因此还可以帮助您节省费用。
但是,当您发送包含偏移的查询时,对于每个跳过的文档,您仍需要支付读取费用。例如,如果您的查询使用的偏移为 10,并且该查询返回 1 个文档,则您一共需要支付 11 次读取操作的费用。由于存在这笔额外费用,您应该尽可能使用游标,而不是偏移。
文档读取以外的查询
对于文档读取以外的其他查询,例如请求一个集合 ID 列表,您需要支付一次文档读取的费用。如果获取完整的结果集需要发出多个请求(例如,如果您使用了分页功能),则每个请求都会单独计费。
查询的最低费用
即使查询没有返回任何结果,对于您执行的每个查询,系统都会收取相当于一次文档读取的最低费用。
Firestore 安全规则
对于移动和 Web 客户端库,如果您的 Firestore 安全规则使用 exists()
、get()
或 getAfter()
从数据库中读取一个或多个文档,那么您需要支付如下额外读取费用:
您需要为评估您的 Firestore 安全规则所需的读取操作支付费用。
例如,如果您的规则引用了三个文档,但 Firestore 只需要读取其中两个文档来评估您的规则,那么您将需要为相关文档的两次额外读取操作支付费用。
即使您的规则不止一次地引用某个文档,对于该文档您也只需要支付一次读取操作的费用。
您只需为每个请求支付一次规则评估费用。
因此,一次读取多个文档可能比每次读取一个文档的费用要少,因为读取多个文档需要的请求数更少。
当您监听查询的结果时,在下列所有情况下您都需要支付规则评估费用:
- 每当您发出查询时。
- 每当查询结果发生更新时。
- 每当用户的设备离线然后又重新连线时。
- 每当您更新自己的规则时。
- 每当您更新规则中的相关文档时。
数据库存储空间大小
您需要为您在 Firestore 中存储的数据量支付费用,包括相关存储开销。存储开销包括元数据、自动索引和复合索引。
存储在 Firestore 中的每个文档都需要以下元数据:
- 文档 ID,包括集合 ID 和文档名称。
- 每个字段的名称和值。Firestore 是无架构的,因此文档中每个字段的名称必须与字段值一起存储。
- 引用了该文档的任何单字段索引和复合索引。每个索引条目都包含集合 ID、任意数量的字段值(具体取决于索引定义)以及文档名称。
存储费用以 GiB/月为单位,每天计算一次。Firestore 每天测量数据库大小。在一个月内,系统会计算这些样本点的平均值,以计算数据库存储空间大小。此平均值乘以存储空间(GiB-月)的单价
如需了解如何计算 Firestore 的存储空间使用量,请参阅存储空间大小 计算。
PITR 数据
如果启用 PITR,您需要支付 PITR 数据的存储费用。大多数客户会发现 PiTR 数据存储的总费用与数据库的存储费用类似。
PITR 的存储费用以 GiB/月为单位,每天计算一次。Firestore 每天都会测量数据库大小。在一个月内,系统会计算这些样本点的平均值,以计算数据库存储空间大小。此平均值乘以 PITR(GiB-月)的单价。
例如,如果数据库一个月的平均大小为 1 GiB,并且整个月都启用了 PITR,则计费 PITR 数据大小也是 1 GiB。
最低结算费用:即使您在启用后 1 天内停用了 PITR,系统也可能会向您收取最多 1 天的 PITR 存储费用。
备份数据和恢复操作
如果启用了备份功能,则需要支付数据库备份的存储费用。备份的存储空间大小与您进行备份时数据库的存储空间大小相同。
备份的存储费用以 GiB/月为单位。在一个月内,系统会计算每个备份的保留天数,还会计算一个月内的平均值。备份费用的计算方法是:备份的存储空间大小乘以备份保留月份的比例,再乘以单价。
在您执行恢复操作时,Firestore 会测量 恢复操作的备份大小。备份的大小乘以恢复操作 (GiB) 的单价。
查询解释
使用 Firestore 查询解释会产生费用。
如果您在使用查询解释时选择的是默认选项,系统不会执行任何索引读取操作。无论查询复杂程度如何,都只会收取一次读取操作的费用。
如果您在使用查询解释时选择的是分析选项,系统会相应执行索引和读取操作,因此您需要照常为查询付费。解释和分析活动不会产生额外费用,只会收取执行查询的常规费用。
网络带宽
您需要为 Firestore 请求所使用的网络带宽支付费用,如以下部分中所示。Firestore 请求的网络带宽费用取决于请求的响应大小、您的 Firestore 数据库的位置和响应的目标位置。
Firestore 会根据序列化消息格式计算响应大小。协议开销(如 SSL 开销)不计入网络带宽使用量。Firestore 安全规则拒绝的请求不计入网络带宽使用量。
了解在配置网络时 可以使用 Google Cloud 控制台导出您的 结算数据创建一个文件。
常规网络流量价格
对于源自 Google Cloud Platform(例如,来自在 Google Compute Engine 上运行的应用)的请求,我们按如下标准向您收取费用:
流量类型 | 价格 |
---|---|
入站数据传输 | 免费 |
区域内的数据传输 | 免费 |
同一多区域内不同区域之间的数据传输 | 免费 |
美国境内不同区域之间的数据传输(每 GiB) | $0.01(每个月前 10 GiB 免费) |
不同区域之间的数据传输(不包括美国境内不同区域之间的流量) | Google Cloud Platform 出站互联网数据传输费率 |
如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。
互联网数据传输速率
您需要为以下服务支付互联网数据传输费用:
- 不同区域之间的 Google Cloud 请求(不包括美国境内不同区域之间的流量)
- 来自 Google Cloud 以外(例如来自用户的移动设备)的请求
如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。
监控使用情况
如需了解如何监控 Firestore 用量,请参阅 监控使用情况。
管理支出
如需管理支出,请设置每月预算和提醒。
Google Cloud 预算和提醒
Google Cloud 允许您为所有 Google Cloud 服务设置每月预算。您可以使用每月预算来监控 Google Cloud 的总体费用,包括 Firestore 的网络带宽费用。设置预算后,您可以设置提醒,以便在费用接近预算时收到电子邮件通知。
请按照这些说明设置每月预算 在 Google Cloud 控制台中创建提醒。
价格示例
如需了解在实际示例应用中 Firestore 结算费用如何累计,请参阅 Firestore 结算示例。
后续步骤
- 阅读 Firestore 文档。
- 开始使用 Firestore。
- 试用价格计算器。
- 了解 Filestore 解决方案和使用场景。