

NoSQL 与 RDBMS 最大的分别是数据量和读写吞吐量的不同,数据布局和数据访问频率也不同,他们两个应用解决问题的本质也不一样,比如列存储可以快速查找的原因是列族的设计可以在每一次查询中大量减少磁盘 IO 和数据量的访问。NoSQL 很容易支持数据量达 PB 级别的数据,因为它的特性很容易支持分布式水平扩展;但 RDBMS 只能处理 TB+ 级别的数据,如果你的数据场景是要处理很多事务性数据 e.g. 更新和删除,那么还是优先选择关系型 RBDMS,因为NoSQL不太善于频繁的处理数据更新和删除,因为数据是分布在不同的节点上,还有数据是默认有三份副本,如果需要太量的更新操作,那么每台节点上的数据也有一并更新,这太太增加了解决方案的复杂性;NoSQL 遵从 CAP 和 BASE 理论,RDBMS 遵从 ACID 的理论。如果只有上千行和上百万行的数据,则用傅统会比较适合。
HBase 是以数据为中心,RDBMS 是以关系为数据,HBase 是 NoSQL 中的列存储,它有以下特点:强一致性读写,自动分片,HBase 通过 Region 分布在集群中,数据增加时,Region 会自动分割并重新分片。RegionServer 自动故障移取,HBase 支持 HDFS 之外的存储文件,HBase 通过 MapReduce 支持大并发处理,HBase 支持以 API 方式访问数据,HBase 以 Bloom Filters 和 Bloom Cache 对大量数据进行查询优化。HBase 适合场景是存在随机读写的埸景,每秒需要在 TB 级别数据上完成数以千计的操作,访问的操作的方式要简单、明确和直接,如果应用只是插入数据而且处理时需要读取全部数据。HBase 不支持二次索引、事务性数据、关联表的操作。HBase 的使用埸景:消息 (Message) 比如点赞,电商中的 SMS/ MMS,有随机读写的能力,局部数据进行 TopN 的查询、简单实体、图数据、指标。

HBase 在表中存储数据,而表数据最后存储在 HDFS 上,数据被分割成 HDFS 块 (Block) 存储在集群的多个节点上,以128G为一个 BlockSize;
HBase 是由 Column Family (列族),Column (列) 和 Row Key (行) 组成的,列族是列的一个集合,列族可以有任意数量的列,e.g. contactinfo:fname, contactinfo:lname 它也可以单独对每个列族进行存储属性优化,比如对 profilephoto 进行压缩存储。
HBase 每一行都有一个 RowKey 用于快速检索,来保证一行数据的完整性,每个 RowKey 就类似于 RDBMS 的主键,HBase 表是基于 RowKey 进行快速检索,行按照排序后进行存储,
HBase 底层磁盘上是按照 Column Family 分开进行存储。这样的好处是相对于行存,占用空间会很小;
HBase 中间的数据是存储在 Cell 中,而且 Cell 是有版本化的,可以自定义保留多少过版本,Cell 为空时不存储。

HBase采用Master/Slave架构搭建集群,它隶属于Hadoop生态系统,由以下类型节点组成:HMaster节点、HRegionServer节点、ZooKeeper集群,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等节点。

Zookeeper Quorum存储-ROOT-表地址、HMaster地址。HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-85738-2.html
伊拉克能打赢
重要的事说三遍