更新时间:2025-08-04 GMT+08:00
分享

如何使用前缀删除功能

GeminiDB HBase接口的前缀删除功能支持按行键删除指定前缀的数据,生效速度快,删除效率高,有效简化了必须先扫描再精确删除的繁琐流程。相较于Apache HBase只支持单行删除,GeminiDB HBase接口的前缀删除更为方便快速,在范围数据清理,历史数据淘汰等场景有巨大优势。

错误使用此功能可能会对数据产生重大影响,请在使用该功能前确认已经完全了解以下使用规范。

使用规范(必读)

前缀删除返回成功时,内部行为是标记删除,数据并没有立刻被删除,数据库需要在后台数据存储过程中逐步淘汰已被标记删除的数据,同时清除范围删除产生的范围墓碑。因此,为避免影响数据库性能,客户使用该功能时,需要遵循如下约定:

  • 禁止短时间内针对单一数据范围进行多次重复范围删除与写入。
  • 禁止短时间内进行大量范围删除。
  • 尽量避免扫描范围包含已经范围删除的数据。
  • 提前验证范围删除,防止误删大量数据的意外出现。

典型违反使用规范的行为

  • 对10亿条特定数据范围的key,一天内进行5万次前缀删除,过程中夹杂大量同范围写入。
  • 一天内进行10万次或者更多次大范围前缀删除。
  • 执行未经验证的短前缀删除,例如误删 '0' 或者'a'前缀的数据,数据库中匹配到的大量数据都会被删除。

若使用前缀删除时严重违反使用规范,将会出现如读时延升高、请求失败、影响业务正常读写等严重后果,请客户及时关注业务情况,在执行前缀删除操作前请务必在测试环境验证删除效果。

如果在大批量调用前缀删除的过程中,业务出现上述问题,请立刻停止使用前缀删除功能并咨询专家。您可以在管理控制台右上角,选择“工单 > 新建工单”,联系客服进行处理。

使用指导

客户可以在业务请求中通过添加额外属性,标记Delete请求为前缀删除请求。在标记该请求为前缀删除请求后,只有key参数会作为前缀删除中的匹配前缀生效,其他所有参数将不再生效,如指定列,指定qualifier等。 该前缀匹配成功的数据都会被立刻删除。

目前前缀删除只支持通过Java HBase Client调用,请参考如下Java代码,以下代码是调用范围删除的关键步骤代码,执行该代码将删除所有以‘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次。短期内少量调用前缀删除已经可以删除大量数据,一般情况下能满足您的要求。同时需要在删除过程中持续观察业务读时延,如果有任何异常,请立刻停止前缀删除操作。

相关文档