考虑到HBase基础的HDFS的一次写入约束,听起来不适合使用HBase作为数据库来管理经常更改的 ,每用户设置值数千万用户。这里的设置值是,例如,布尔值,用于控制用户个人信息(例如生日,电话号码和电子邮件地址)的可见性以及每个朋友的标志,以控制谁被允许访问个人信息的可见部分。我担心每次用户更改设置值时存储大小都会增长和增长,即使HBase将多个更改合并到一个写入HDFS上也是如此。
但是,我不确定这是不是真的不合适。我的理解可能是错的。你能给我评论一下吗?
答案 0 :(得分:3)
然而,与CouchDB不同,HBase管理自己的分裂和压缩。
重要的是要强调,主要的压缩对于StoreFile清理是绝对必要的,唯一的变体是它们何时发生。它们可以通过HBase shell或HBaseAdmin进行管理。
在压缩过程中,您的旧数据将被释放,空间将被释放。
您可能应该将经常更改的数据分成其自己的列族,并且可能会打开压缩。不幸的是,此时,刷新是在全局进行的,而不是按列系列进行,但HBase-3149正在解决这个问题。
我想直接回答你的问题,是的,HBase可以存储经常修改的数据。只要确保有人仔细阅读configurations page并根据您的情况做出正确的决定。
答案 1 :(得分:2)
为了扩展Jacob的答案,理解为什么HBase对经常变化的值有好处,需要理解Log Structured Merge Trees的方法。
与典型的关系数据库(使用B +树和“就地更新”语义)不同,对HBase的所有写入都被视为带时间戳的附加。对于你所做的每一个PUT,无论它是一个新值(“INSERT”,RDBMS语言)还是现有键(“UPDATE”,在RDBMS中),都会发生两件事:
下一次内存中有足够的新东西来保证它,内存中的东西会被刷新到磁盘上(由于它已经排序,因此速度非常快)。并且,根据您在表格中使用的设置(例如,您是否希望保留大量过去版本,是否要保留已删除的值等),旧版本的值可能会在刷新时立即清除时间也是如此。
在任何一种情况下,很明显,随着时间的推移,单个值的不同版本可能会存放在多个存储文件中,并且单个读取将需要访问许多存储文件。这就是压缩的结果:将许多商店文件合并为一个,这样读取就不必这样做了。