HBase的数据存储方式对于实现自己的数据库产品有借鉴和指导意义,因此总结一下,以作备忘。
HBase在文件系统中存储数据,而为了使系统具备良好的扩展性和可用性,一般使用HDFS作为该文件系统。
HBase的基本存储单元是Key-Value对,其中Key由行键(Row Key)、列族名称、列修饰符、版本号构成。整个HBase存储系统可以认为是维护了一个大型的Key-Value对集合。理所当然地,我们认为HBase中的基本操作是针对Key-Value对的PUT、GET、DELETE操作。HBase确实支持这些基本操作。但是,在实际的应用中,使用这些基本操作通常不是频繁用例,而更多的用例是以行(Row)为单位进行的PUT、GET、DELETE、SCAN操作。为此,HBase自动完成将一行拆分成多个Key-Value对或将属于同一行的各个Key-Value对封装成一行的工作。
HBase维护的各个Key-Value对的集合总是按Key有序的,这种集合包括磁盘上的StoreFile和内存中的MemStore。MemStore存在于内存,且其中的Key-Value对是动态插入。通过实施按序插入可以保证MemStore总是有序。StoreFile虽然存在于磁盘,但是它们是只读的,在某次需要将MemStore写到磁盘时被创建,以最优B+树(由于数据是现成的,因此可以做到最优)的数据组织方式存储了写到磁盘的MemStore,因此也总是有序的。
对HBase状态的更新总是通过向MemStore中添加新的Key-Value对进行,当然在MemStore满或其他Flush事件出现时,需要将MemStore写到磁盘上的StoreFile中。若是PUT一个Key-Value对,可以将该Key-Value对直接插入MemStore;若是DELET