如果HDFS是只读的(或在基本场景中可附加),它如何维护有序索引?
它是否将其索引存储在HDFS或某个永久存储中?
[编辑]例如,假设我按此顺序添加了行F B A E.由于HDFS只能追加,我怀疑磁盘上行的顺序与插入顺序相同。但它如何维持其索引或保持其键的顺序? - 因为存储密钥的区域是一次写入的。
答案 0 :(得分:2)
HBase没有索引。它有序键(大致相当于SQL Server中的聚簇索引,或Oracle中的索引组织表,但没有b-tree),它们使用有序分区和带时间戳的写入进行维护。
当memstore达到某个(可配置的)大小时,HFiles仅刷新到磁盘,而你是对的 - 它们只写一次,之后不再修改。当HBase运行压缩时,多个文件从磁盘读取,合并,然后重写为一个较大(组合)的文件。然后删除较小的文件。
与此同时,Write Ahead Log(WAL)会定期写入HDFS(默认为10秒),并包含给定regionserver的有序编辑集。我相信WAL需要HDFS Append才能正常工作。
所有这些以及更多信息@我在HBase上的演示文稿:http://www.slideshare.net/trihug/intro-to-apache-hbase-by-chris-shain-of-tresata和http://outerthought.org/blog/465-ot.html以及此处http://outerthought.org/blog/417-ot.html