前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >瞎扯 Hbase ,很多人都理解错了

瞎扯 Hbase ,很多人都理解错了

作者头像
哒呵呵
发布2020-02-26 15:44:48
7260
发布2020-02-26 15:44:48
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

今天扯一下 Hbase ,我对 Hbase 的了解起源于两篇文章Understanding HBase and BigTable和《李逵麻子,李鬼坑人--BigTable的数据模型》;这两篇本质上还是一篇文章,《李逵麻子,李鬼坑人--BigTable的数据模型》类似于Understanding HBase and BigTable的中文版讲解。还好的是我是先读的这两篇文章,再去看 Hbase 的官方文档和使用 Hbase ,否则真有可能被 Hbase 的概念给糊弄进去了。要知道,对一个软件或者工具,要想深刻理解和使用它,第一印象很重要,它决定你学习的进度,要是弄错了,学习的时候就会很痛苦,怎么也无法理解这个工具怎么设计的。

假设先抛开那两篇文章,看看一般的中文文章怎么介绍 Hbase 的。

HBase(Hadoop Database),是一个基于 Google BigTable 论文设计的高可靠性、高性能、可伸缩的分布式存储系统。 它有以下特征: 1.HBase 仍然是采用行存储的,采用松散表的结构来获得动态列的功能; 。。。

嗯,读到这里,你就会想 Hbase 是不是和传统的关系型数据库一样,是一种二维表结构,那所谓的“松散表”是什么意思呢?既然是行存储,那又是怎么做到“动态列”的?Hbase 是 “NoSQL” 数据库,那又是怎么个“No”?按照《李逵麻子,李鬼坑人--BigTable的数据模型》的说法,“因为BigTable借用了很多的关系数据库的术语来表示并非是关系数据库的东西,所以我们的理解就似是而非了。”

准确而言,Hbase 应该是

A Bigtable is a sparse, distributed, persistent multidimensional sorted map.

这句话才是 Hbase 的核心。

首先 Hbase 是一个 Map ,是和 Python 里的字典、Java 里的 TreeMap 和 HashMap是同一个东西。Hbase 不是传统的二维表结构,而是一个键值对,是和 Redis 一样的存储结构。类似于下面这样:

代码语言:javascript
复制
{
  "zzzzz" : "woot",
  "xyz" : "hello",
  "aaaab" : "world",
  "1" : "x",
  "aaaaa" : "y"
}

The map is indexed by a row key, column key, and a timestamp; each value in the map is an uninterpreted array of bytes.

Hbase 使用的 Map 的主键是 row key 、column key 和 timestamp。是的,你没看错,Hbase 里面使用的 row 和 column 的概念,本质是 key 的一部分。

然后再看 sorted ,说明 Hbase 存储 map 的时候是有序的,一般来说是按照key的字符串再加上 timestamp 排序。

persistent 就好理解了,Hbase 底层的数据存储是 HDFS ,是分布式文件系统,可以保证数据持久化到硬盘,而且不因为单机的宕机而导致系统宕机。

最后的话,sparse 就是松散的意思,既然是 Map 结构,那就不保证每个行列组成的格子里面都有值。

明白了 Hbase 的结构,那么这也就限制了 Hbase 的使用方式:

  1. Hbase 对聚合等数据分析的查询不友好
  2. Hbase 针对 key 的范围查找和单点查找性能特别好
  3. 但是要是对 Hbase 的某一列进行单点查找,那就意味着遍历全表。

好的,在文章的最后做一下总结。了解一个数据库或者是一个组件,最好还是回归本源去理解它是怎么设计出来的,而不是直接去使用它。就和我在面试的时候,会问候选者,你认为 Hbase 是一个怎样的数据库,它适用于什么样的场景。然后大部分候选者,会直接使用百度搜索到的,列簇数据库、松散表啊,然后再问列簇的含义,和列式存储、行式存储有什么区别,大部分就懵逼了。很多人都没有真正的理解 Hbase ,可能就知道 Hbase 只适合使用 key 查询,而不知道为什么。

不多说了,这篇文章对 Hbase 的介绍就到此结束了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档