使用HBase保存经常更改的设置值是否合适?

使用HBase保存经常更改的设置值是否合适?,hbase,hdfs,Hbase,Hdfs,考虑到HBase中HDFS的一次写入限制,我觉得将HBase用作数据库来管理数千万用户经常更改的每个用户设置值是不合适的。例如,这里的设置值是布尔值,用于控制用户个人信息(如生日、电话号码和电子邮件地址)的可见性,以及每个朋友的标志,用于控制允许谁访问可见的个人信息。我担心,即使HBase将多个更改合并到HDFS的一次写入中,每次用户更改其设置值时,存储大小都会不断增加 然而,我不确定这是否真的不合适。我的理解可能是错误的。您能给我一些意见吗?HBase用于其文件系统的HDFS是一个仅附加的文件

考虑到HBase中HDFS的一次写入限制,我觉得将HBase用作数据库来管理数千万用户经常更改的每个用户设置值是不合适的。例如,这里的设置值是布尔值,用于控制用户个人信息(如生日、电话号码和电子邮件地址)的可见性,以及每个朋友的标志,用于控制允许谁访问可见的个人信息。我担心,即使HBase将多个更改合并到HDFS的一次写入中,每次用户更改其设置值时,存储大小都会不断增加


然而,我不确定这是否真的不合适。我的理解可能是错误的。您能给我一些意见吗?

HBase用于其文件系统的HDFS是一个仅附加的文件系统,这意味着文件的任何部分都不会被过度写入。新的更改被打包在旧更改的基础上,很像CouchDB

但是,与CouchDB不同,HBase管理自己的拆分和压缩

重要的是要强调,主要压缩对于StoreFile清理是绝对必要的,唯一的变体是它们发生的时间。它们可以通过HBase外壳或通过HBaseAdmin进行管理

在压缩过程中,旧数据将被释放,空间将被释放

您可能应该将频繁更改的数据分离到它自己的列族中,或者启用压缩。不幸的是,在这个时候,刷新是在全球范围内完成的,而不是按列族完成的,但是正在解决这个问题


我想直接回答您的问题,是的,HBase可以存储频繁修改的数据。只要确保有人仔细阅读,并根据您的情况做出正确的决定。

HBase用于其文件系统的HDFS是一个仅附加的文件系统,这意味着文件的任何部分都不会被过度写入。新的更改被打包在旧更改的基础上,很像CouchDB

但是,与CouchDB不同,HBase管理自己的拆分和压缩

重要的是要强调,主要压缩对于StoreFile清理是绝对必要的,唯一的变体是它们发生的时间。它们可以通过HBase外壳或通过HBaseAdmin进行管理

在压缩过程中,旧数据将被释放,空间将被释放

您可能应该将频繁更改的数据分离到它自己的列族中,或者启用压缩。不幸的是,在这个时候,刷新是在全球范围内完成的,而不是按列族完成的,但是正在解决这个问题


我想直接回答您的问题,是的,HBase可以存储频繁修改的数据。只需确保有人仔细阅读,并根据您的情况做出正确的决定。

要进一步阐述Jacob的答案,了解HBase为什么适合经常变化的价值观,需要了解HBase的方法

与使用B+树和就地更新语义的典型关系数据库不同,对HBase的所有写入都被视为带时间戳的附件。对于您所做的每一次PUT,无论是在RDBMS语言中插入新值,还是在RDBMS land中更新现有密钥,都会发生两件事:

它被写入预写日志WAL,这样,如果机器在下一次文件刷新之前停机,您就不会丢失数据;和 它被插入到内存中区域数据的排序表示中,这非常快,即使它已排序,因为它在内存中。 下一次当内存中有足够的新内容来保证它时,内存中的内容会被刷新到磁盘上,这同样是非常快的,因为它已经被排序了。而且,根据您在表上使用的设置,例如,是否要保留大量以前的版本,是否要保留已删除的值等,旧版本的值也可能在刷新时立即清除


然而,无论是哪种情况,很明显,随着时间的推移,单个值的不同版本可能存放在多个存储文件中,并且一次读取将必须命中多个存储文件。这就是压缩的作用所在:将多个存储文件合并为一个文件,这样读操作就不必这样做。

要对Jacob的答案进行一点扩展,理解HBase为什么适用于经常更改的值需要理解压缩的方法

与使用B+树和就地更新语义的典型关系数据库不同,对HBase的所有写入都被视为带时间戳的附件。对于您所做的每一次PUT,无论是在RDBMS语言中插入新值,还是在RDBMS land中更新现有密钥,都会发生两件事:

它被写入预写日志WAL,这样,如果机器在下一次文件刷新之前停机,您就不会丢失数据;和 它被插入到内存中区域数据的排序表示中,这是非常快的,即使它是 排序,因为它在内存中。 下一次当内存中有足够的新内容来保证它时,内存中的内容会被刷新到磁盘上,这同样是非常快的,因为它已经被排序了。而且,根据您在表上使用的设置,例如,是否要保留大量以前的版本,是否要保留已删除的值等,旧版本的值也可能在刷新时立即清除


然而,无论是哪种情况,很明显,随着时间的推移,单个值的不同版本可能存放在多个存储文件中,并且一次读取将必须命中多个存储文件。这就是压缩的作用:将多个存储文件合并成一个文件,这样读取就不必这样做。

用好的指针回答这个问题非常有用。非常感谢你!顺便说一句,我听说Facebook修改了HDFS,添加了“附加”功能供其使用。修改是否已并入HDFS的主流?很抱歉,这是一个初学者的问题。根据这个问题,它在08年被合并到主干中。这是一个非常有用的答案,有很好的指针。非常感谢你!顺便说一句,我听说Facebook修改了HDFS,添加了“附加”功能供其使用。修改是否已并入HDFS的主流?很抱歉这个初学者的问题。根据这个问题,它在'08年被合并到主干中。谢谢你的详细解释。我很幸运能从你们专家那里得到答案!谢谢你的详细解释。我很幸运能从你们专家那里得到答案!