您可以使用 Cloud Firestore 托管式批量删除服务从数据库中删除数据。此功能支持针对一个或多个集合组进行删除。
本页介绍了如何使用托管式批量删除服务批量删除 Cloud Firestore 文档。您可以通过 gcloud
命令行工具和 Cloud Firestore API(REST、RPC)使用 Cloud Firestore 代管式批量删除服务。
准备工作
您必须先完成以下任务,才能使用代管式批量删除服务:
- 为您的 Google Cloud 项目启用结算功能。只有启用了结算功能的 Google Cloud 项目才能使用批量删除功能。
-
确保您的账号拥有 Cloud Firestore 的必要权限。如果您是项目所有者,则您的账号拥有所需的权限。如果不是,以下角色具有必要的批量删除操作权限:
- Cloud Firestore 角色:
Owner
、Cloud Datastore Owner
或Cloud Datastore Bulk Admin
- Cloud Firestore 角色:
为您的项目设置 gcloud
您可以通过 Google Cloud 控制台或 gcloud
命令行工具启动批量删除操作。如需使用 gcloud
,请设置命令行工具并通过以下任一方式连接到您的项目:
使用 Cloud Shell 从 Google Cloud 控制台访问
gcloud
。请确保为正确的项目配置了
gcloud
:gcloud config set project [PROJECT_ID]
批量删除数据
批量删除操作首先查找数据库中所有适用的文档,然后将其批量删除。您仍然可以查询或阅读这些文档,但结果可能会因处理进度而异。批量删除不会删除操作开始后添加或修改的任何文档。
批量删除特定集合组
gcloud
如需批量删除特定集合组,请使用 --collection-ids
标志。该操作仅删除具有指定 ID 的集合组。集合组包含具有指定集合组的所有文档和嵌套文档(在任意路径中)。
gcloud beta firestore bulk-delete \ --collection-ids=[COLLECTION_GROUP_ID_1_OR_KIND_1],[COLLECTION_GROUP_ID_2_OR_KIND_2],[SUBCOLLECTION_GROUP_ID_1_OR_KIND_3] \ --database=[DATABASE]
管理批量删除操作
在您启动批量删除操作后,Cloud Firestore 会为操作分配一个唯一名称。您可以使用操作名称来删除、取消操作或检查操作状态。
操作名称的前缀为 projects/[PROJECT_ID]/databases/[DATABASE_ID]/operations/
,例如:
projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
不过,您可以在指定 describe
、cancel
和 delete
命令的操作名称时省略前缀。
列出所有批量删除操作
gcloud
使用 operations list
命令可查看所有正在运行和最近完成的操作,包括批量删除操作:
gcloud firestore operations list
查看操作状态
gcloud
使用 operations describe
命令显示批量删除操作的状态。
gcloud firestore operations describe [OPERATION_NAME]
预估完成时间
用于获取运行时间较长的操作状态的请求会返回指标 workEstimated
和 workCompleted
。返回的这两个指标均包含字节数和文档数:
workEstimated
表示操作将处理的预估总字节数和文档数。如果 Cloud Firestore 无法进行估算,则可能会省略该指标。workCompleted
显示到目前为止已删除的字节数和文档数。操作完成后,该值会显示实际处理的总字节数和总文档数,可能大于workEstimated
的值。
将 workCompleted
除以 workEstimated
可得出粗略的进度估算值。该估算值可能不准确,因为它所依据的是延迟的统计信息收集操作。
取消操作
gcloud
使用 operations cancel
命令可停止正在进行的操作:
gcloud firestore operations cancel [OPERATION_NAME]
取消正在进行的操作并不会撤消操作。取消批量删除操作后,系统不会恢复已删除的文档。
删除操作
使用 gcloud firestore operations delete
命令可从近期操作列表中移除已完成的操作。如需取消正在运行的操作,请使用之前的取消操作。
gcloud firestore operations delete [OPERATION_NAME]
批量删除操作的计费和价格
在使用代管式批量删除服务之前,您需要为 Google Cloud 项目启用结算功能。
对于批量删除操作,您需按 Cloud Firestore 价格中列出的费率支付文档读写费用。批量删除操作会对每个找到的文档执行一次索引条目读取操作,并对每个删除的文档执行一次删除操作。最多读取 1,000 个索引条目,系统会收取一次读取操作的费用。例如,如果批量删除操作删除了 1, 500 个文档,则系统会收取 2 次文档读取费用和 1, 500 次文档删除费用。
请注意,Cloud Firestore 会对实际完成的工作收费。如果操作因用户错误而被取消或失败,则您需要按进度付费。Cloud Firestore 不会针对最终未被删除的文档(例如,在删除操作开始后被修改的文档)收取读取或删除费用。费用将在操作完成当天归因。
批量删除操作在完成之前不会触发 Google Cloud 预算提醒。同样,在批量删除操作期间执行的读取和删除操作会在操作完成后计入您的可用配额/用量。批量删除操作不会影响控制台的“使用量”部分中显示的使用量。
查看批量删除费用
批量删除操作会为收费操作添加 goog-firestoremanaged:bulkdelete
标签。在 Cloud Billing 报告页面中,您可以使用此标签查看与批量删除操作相关的费用。
最佳做法
避免跳过已删除的数据,这可能会导致查询速度变慢。