我想评估HBase或Bigtable是否可以在单个行上设置TTL。
我知道Cassandra允许在插入时使用TTL。 我想知道HBase和Google Cloud Bigtable是否也有相同的功能。
INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
我想评估HBase或Bigtable是否可以在单个行上设置TTL。
我知道Cassandra允许在插入时使用TTL。 我想知道HBase和Google Cloud Bigtable是否也有相同的功能。
INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
Bigtable不支持细粒度TTL的本地支持。但是有两种常见的模拟方法,具有不同的权衡:
始终记住,Bigtable垃圾回收是异步的,因此值不会在其TTL之后立即消失。如果您不想读取TTL值,则需要在读取请求中发送适当的时间范围。在第一种方法中,这将是晚于现在的任何时间。在第二种方法中,它将是晚于(现在 - X)的任何时间。
这两种方法都牺牲了将真实时间戳附加到值的所有有用属性,包括调试性和易于版本控制。您可以通过自己编写真实时间戳来恢复其中一些,但通常情况下,这意味着仅保留最新值时效果最好。
我自己从未使用/测试过以下内容,因为从未需要,但请看以下内容:
在单个变异级别(即创建单个行)上尝试使用:
Put.setTTL(long)
要在给定表的列族级别上应用此操作,请在创建表时尝试以下操作:
ColumnFamilyDescriptorBuilder.setTimeToLive(int)
根据我在使用相同设置的其他HBase功能方面的经验,我想您可以使用表创建时间来设置某种全局/默认TTL以供给定列族使用,但如果需要,在个别Put级别上进行调整,如上所示。
以上是Java代码,但您也可以在插入行或手动创建新表时从HBase shell中执行此操作。