批量删除实体

您可以使用 Datastore 模式托管式批量删除服务从数据库中删除数据。此功能支持对一个或多个类型进行删除。

本页介绍了如何使用托管式批量删除服务批量删除 Datastore 模式 Firestore 实体。可通过 gcloud 命令行工具和 Datastore 模式 API(RESTRPC)使用 Datastore 模式托管式批量删除服务。

准备工作

您必须先完成以下任务,才能使用托管式批量删除服务:

  1. 为 Google Cloud 项目启用结算功能。只有启用了结算功能的 Google Cloud 项目才能使用批量删除功能。
  2. 确保您的账号拥有 Datastore 模式的必要权限。如果您是项目所有者,那么您的账号具有所需权限。如果不是,以下角色具有批量删除操作所需的权限:

    • Datastore 模式角色OwnerCloud Datastore OwnerCloud Datastore Bulk Admin

为您的项目设置 gcloud

您可以通过 Google Cloud 控制台或 gcloud 命令行工具启动批量删除操作。如需使用 gcloud,请设置命令行工具并通过以下任一方式连接到您的项目:

批量删除数据

批量删除操作首先会查找数据库中的所有适用实体,然后批量删除这些实体。您仍然可以查询或阅读这些实体,但结果可能会因进度而异。批量删除不会删除操作开始后添加或修改的任何实体。

批量删除特定类型

gcloud

如需批量删除特定类型,请使用 --collection-ids 标志。该标志使用 Firestore 术语,但集合组 ID 与类型 ID 相同。该操作仅删除具有指定 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]

管理批量删除操作

在您启动批量删除操作后,Datastore 模式会为操作分配唯一名称。您可以使用操作名称来删除操作、取消操作或检查操作状态。

操作名称的前缀为 projects/[PROJECT_ID]/databases/[DATABASE_ID]/operations/,例如:

projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

不过,您可以在指定 describecanceldelete 命令的操作名称时省略前缀。

列出所有批量删除操作

gcloud

使用 operations list 命令查看所有正在运行和最近完成的操作,包括批量删除操作:

gcloud firestore operations list

查看操作状态

gcloud

使用 operations describe 命令显示批量删除操作的状态。

gcloud firestore operations describe [OPERATION_NAME]

预估完成时间

用于获取运行时间较长的操作状态的请求会返回指标 workEstimatedworkCompleted。返回的这两个指标均包含字节数和实体数。

  • workEstimated 表示操作将处理的预估总字节数和实体数。如果 Datastore 模式无法进行估算,则可能会省略该指标。

  • 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 项目启用结算功能。

对于批量删除操作,您需按 Datastore 模式价格中列出的费率支付实体读取和删除费用。批量删除操作会对每个找到的实体执行一次索引条目读取操作,并对每个删除的实体执行一次删除操作。对于读取的不超过 1,000 个索引条目,系统会收取相当于一次读取操作的费用。例如,如果批量删除操作删除了 1500 个实体,则系统会收取相当于两次实体读取和 1500 次实体删除的费用。

请注意,Datastore 模式按实际完成的工作收费。如果操作因用户错误而被取消或失败,您将需要为已完成的进度付费。Datastore 模式不会对最终未删除的实体(例如,在删除操作开始后修改的实体)收取读取或删除费用。费用将在操作完成的当天收取。

批量删除操作在完成之前不会触发 Google Cloud 预算提醒。同样,在批量删除操作期间执行的读取和删除会在操作完成后计入您的免费配额/用量。批量删除操作不会影响控制台的用量部分中显示的用量。

查看批量删除费用

批量删除操作会为结算操作添加 goog-firestoremanaged:bulkdelete 标签。在 Cloud Billing 报告页面中,您可以使用此标签查看与批量删除操作相关的费用。

最佳做法

避免跳过已删除的数据,这可能会导致查询速度变慢。

其他选项

Dataflow 是一种用于开发和执行数据处理工作流的代管式服务,还可以批量删除数据。Dataflow 提供了 Datastore 删除模板,您可以使用该模板删除 GQL 查询选择的实体。

如需了解详情,请参阅有关执行 Datastore 批量删除模板的 Dataflow 文档

如果您的用例涉及数据保留,请参阅使用 TTL 政策管理数据保留期限