TDSQL Boundless 过期数据删除

这篇说说HBase列族的数据版本控制与生命周期管理,涵盖最大版本数、最小版本数和TTL的配置机制,并给出Java代码示例。建议根据应用需求调整参数,避免版本数过高导致存储膨胀。 最大版本数:控制每个单元格保留的历史版本数,默认1,旧版本在Major Compaction时删除。 最小版本数:与TTL结合确保保留指定版本数,仅在列族启用TTL时有效且须小于最大版本数。 TTL:设置数据存活时间,自动删除过期数据,若最小。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

系统提供了强大的数据版本控制和生命周期管理功能,主要包括:

·最大版本数:控制每个单元格保留的历史版本数量。

·最小版本数:与 TTL 结合使用,确保在数据过期时保留指定数量的版本。

·Time To Live (TTL):为列族设置数据存活时间,自动删除过期数据。

注意:当前版本仅支持 ColumnFamily 级别的 TTL/最大版本数/最小版本数,不支持 Cell 级别的 TTL/最大版本数/最小版本数。

一、最大版本数

·作用:通过 HColumnDescriptor 设置每个列族中每个单元格保留的最大版本数。

·默认值:1

·机制:系统不会覆盖数据,而是通过时间戳追加新版本。旧版本会在 Major Compaction 时被删除。

·建议:请根据应用需求调整最大版本数。不建议将最大版本数设置过高(如数百),否则会导致存储文件过大。

二、最小版本数

·作用:通过 HColumnDescriptor 设置每个列族中每个单元格保留的最小版本数。

·默认值:0(表示禁用)。

·使用场景:与 TTL 结合使用,配置如“保存最近 T 分钟的数据,最多 N 个版本,但至少保留 M 个版本”(M < N)。

·限制:仅在列族启用 TTL 时有效;必须小于最大版本数。

三、TTL

·功能说明

·作用:为列族设置 TTL( Time To Live ) (以秒为单位),HBase 会在数据过期后自动删除该列族中的所有行,包括当前版本和旧版本。

·时间基准:TTL 时间以 UTC 时间为准。

·清理机制:在 Minor Compaction 过程中,HBase 会删除仅包含过期数据的存储文件。

·配置参数

MIN_VERSIONS:如果设置了最小版本数(MIN_VERSIONS)为非零值,TTL 功能将失效。

四、配置示例

·建表时设置 ColumnFamily 的 TTL/min/maxVersions 属性

TableName tableName = createTDSQLTableName("ht1");byte[] CF1 = Bytes.toBytes("cf1");byte[] CF2 = Bytes.toBytes("cf2");// 创建表描述符TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(tableName);// 配置第一个列族:TTL=2秒,最小版本=2,最大版本=5tdb.setColumnFamily( ColumnFamilyDescriptorBuilder.newBuilder(CF1) .setTimeToLive(2) .setMinVersions(2) .setMaxVersions(5) .build());// 配置第二个列族:TTL=3秒,最小版本=4,最大版本=10 tdb.setColumnFamily( ColumnFamilyDescriptorBuilder.newBuilder(CF2) .setTimeToLive(3) .setMinVersions(4) .setMaxVersions(10) .build());// 构建表并创建try (Admin admin = connection.getAdmin()) { admin.createTable(tdb.build());}

·修改 ColumnFamily 的 TTL/min/maxVersions 属性

TableName tableName = TableName.valueOf("ht1");byte[] CF2 = Bytes.toBytes("cf2");try (Admin admin = connection.getAdmin()) { // 获取当前列族配置 ColumnFamilyDescriptor currentDesc = admin.getDescriptor(tableName) .getColumnFamily(CF2); // 基于现有配置创建新配置(保留其他设置) ColumnFamilyDescriptor newDesc = ColumnFamilyDescriptorBuilder.newBuilder(currentDesc) .setTimeToLive(10) // 修改 TTL=10秒 .setMinVersions(2) // 修改最小版本=2 .setMaxVersions(5) // 修改最大版本=5 .build(); // 应用修改 admin.modifyColumnFamily(tableName, newDesc); System.out.println("列族配置更新成功");}

赞 (0)
上一篇 4天前
下一篇 4天前