如何删除对象
StorageGRID 可以直接响应客户端请求删除对象,也可以因 S3 存储分段生命周期到期或 ILM 策略要求而自动删除对象。了解可删除对象的不同方式以及 StorageGRID 如何处理删除请求有助于您更有效地管理对象。
StorageGRID 可以使用以下两种方法之一删除对象:
-
同步删除:当 StorageGRID 收到客户端删除请求时,将立即删除所有对象副本。删除副本后,系统会通知客户端删除操作成功。
-
对象将排队等待删除:当 StorageGRID 收到删除请求时,该对象将排队等待删除,并且系统会立即通知客户端删除已成功。对象副本稍后将通过后台 ILM 处理进行删除。
删除对象时, StorageGRID 会使用方法来优化删除性能,最大限度地减少潜在的删除积压并以最快的速度释放空间。
下表总结了 StorageGRID 何时使用每种方法。
执行删除的方法 | 使用时 |
---|---|
对象已排队等待删除 |
当满足以下条件中的 * 任意 * 时:
|
立即删除对象(同步删除) |
当 S3 或 Swift 客户端发出删除请求且满足以下 * 所有 * 条件时:
|
当S3或Swift客户端发出删除请求时、StorageGRID 会首先将对象添加到删除队列中。然后,它会切换到执行同步删除。确保后台删除队列包含要处理的对象,这样 StorageGRID 可以更高效地处理删除,尤其是对于低并发性客户端,同时有助于防止客户端删除积压。
删除对象所需的时间
StorageGRID 删除对象的方式可能会影响系统的执行方式:
-
当 StorageGRID 执行同步删除时, StorageGRID 可能需要长达 30 秒才能将结果返回给客户端。这意味着删除的速度可能会更慢,即使副本的实际删除速度比 StorageGRID 将对象排队等待删除时要快。
-
如果您在批量删除期间密切监控删除性能,则可能会注意到删除了一定数量的对象后,删除率似乎会变慢。当 StorageGRID 从对要删除的对象进行排队转移到执行同步删除时,会发生此更改。删除率明显降低并不意味着删除对象副本的速度较慢。相反,它表明平均而言,空间释放速度更快。
如果要删除大量对象,并且您的优先级是快速释放空间,请考虑使用客户端请求删除对象,而不是使用 ILM 或其他方法删除这些对象。通常,当客户端执行删除时,空间释放速度会更快,因为 StorageGRID 可以使用同步删除。
删除对象后释放空间所需的时间取决于多个因素:
-
对象副本是同步删除还是稍后排队等待删除(对于客户端删除请求)。
-
其他因素包括网格中的对象数或对象副本排队等待删除时网格资源的可用性(对于客户端删除和其他方法)。
如何删除受版本控制的 S3 对象
如果为 S3 存储分段启用了版本控制,则无论这些请求来自 S3 客户端, S3 存储分段生命周期到期还是 ILM 策略要求, StorageGRID 都会在响应删除请求时遵循 Amazon S3 的行为。
对对象进行版本管理时、对象删除请求不会删除对象的当前版本、也不会释放空间。相反、对象删除请求会创建一个删除标记作为对象的当前版本、从而使对象的先前版本"`非当前。`"
即使尚未删除此对象, StorageGRID 的行为仍会使当前版本的对象不再可用。对该对象的请求将返回 404 NotFound 。但是,由于未删除非当前对象数据,因此指定非当前对象版本的请求可能会成功。
要在删除版本管理对象时释放空间、请使用以下方法之一:
-
S3客户端请求:在S3删除对象请求中指定对象版本ID (
DELETE /object?versionId=ID
)。请注意,此请求仅删除指定版本的对象副本(其他版本仍占用空间)。 -
分段生命周期:使用
NoncurrentVersionExpiration
存储分段生命周期配置中的操作。满足指定的非当前磁盘数后, StorageGRID 将永久删除非当前对象版本的所有副本。无法恢复这些对象版本。。
NewerNoncurrentVersions
分段生命周期配置中的操作指定受版本控制的S3分段中保留的非当前版本数。如果有比的非最新版本NewerNoncurrentVersions
指定、StorageGRID 会在非当前天数值过期后删除旧版本。。NewerNoncurrentVersions
阈值将覆盖ILM提供的生命周期规则、这意味着、中具有某个版本的非当前对象NewerNoncurrentVersions
如果ILM请求删除阈值、则会保留此阈值。 -
* ILM : "克隆活动策略" 并将两个ILM规则添加到新建议的策略中:
-
第一条规则:使用"`noncurrent time`"作为参考时间、以匹配对象的非当前版本。在中 "创建ILM规则向导的第1步(输入详细信息)"下,为问题“
仅将此规则应用于较旧的对象版本(在启用了版本控制的S3存储分段中)?
”选择*Yes*。 -
第二条规则:使用*Ingesgite time*与当前版本匹配。"`noncurrent time`"规则必须显示在策略中的*载入时间*规则之上。
-
如何删除S3删除标记
删除受版本控制的对象后、StorageGRID 会创建一个删除标记作为对象的当前版本。要从存储分段中删除零字节删除标记、S3客户端必须明确删除对象版本。ILM、存储分段生命周期规则或删除存储分段操作中的对象不会删除标记。