从Hbase shell理解列式存储
列存储和行存储在理解上的差别挺大,特别是在非常数据行存储之后。
在行存储中,每张表的结构是固定的,某一列可以没有值但是这一列是必须在的。那么可以理解行存储的数据是结构化的。
但是列存储确有每行的数据却是可以不一致的。
那么,以Hbase来理解列存储。
知识点一
在Hbase中也有表的概念,在定义表时需要指定列族名,每个表可以有多个列族。
而每个列族中在写数据时,可以动态的指定列名,每个列族中可以包含多列。
从这两个操作可以看出Hbase对于数据的组合形式的管理是非常的松散的。可以说完全的交给用户了。所以,Hbase适合存储半结构化数据或者非结构化数据。
知识点二
在向Hbase中写入数据时,需要指定RowKey。我认为RowKey和行存储结构中的Row的概念不一样。在行存储结构中每一次数据的写入都是一行数据。但是Hbase中多次写入可以表示写一行数据。
而RowKey其实是一种逻辑行,用来表示多次写入的数据,其实一行的数据。
知识点三
存储数据是为了查询。所以,只要能按照用户的需要查询到相应的数据即可,而不是非得要是一张二维表。
其他
建议按照Hbase官方文档,运行Hbase shell中的命令操作一下,有助于加深理解。附带官方文档链接:http://hbase.apache.org/book.html#quickstart