尝试了解HBase中的更新

尝试了解HBase中的更新,hbase,Hbase,我在下面的链接中看到,HBase不支持更新,这些更新表示HBase是一个“仅附加”存储 另外,我知道可以使用put命令更新HBase中的现有单元格值,只需遵循相同的语法并提及新值即可 例如,可以执行以下操作将city列的值从“Boston”更新为“Chicago”: put 'emp','row1','personal:city','Chicago' 当上一行为时: row1 column = personal:city, timestamp = 1418275907, value = B

我在下面的链接中看到,HBase不支持更新,这些更新表示HBase是一个“仅附加”存储

另外,我知道可以使用put命令更新HBase中的现有单元格值,只需遵循相同的语法并提及新值即可

例如,可以执行以下操作将city列的值从“Boston”更新为“Chicago”:

put 'emp','row1','personal:city','Chicago'
当上一行为时:

row1 column = personal:city, timestamp = 1418275907, value = Boston
在HBase中,可以为列族启用版本控制,并具有多个值,这些值可以具有相同的“行键+列族+列限定符”值。可以使用PUT创建或更新任何单元格的值。进行版本控制后,还可以访问以下帖子中提到的旧值:

基于这些,我有以下疑问:

  • 为什么说HBase不支持如上所示的更新(如上所示,城市值从“Boston”更新为“Chicago”)时的更新

  • HBase通过保留以前的版本来进行版本控制。保留以前的值的原因是什么

  • 谢谢

    为什么说HBase不支持更新,而可以如上所示进行更新

    HBase确实不明确支持更新操作。像您描述的那样的更新只是put操作的结果

    HBase通过保留以前的版本来进行版本控制。保留以前的值的原因是什么

    HBase仅在您要求时才保留多个版本的记录。默认情况下,它将只保留记录的一个版本,这与未版本化的存储一样重要。get和scan操作通常只获取记录的最新版本。更多关于它

    比方说,我们有一个空表,其中有一个列族,配置为保留记录的最后3个版本。我们在不同的时间戳t=x执行3次put操作

    put 'a','myrow','d:mood','happy' // at t=1
    put 'a','myrow','d:mood','sad'   // at t=2
    put 'a','myrow','d:mood','bored' // at t=3
    
    此时,rowkey myrow对应的HFile中存储的数据看起来与此类似(仅作说明)

    现在,如果您对rowkey myrow执行get操作,那么默认情况下它将只获取d:mood=pored,因为它具有最高的时间戳值,因此是记录的最新版本。我们可以看到,我们的put操作没有更新旧记录。这就是他们说HBase不支持更新的意思。只有新的记录被创建,从而给我们一种错觉,即记录正在被我们的put操作更新。在这种情况下,如果我们继续对同一行键执行另一个put操作,记录的最旧版本将无效(因为我们只配置了3个最大版本来保留),并将在下一个压缩周期中删除

    为什么说HBase不支持更新,而可以如上所示进行更新

    HBase确实不明确支持更新操作。像您描述的那样的更新只是put操作的结果

    HBase通过保留以前的版本来进行版本控制。保留以前的值的原因是什么

    HBase仅在您要求时才保留多个版本的记录。默认情况下,它将只保留记录的一个版本,这与未版本化的存储一样重要。get和scan操作通常只获取记录的最新版本。更多关于它

    比方说,我们有一个空表,其中有一个列族,配置为保留记录的最后3个版本。我们在不同的时间戳t=x执行3次put操作

    put 'a','myrow','d:mood','happy' // at t=1
    put 'a','myrow','d:mood','sad'   // at t=2
    put 'a','myrow','d:mood','bored' // at t=3
    
    此时,rowkey myrow对应的HFile中存储的数据看起来与此类似(仅作说明)


    现在,如果您对rowkey myrow执行get操作,那么默认情况下它将只获取d:mood=pored,因为它具有最高的时间戳值,因此是记录的最新版本。我们可以看到,我们的put操作没有更新旧记录。这就是他们说HBase不支持更新的意思。只有新的记录被创建,从而给我们一种错觉,即记录正在被我们的put操作更新。在这种情况下,如果我们继续在同一行键上执行另一个put操作,记录的最旧版本将无效(因为我们只配置了3个最大版本来保留),并将在下一个压缩周期中删除。

    谢谢。请理解,HBase不支持显式更新,而只支持使用put。它被设计为不明确支持它的原因是什么?了解默认情况下它保留1个版本,并且可以配置为保留更多版本,默认情况下get将获取具有最新时间戳的版本。在什么情况下需要保留多个版本?Upvoting the answer.HBase设计为在HDFS上运行,HDFS在设计上不支持存储块的更新操作。当您需要记录的历史视图时,保留记录的多个版本可能是有利的。接受答案。Thank.Thank.了解HBase不支持显式更新,只支持使用put。它被设计为不明确支持它的原因是什么?了解默认情况下它保留1个版本,并且可以配置为保留更多版本,默认情况下get将获取具有最新时间戳的版本。在什么情况下需要保留多个版本?Upvoting the answer.HBase设计为在HDFS上运行,HDFS在设计上不支持存储块的更新操作。当您需要记录的历史视图时,保留记录的多个版本可能是有利的。接受答案。谢谢