HBase Versus RDBMS

HBase是分布式的面向列的数据存储系统,基于HDFS,提供Hadoop不具备的随即读写。
它的的设计专注于在横向和纵向的表扩展,可以达到数十亿行,数百万列的规模,可以水平分区并在数千个结点自动复制。
表的设计模式直接映射物理存储。

典型的RDMS是固定模式,面向行且具有复杂SQL查询的引擎,可以轻松建立索引,执行复杂的join和count、sum、sort、group等。
MySQL,innodb最大列数限制为1024,有些为4096

RDBMS适用于中小型的应用,如果需要扩展数据集或者并发读写,就会遇到巨大的性能问题和内在的分布式困难。
RDBMS的扩展需要涉及到打破Codd的规则和损失部分ACID限制,也就损失了那些使得RDBMS便利的特性。

RDBMS

ACID(数据库事务正确执行的四个基本要素的缩写)

  • 如果读的请求太多

    添加Redis

  • 如果写的请求过多

    购买服务器垂直扩展

  • 太多的JOIN

    Denormalize数据减少JOIN,比如增加冗余字段

  • 运算变慢

    停止作任何服务器端的计算

  • 一些查询依然很慢

    预先实现一些复杂的查询

  • 写入变慢

    删除二级索引

HBase

  • 没有真正的索引

    行和列按顺序存储,插入性能不受表的大小影响

  • 自动分区

    自动分成regions并distribute到可用结点

  • 容错能力

  • 批量操作

    MapReduce的集成允许对数据进行完全并行的分布式作业