一:Hbase 与Oracle比较,为什么性能会那么好? Hbase是大大不同于以前的关系数据库,它是按照Bigtable来开发的,套用一个Bigtable的定义就是: A Bigtable is a sparse, distributed, persistent multidimensional sorted map. Bigtable是一个稀疏的,分布
一:Hbase 与Oracle比较,为什么性能会那么好?
Hbase是大大不同于以前的关系数据库,它是按照Bigtable来开发的,套用一个Bigtable的定义就是:
A Bigtable is a sparse, distributed, persistent multidimensional sorted map.
Bigtable是一个稀疏的,分布的,持续多维度的排序映射数组。
1.数据类型,Hbase只有简单的字符串类型,所有类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型选择和存储方式。
2.数据操作,Hbase操作只有很简单的插入、查询、删除、清空等,表和表之间是分离的,没有复杂的表和表之间的关系,所以也不能也没有必要实现表和表之间的关联等操作。而传统的关系数据通常有各种各样的函数、连接操作。
3.存储模式,Hbase是基于列存储的,每个列族都有几个文件保存,不同列族的文件是分离的。传统的关系数据库是基于表格结构和行模式保存的。
4.数据维护,Hbase的更新正确来说应该不叫更新,而且一个主键或者列对应的新的版本,而它旧有的版本仍然会保
留,所以它实际上是插入了新的数据,而不是传统关系数据库里面的替换修改。
5.可伸缩性,Hbase和Bigtable这类分布式数据库就是直接为了这个目的开发出来的,能够轻易的增加或者减少(在硬件错误的时候)硬件数量,而且对错误的兼容性比较高。而传统的关系数据库通常需要增加中间层才能实现类似的功能。
二:HBase里面将cache分为三类:
1. InMemory:希望其内容能够常驻memory
2. Single:被访问一次的block放入这里
3. Multi:被访问不止一次的block放入这里
InMemory容易理解,在系统中的一些meta数据会被经常的访问到,同时size又比较小,让其能够常驻内存而不因为内存size的限制而被替换掉是非常合理的法。
Single和Multi的出现是为了避免scan的影响,试想如果cache的size配置为100M,而一次scan的数据大小为200M,则所有cache中的数据都将被remvoed,但是fill进cache的block却永不会被访问第二遍(scan的语义),这是多么的浪费。
访问hbase table中的行,只有三种方式:(1.1) 通过单个row key访问; (1.2) 通过row key的range ;(1.3) 全表扫描
HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》,HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapRedu
ce来处理HBase中的海量数据,利用Zookeeper作为协同服务。
1. 简介
HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。
2. HBase的表结构
HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family)。
Row Key | column-family1 | column-family2 | column-family3 | |||
column1 | column2 | column1 | column2 | column3 | column1 | |
key1 | ||||||
key2 | ||||||
key3 |