Google cloud platform 如何在Hbase行和Bigtable行上设置TTL
我试图评估是否可以在HBase或Bigtable中的单个行上设置TTLGoogle cloud platform 如何在Hbase行和Bigtable行上设置TTL,google-cloud-platform,hbase,ttl,bigtable,google-cloud-bigtable,Google Cloud Platform,Hbase,Ttl,Bigtable,Google Cloud Bigtable,我试图评估是否可以在HBase或Bigtable中的单个行上设置TTL INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10; 我知道Cassandra允许在插入时使用TTL。我想知道在HBase和Google Cloud Bigtable中是否也可以做到这一点 INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10; 我自己没有使用/测试过以下内容,这是从来没有需要过的,但请查看以
INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
我知道Cassandra允许在插入时使用TTL。我想知道在HBase和Google Cloud Bigtable中是否也可以做到这一点
INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
我自己没有使用/测试过以下内容,这是从来没有需要过的,但请查看以下内容: 在单个突变级别(即创建一行),尝试使用:
Put.setTTL(long)
要在给定表的列族级别应用此选项,请在创建表时尝试以下操作:
ColumnFamilyDescriptorBuilder.setTimeToLive(int)
根据我在相同设置下使用其他HBase功能的经验,我认为您可以使用表创建时间为给定列系列设置某种全局/默认TTL,但如果需要,可以在单个Put级别进行调整,如上所示
以上是Java语言,但在插入行或手动创建新表时,您也可以从HBase shell执行此操作。Bigtable中不支持细粒度TTL。但有两种常用的方法来模拟它们,并进行不同的权衡:
- 如果您正在设置一个新的空表,并计划在每次写入时设置一个TTL,则可以将列族的最大年龄设置为非常小的值,例如1s,并将每个新值的写入时间戳显式设置为您希望它过期的时间。
- 赞成:这种方法使事情更容易理解,因为时间戳具有明显的语义,不需要咀嚼
- 缺点:如果您忘记设置TTL,而是使用默认的服务器时间戳,则该数据将立即被视为过期,并将在下次压缩时删除
- 缺点:如果您尝试将此应用于一个预先存在的表,则同样适用:任何使用真实时间戳的现有数据都将被删除
- 缺点:对于任何一个同时过期的给定单元格,不可能有多个值
- 如果希望默认TTL为X,然后可以将其覆盖,请将列族上的设置为“正常”。写入可以通过将时间戳设置为(real_timestamp-X+Y)将TTL调整为Y。
- 赞成:这种方法可以安全地应用于预先存在的表
- 赞成:如果你忘了设置TTL,就不会有陷阱
- 缺点:时间戳根本无法解释,因为任何给定的单元格都可能有一个真实的时间戳,或者可能有一个模拟的TTL覆盖时间戳
- 缺点:与上述内容相关,使用默认TTL和重写TTL的值之间可能存在意外的时间戳冲突,这些TTL被分开写入(Y-X)