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 存储费用。
备份数据和恢复操作
如果启用了backups功能,则需要支付数据库备份的存储费用。备份的存储空间大小与进行备份时数据库的存储空间大小相同。
备份的存储费用以 GiB/月为单位。在一个月内,系统会计算每个备份的保留天数,还会计算一个月内的平均值。备份费用的计算方法是:备份的存储空间大小乘以备份保留月份的比例,再乘以单价。 系统按 America/Los_Angeles 时区来定义日期边界以用于结算。
当您执行恢复操作时,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 用量,请参阅 Monitoring 用量。
管理支出
如需管理支出,请设置每月预算和提醒。
Google Cloud 预算和提醒
Google Cloud 允许您为所有 Google Cloud 服务设置每月预算。您可以使用每月预算来监控 Google Cloud 的总体费用,包括 Firestore 的网络带宽费用。设置预算后,您可以设置提醒,以便在费用接近预算时收到电子邮件通知。
请按照这些说明在 Google Cloud 控制台中设置每月预算并创建提醒。
价格示例
如需了解在实际示例应用中 Firestore 结算费用如何累计,请参阅 Firestore 结算示例。
后续步骤
- 阅读 Firestore 文档。
- 开始使用 Firestore。
- 试用价格计算器。
- 了解 Filestore 解决方案和使用场景。