mysql和hbase对⽐学习 关系数据库⼤家都不陌⽣,使⽤⼀个RDBMS和HBase例⼦来说明。
RDBMS例⼦:
数据:
对⽐:
那HBASE是什么样的了?
表设计:
数据:
HBASE表的基本概念:
Row key:⾏主键, HBase不⽀持条件查询和Order by等查询,读取记录只能按Row key(及其range)
或全表扫描,因此Row key需要根据业务来设计以利⽤其存储排序特性(Table按Row key字典序排序如1,10,100,11,2)提⾼性能。
Column Family(列族):在表创建时声明,每个Column Family为⼀个存储单元。在上例中表有两个列族:article和author。
Column(列):HBase的每个列都属于⼀个列族,以列族名为前缀,如列article:title和article:content属于article列族。Column不⽤创建表时定义即可以动态新增,同⼀Column Family的Columns会聚在⼀个存储单元上,并依Column key排序,因此设计时应将具有相同I/O特性的Column设计在⼀个Column Family上以提⾼性能。同时这⾥需要注意的是:这个列是可以增加和删除的,这和我们的传统数据库很⼤的区别。所以他适合⾮结构化数据。
Timestamp:HBase通过row和column确定⼀份数据,这份数据的值可能有多个版本,不同版本的值按照时间倒序排序,即最新的数据排在最前⾯,查询时默认返回最新版本。
Value:每个值通过4个键唯⼀索引,tableName+RowKey+ColumnKey+Timestamp=>value,例如上例中
{tableName=’blog’,RowKey=’1’,ColumnName=’author:nickname’, Timestamp=’ 1317180718830’} 索引到的唯⼀值是“yedu”。
存储类型:
TableName 是字符串
RowKey 和 ColumnName 是⼆进制值(Java 类型 byte[])
Timestamp 是⼀个 64 位整数(Java 类型 long)
hbase属于什么数据库 value 是⼀个字节数组(Java类型 byte[])。
HBase使⽤场景:
半结构化或⾮结构化数据:对于数据结构字段不够确定或杂乱⽆章很难按⼀个概念去进⾏抽取的数据适合⽤HBase。以上⾯的例⼦为例,当业务发展需要存储author的email,phone,address信息时RDBMS需要停机维护,⽽HBase⽀持动态增加。
记录⾮常稀疏:RDBMS的⾏有多少列是固定的,为null的列浪费了存储空间。⽽如上⽂提到的,HBase为null的Column不会被存储,这样既节省了空间⼜提⾼了读性能。
多版本数据:上⽂提到的根据Row key和Column key定位到的Value可以有任意数量的版本值,因此对
于需要存储变动历史记录的数据,⽤HBase就⾮常⽅便了。⽐如上例中的author的Address是会变动的,业务上⼀般只需要最新的值,但有时可能需要查询到历史值。
超⼤数据量:当数据量越来越⼤,RDBMS数据库撑不住了,需要分库分表。⼤数据的HBase就简单了,只需要加机器即可,HBase会⾃动⽔平切分扩展,跟Hadoop的⽆缝集成保障了其数据可靠性(HDFS)和海量数据分析的⾼性能(MapReduce)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论