Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何在Hbase行和Bigtable行上设置TTL_Google Cloud Platform_Hbase_Ttl_Bigtable_Google Cloud Bigtable - Fatal编程技术网

Google cloud platform 如何在Hbase行和Bigtable行上设置TTL

Google 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; 我自己没有使用/测试过以下内容,这是从来没有需要过的,但请查看以

我试图评估是否可以在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;

我自己没有使用/测试过以下内容,这是从来没有需要过的,但请查看以下内容:

在单个突变级别(即创建一行),尝试使用:

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)
请始终记住,Bigtable垃圾收集是异步的,因此值不会在TTL之后立即消失。如果不想读取TTL'd值,则需要在读取请求中发送适当的时间范围。在第一种方法中,这可能比现在晚。在第二种情况下,它将是(现在-X)之后的任何东西

这两种方法还牺牲了将真实时间戳附加到值的所有有用特性,包括可调试性和易于版本控制。您可以通过自己将真实时间戳写入一个单独的列来重新获得一些时间戳,但一般来说,这意味着当您也只保留最新的值时,这些工作效果最好