
HBase 其实就是个能存海量数据、还能随便加机器的数据库。先说说它跟传统数据库有啥不一样。像 MySQL 那种得先设计好表长啥样有哪些列每列存什么类型少一列都不行改起来还费劲。但 HBase 不这样它存数据是按“列族”来的——可以把列族理解成一个文件夹里面有啥文件列可以随时往里加不用提前规划好。某一行有 3 列另一行有 50 列完全没问题空着的地方也不占空间。这个特性在真实业务里特别有用比如用户的画像数据有的人有十几项属性有的人只有两三项用 HBase 存就很省事。再就是它能存的东西特别多。单表几十亿行、几百万列它都扛得住。为啥因为它是跑在一堆普通电脑上的数据被切成一块一块的分散到不同机器上。数据量涨了就加机器不用停机数据能自动挪过去。这种水平扩展的能力对传统数据库来说几乎不可能做到或者成本高得吓人。它找数据的方式也跟别人不一样。每一行都必须有一个“行键”相当于给每一条数据起个唯一的名字。你查数据的时候就给这个行键它直接给你对应的整行数据速度快到飞起。但代价就是你要是想按别的条件查比如“找出所有年龄大于 20 岁的”就费劲了因为它不支持这种灵活查询。所以用 HBase 之前你得想清楚你的业务是不是主要靠 key 来查数据如果是那就很合适。还有个挺有意思的事——它喜欢“记旧账”。你在 HBase 里改一条数据它不会把旧的删掉而是把新的存进去同时给这条数据打个时间戳。这样你随时可以回去看这条数据以前长啥样像历史快照一样。你可以设置保留最近几个版本也可以保留全部看业务需要。做数据分析或者审计的时候这个功能非常实用。那万一机器突然坏了怎么办它有个叫 WAL 的机制。说白了就是你每次写数据之前它先在硬盘上记一笔“我要写这个了”然后再正式往里写。要是写到一半停电了机器重启之后一看那个日志就知道刚才有啥没写完重放一遍就恢复了。因为日志是顺序写的速度很快对性能影响其实没那么大。再说它的结构吧就是三个角色Master 是个管事的管着表怎么分区、哪个 RegionServer 挂了需要处理RegionServer 是真正干活的存数据、查数据都靠它ZooKeeper 是个帮忙指路的客户端一来就问它“我要的数据在哪个 RegionServer 上”然后就自己去跟那个 RegionServer 打交道了不用每次都麻烦 Master。Master 挂了一个ZooKeeper 会从备用的里面选一个顶上所以不会单点失效。所以说HBase 特别适合那种数据量极大、格式不固定、主要靠 key 查的场景。像什么用户操作日志、推荐系统的特征数据、物联网设备上报的记录用 HBase 就很顺手。但它也有短板——不支持多表关联查询不支持事务你要是需要做复杂报表或者涉及钱的业务就别用它了老老实实用 MySQL 或者别的。反正用 HBase 这事你得先想明白你的场景对不对路。场景对了它就是一把锋利的刀场景不对你硬往上套只会给自己找麻烦。