
# 如何使用前缀删除功能
在处理大规模数据存储和管理时，用户经常需要清理过期或不再需要的数据。然而，传统的Apache HBase仅支持单行数据删除，这导致在需要删除大量数据时，必须先进行全表扫描再逐行删除，过程繁琐且效率低下。GeminiDB HBase接口的前缀删除功能支持按行键删除指定前缀的数据，生效速度快，删除效率高，有效简化了必须先扫描再精确删除的繁琐流程。相较于Apache HBase，GeminiDB HBase接口的前缀删除更为方便快速，在范围数据清理，历史数据淘汰等场景有巨大优势。GeminiDB HBase接口的前缀删除功能提供了一种高效、快速的解决方案。
![](https://support.huaweicloud.com/hbaseug-nosql/public_sys-resources/caution_3.0-zh-cn.png)
错误使用此功能可能会对数据产生重大影响，请在使用该功能前确认已经完全了解以下使用规范。
#### 使用规范（必读）
前缀删除返回成功时，内部行为是标记删除，数据并没有立刻被删除，数据库需要在后台数据存储过程中逐步淘汰已被标记删除的数据，同时清除范围删除产生的范围墓碑。因此，为避免影响数据库性能，客户使用该功能时，需要遵循如下约定：
- **禁止**短时间内针对单一数据范围进行多次重复范围删除与写入。
- **禁止**短时间内进行大量范围删除。
- 尽量**避免**扫描范围包含已经范围删除的数据。
- **提前验证**范围删除，防止误删大量数据的意外出现。
当前缀删除操作返回成功时，其内部执行的是标记删除逻辑 ------ 数据并不会立即从存储中移除，而是由数据库在后台存储过程中逐步淘汰已标记的数据，并清理范围删除产生的范围墓碑（tombstone）。
为避免此类后台操作对数据库性能造成额外负担，建议客户使用该功能时严格遵循以下约定：
- **禁止短时间内对同一数据范围重复执行范围删除与写入**（频繁操作会导致墓碑积累过快，加重后台清理压力）。
- **禁止短时间内发起大量范围删除**（集中式删除会产生大量墓碑，可能阻塞正常读写操作）。
- **尽量避免扫描包含已被范围删除数据的范围**（扫描时需跳过墓碑，会降低查询效率）。
- **提前验证范围删除的条件与范围**（通过预校验防止误删大量数据，减少后续数据恢复成本）。
 
#### 典型违反使用规范的行为
- 针对10亿条特定数据范围的 Key，在1天内发起5万次前缀删除，且过程中夹杂大量同范围数据写入，会引发双重性能问题。
- 1天内发起 10 万次及以上大范围前缀删除（如每次删除覆盖百万级、千万级 Key），会对数据库形成"冲击式"压力。
- 执行未经验证的短前缀删除（如误删前缀为 "0" 或 "a" 的数据），会因短前缀的匹配范围过广，导致数据库中大量非目标数据被误删。
 
![](https://support.huaweicloud.com/hbaseug-nosql/public_sys-resources/caution_3.0-zh-cn.png)
若使用前缀删除时严重违反使用规范，将会出现如读时延升高、请求失败、影响业务正常读写等严重后果，请客户及时关注业务情况，在执行前缀删除操作前请务必在测试环境验证删除效果。
如果在大批量调用前缀删除的过程中，业务出现上述问题，请立刻停止使用前缀删除功能并咨询专家。您可以在管理控制台右上角，选择"[工单 \> 新建工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)"，联系客服进行处理。
#### 使用指导
客户可在业务请求中添加额外属性，将 Delete 请求标记为前缀删除请求。需注意：请求被标记为前缀删除后，仅***key***参数会作为前缀匹配的依据生效，其他所有参数（如指定列、指定qualifier等）均不再参与执行逻辑；凡是与该前缀匹配成功的所有数据，都会被执行删除操作。
目前前缀删除功能仅支持通过Java HBase Client调用，以下为实现前缀删除的关键步骤代码示例，执行后将删除所有以"row1"为前缀开头的 Key。
```
Delete delete = new Delete(Bytes.toBytes("row1"));
delete.setAttribute("PREFIXDELETE", "true".getBytes(StandardCharsets.UTF_8));
table.delete(delete);
```
#### 常见问题
1. Q：如果请求超时或者失败，我的数据是否已经被删除？ A：由于GeminiDB HBase接口不支持事务，无法保证操作的原子性。因此，当请求失败时，目标数据可能被完全删除，也可能只被部分删除。如果请求成功，则可以确认数据已被全部删除。若请求因网络或其他原因失败，建议您重新尝试操作。
   
2. Q：如果需要大批量调用前缀删除操作来清理历史数据，怎么使用比较合适？ A：首先，建议明确需要清理的历史数据范围。**强烈建议** 您先在测试环境中验证前缀删除的执行效果，以避免误删数据。另外，我们建议每日调用前缀删除操作的次数不超过2000次。短期内少量调用即可完成大量数据的清理，通常已能满足业务需求。在删除过程中，请持续监控业务的读取时延，如发现任何异常，请**立即停止**前缀删除操作。
   
 
