我正在尝试评估是否可以在HBase或Bigtable中的单个行上设置TTL。
我知道Cassandra允许在插入时使用TTL。我想看看在HBase和Google Cloud Bigtable中是否可以做到这一点。
INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
答案 0 :(得分:3)
Bigtable中没有对TTL细粒度的本地支持。但是,有两种通用的模拟它们的方法,但需要权衡取舍:
请始终记住,Bigtable垃圾回收是异步的,因此值在其TTL之后不会立即消失。如果您不想读取TTL值,则需要在读取请求中发送适当的时间范围。在第一种方法中,这将比现在晚。在第二个中,它将晚于(现在为-X)。
这两种方法都牺牲了将实时时间戳附加到值上的所有有用属性,包括可调试性和易于版本控制。您可以通过自己将实时时间戳记写到单独的列中来重新获得一些信息,但是总的来说,这意味着当您还仅保留最新值时,它们会发挥最佳作用。
答案 1 :(得分:0)
我本人从未使用过/测试过以下内容,这是从未需要的,但请查看以下内容:
在单个突变级别(即创建单行),请尝试使用:
Put.setTTL(long)
要在给定表的“列族”级别上应用此方法,请在创建表时尝试以下操作:
ColumnFamilyDescriptorBuilder.setTimeToLive(int)
根据我在相同设置下对其他HBase功能的经验,我可以想象您可以使用表创建时间为给定的列族设置某种全局/默认TTL,然后根据实际情况对其进行调整如上所示,放置水平仪。
以上是Java语言,但是在插入行或手动创建新表时,您也可以从HBase Shell中进行操作。