5分钟图解Hbase列式存储

HBase数据模型、RowKey、Column Family(列族)和qualifier(列)、Timestamp时间戳、Cell单元格、读写流程、HLog(WAL log)... 目录HBase数据模型RowKeyColumn Family(列族)和qualifier(列)Timestamp时间戳Cell单元格读写流程HLog(WAL log)HBase数据模型 HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegionServer上。 在 HDFS 上 HBase 每个表的目录下,会以 Region ... 阅读详情

作者 | 李新杰

来源 | 微信公众号“编程新说”

行式存储

传统的数据库是关系型的,且是按行来存储的。如下图:

640?wx_fmt=jpeg

其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。

因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。

来一张形象的图: 

640?wx_fmt=jpeg

640?wx_fmt=gif

不管你坐或不坐,座位都在那里,不离不弃。 

列式存储

为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。如下图: 

640?wx_fmt=png

初次看列式存储稍微有点懵,下面给出行存与列存的转换: 原来张三的一列(单元格)数据对应现在张三的一行数据。

原来张三的六列数据变成了现在的六行。 

原来的六列数据是在一行,所以共用一个主键(即张三)。现在变成了六行,每行都需要一个主键(不然不知道这行数据是谁的),

所以原来的主键(即张三)重复了六次。如下图:  

640?wx_fmt=png

由于原来的列变为了现在的行,如果有需要就加一行,没需要就不加,不会造成空间浪费。

来一张形象的图: 

640?wx_fmt=jpeg

摆渡车内部就是一个大平板,你要站便站,我给你空间,你不站便不站,还给我空间。 

行列对比

1. 行式存储倾向于结构固定,列式存储倾向于结构弱化。 (行式存储相当于套餐,即使一个人来了也给你上八菜一汤,造成浪费;列式存储相等于自助餐,按需自取,人少了也不浪费) 

2.行式存储一行数据只需一份主键,列式存储一行数据需要多份主键。 

3. 行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名。 

4. 行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;列式存储更像一个Map,不提前定义,随意往里添加key/value。 

HBase

有了前面的介绍,我们可以进入HBase了。

HBase的目标是管理超级大表-数十亿行 * 数百万列。 Hbase是一个开源的、分布式的、带版本的、非关系型数据库,模仿谷歌的BigTable。

BigTable使用Google File System作为分布式数据存储,同理Hbase使用HDFS。 

Hbase虽然弱化了结构,但并不等于放任不管。传统关系型数据库在插入数据前表结构(即所有列和列的数据类型)已经是严格确定的。 Hbase的表在放入数据前也有需要确定下来的东西,那就是Column Family(常译为列族/列簇)。

单词Family就是家庭的意思,所以列族就是列的家庭。那么列自然就是家庭成员了,通常家庭成员都有多个,所以一个列族包含多个列。 

一个家庭的成员之间具有血缘关系,所以一个列族的多个列之间通常也具有某种关系,比如相似或同种类别。所以列族可以看作是某种分类(归类)。 

一个非常常见的例子,去面试的时候,一般前台MM都会让填一张表,通常信息很多,每个公司又不尽相同。但大致可以分三类:人员基本信息,教育经历信息,工作经历信息,这三个类别其实就相当于三个列族。如下图: 

640?wx_fmt=png

每个类别里都会有具体的信息,比如人员基本信息里有姓名、电话、出生年月等,它们就相当于一个个标识符(变量名),在Hbase中叫做Column Qualifier(列修饰符)。列修饰符位于列族里面用来标识一条条数据。如下图: 

640?wx_fmt=png

在Hbase中一个列族(Column Family)和一个列修饰符(Column Qualifier)组合起来才叫一个列(Column),使用冒号(:)分割,列族:列修饰符,如下图: 

640?wx_fmt=png

在传统数据库中每一行的唯一标识符叫做主键,在Hbase中叫做row key(行键)。如下图: 

640?wx_fmt=png

数据在进入Hbase时都会被打上一个时间戳,这个时间戳可以作为版本号来使用。 

在t1时间我存入一个人的基本信息,之后发现姓名错了,在t2时间又更新了姓名,此时并不会去更新原来的那条数据,而是又插入了一条新数据且打上新的时间戳。 

此时去查询获取的是新数据,仿佛是更新了,但其实只是默认返回了最新版本的数据而已。如下图: 

640?wx_fmt=png

一个行键、列族、列修饰符、数据和时间戳组合起来叫做一个单元格(Cell)。

这里的行键、列族、列修饰符和时间戳其实可以看作是定位属性(类似坐标),最终确定了一个数据。

下图中的一行相等于Hbase中的一个单元格: 

640?wx_fmt=png

一个行键、一到多列(包括数据)组合起来叫做一行(Row)。下图中所有1001的数据合起来相当于Hbase中的一行,1002的相当于另一行: 

640?wx_fmt=png

 在Hbase中,只要确定了列族(具体的列不用管),表(Table)就确定了。如下图: 

640?wx_fmt=jpeg

官方文档中提醒:把传统数据库中的表/行/列的概念用在Hbase中不是一个有帮助的类比。

相反可以把Hbase的表想象成一个多(两)维Map(Map套Map)。列族是第一维,列修饰符是第二维。  

一点思考:任何细微的差别在大数量时都会被无限放大,那么列族和列修饰符的名字起的短一些是不是能够节省可观的空间呢?

ps : 从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,但是还是有很多人习惯称之为“列式存储”。

往期精彩回顾

关于老刘和码农翻身

我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

2021-12-24 迈向程序猿的第五十四步 目录 一、Presto的概述 1.1 Presto的简介 1.2 Presto支持的数据源 1.3 Presto和Hive的比较 1.4 Presto与Impala的比较 二、Presto的体系架构 2.1 简介与图解 2.2 Presto中SQL运行过程 2.3 MapReduce vs Presto 三、Presto的安装 3.1 Presto Server的安装 3.2 Presto server的运行 3.3 Presto Client安装 3.3.1 第一种客户端:.. 阅读详情

相关推荐

Presto知识点总结

一、Presto的概述 1.1 Presto的简介 官网:https://prestodb.io/ Presto是facebook的一个开源,并完全基于内存的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。presto的架构由关系型数据库的架构演化而来。presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点: 具有良好的清晰的体系架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。 例如调度,presto自身提供了对集群的监控,可以根据监控信息完成调度。

默主归沙的博客 1641

Hbase的列式存储到底是什么意思?一篇文章让你彻底明白

Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。

Appreciate(欣赏) 1642

基于R语言的DICE模型实践技术应用;预测不同减排路径下的经济增长、碳排放量、气候变化程度以及社会福利变化

DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。

KY_chenzhao的博客 869

HBase 最全存储原理(一)

问题导读: 1、存储模式有哪些? 2、Hbase为什么要使用列族? 3、hbase数据压缩方式有哪些? 4、HBase架构如何理解?存储模式常见的关系型数据库大都使用行式存储,例如 mysql、Oracle ,但 HBase 不一样,它使用的是列式存储!行式存储与列式存储什么是行式存储,什么是列式存储?假如有这样一张表那么行式存储是将一行数据存储在一起列式存储是将一列数据存储在一起底层存储结构如下,行式存储是存储玩一行,接着存储下一行,而列式存储是把一列数据存储在一起,由于列数据不存在一列存完了的概念,所以

ytp552200ytp的博客 2990

ConvLSTM时空预测实战代码详解

ConvLSTM代码复现

JaysonWong的博客 1万+

Qt5+OSG实战:如何用osgQOpenGLWidget在窗口中加载3D模型(附完整代码)

本文详细解析了如何在Qt5中使用osgQOpenGLWidget加载和渲染3D模型,涵盖环境配置、核心架构、性能优化及高级技巧。通过实战案例和完整代码,帮助开发者实现工业级3D模型渲染,提升Qt与OSG的整合效率。

weixin_42741930的博客 264

【HBase】HBase 中的列和列族

HBase 的每一个行都是离散的,因为列族的存在,所以一个行里不同的列甚至被分配到了不同的服务器上。行的概念被减弱到了一个抽象的存在。在实体上,把多个列定义为一个行的关键词 RowKey,也就是行这个概念在 HBase 中的唯一体验。

Data · Model · Agent · Repeat 6152

STM32学习笔记【江科协】【4-2】OLED显示屏

可以注意到接电源的GND和VCC同时和PB6、PB7号口连接,我们可以直接不初始化这两个引脚解决,因为STM32的引脚上电后,如果不初始化,默认是浮空输入的模式,在这个模式下,引脚不会输出电平,所以不会有什么影响,或者直接给PB6口输出低电平,PB7口输出高电平,用GPIO口直接给OLED供电,这个也是没问题的,因为OLED的功率很小这个也是可以驱动的,不过用GPIO口供电不是很规范,实际项目还是用电源供电。然后点击这里放大镜里面带d的图标,进入调试模式,这个界面里,

m0_74651303的博客 1595

图解Hbase列式存储,和行式存储的区别

Hbase列式存储

You can walk as far as you want. 1458

ZYNQ专题-7020驱动KSZ9031 PHY芯片

之所以有这篇文章,得益于Alinx的开发板。

Anitawen的博客 4971

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 330

5 分钟图解 Hbase 列式存储

作者 | 李新杰来源 | 微信公众号“编程新说”行式存储传统的数据库是关系型的,且是按行来存储的。如下图:其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。来一张形象的图:不管你坐或不坐,座位都在那里,不离不弃。列式存储为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。如下图:初次看列式存储稍微有...

cpongo011702 387

深度探索:VS2022 牵手 DeepSeek,开启开发新征程

通过将 VS2022 与 DeepSeek 接入,我们成功开启了智能开发的新征程。从前期的硬件准备、软件环境搭建,到实战环节的一步步配置与整合,再到全面的测试与验证,每一个步骤都充满挑战,但也带来了满满的收获。在实际应用中,VS2022 与 DeepSeek 的结合展现出了强大的优势,为开发者带来了更高的效率和更出色的代码质量。无论是代码自动补全、智能代码审查,还是自然语言交互编程,都让开发过程变得更加智能、便捷,极大地提升了开发体验。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 3525

总结:HBase

HBase梳理

w2009211777的专栏 4408

【2026最新版】PCL点云处理算法汇总(C++长期更新版)

PCL学习目录。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 63万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Gorilla WebSocket 实战指南:Go 语言 RFC 6455 WebSocket 协议实现与源码解析

本文围绕当前仓库中 vendored 的 [Gorilla WebSocket](https://link.gitcode.com/i/4e2c23189e14ce189db8ac27abbd6e56) 库(版本 v1.4.1,见 [go.mod](https://link.gitcode.com/i/48385dbe0cadcad8eeed8be016adedea))展开,它是 Go 生态中最流

gitblog_00469的博客 450

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Presto

一、Presto的概述 1.1 Presto的简介 官网:Presto | Distributed SQL Query Engine for Big Data Presto是facebook的一个开源,并完全基于内存的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。presto的架构由关系型数据库的架构演化而来。presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点: 具有良好的清晰的体系架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。 例如

程序猿的博客 1362

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

列式存储详解

传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储的形式存在。列式存储(Column-based)是相对于行式存储来说的,比如:Hbase、Doris、Clickhouse等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。特点行式存储。

bocai_xiaodaidai的博客 3663

ClickHouse的实时数据处理:ClickHouse在实时数据处理场景中的应用

1.背景介绍 1. 背景介绍 ClickHouse 是一个高性能的列式数据库,旨在处理实时数据。它的设计目标是提供低延迟、高吞吐量和高可扩展性。ClickHouse 广泛应用于实时数据分析、监控、日志处理等场景。 在大数据时代,实时数据处理变得越来越重要。传统的数据库无法满足实时性要求,因此需要寻找更高效的解决方案。ClickHouse 正是为了满足这一需求而诞生的。 本文将深入探讨 Cl...

AI天才研究院 1442

浅谈行式存储和列式存储

摘要 本文主要对行式存储和列式存储原理做简单的分析,行式存储以mysql的Innodb 引擎和 Myisam 引擎为例,列式存储以parquet为例,最后对各自的优劣势总结。 一 总览 二 行式存储 三 列式存储

ergouy's blog 2159

列式存储的历史与发展:从简单到复杂

1.背景介绍 列式存储是一种特殊的数据存储方式,主要用于处理大量结构化数据。它的核心特点是将数据按照列存储,而不是行。这种存储方式有助于提高数据查询的效率,因为它可以减少磁盘I/O操作,降低数据传输的开销。 列式存储的历史可以追溯到1970年代,当时的数据库系统主要采用的是行式存储方式。随着数据量的增加,行式存储的不足越来越明显,列式存储逐渐受到了重视。在21世纪初,列式存储开始广泛应用,主要...

AI天才研究院 1452

分布式数据库HBase:从零开始了解列式存储

在接触过大量的传统关系型数据库后你可能会有一些新的问题: **无法整理成表格的海量数据该如何储存? 在数据非常稀疏的情况下也必须将数据存储成关系型数据库吗? 除了关系型数据库我们是否还有别的选择以应对Web2.0时代的海量数据?** 如果你也曾经想到过这些问题, 那么HBase将是其中的一个答案, 它是非常经典的列式存储数据库. 本文首先介绍HBase的由来以及其与关系数据库的区别, 其次介绍其访问接口、数据模型、实现原理和运行机制. 即便之前没有接触过HBase的相关知识也不影响阅读该文章.

weixin_42236936的博客 1839

列式存储

OLAP中数据存储的问题 OLAP 需要队列进行选择,行式存储按行存数据,使用索引加快对数据的查找(索引包括聚集索引(表记录的排列顺序与索引的排列顺序一致)和非聚簇索引(非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致))。这种方式对按列的存储和检索不是很高效,查询某一列数据需要将所有行的数据扫描一次,而且对统计分析也不友好。 列式存储原理 若使用列式存储可以只用扫描出需要的列,行、列存储的对比。 文件格式 parquet 文件格式: 如下图所示:parquet file = hea

acethan的博客 1521

HBase高阶(一)基础架构及存储原理

HBase是Hadoop生态系统中的一个分布式、面向列的开源数据库,具有高可伸缩性、高性能和强大的数据处理能力。广泛应用于处理大规模数据集。HBase是一种稀疏的分布式持久的多维排序map稀疏:对比关系型数据库和非关系型数据库,关系型数据库是以表格的形式进行存储,对存储的要求较高,每一行每一列都需要预留对应的存储空间,这就会造成存储空间的浪费。分布式:海量数据保存在多台机器上。持久化:将内存中的对象存储在数据库中,或者存储在磁盘文件中。多维:noSQL数据库的本质是KV结构。

five小点心的博客 2975

hbase中列簇和列_五分钟轻松了解Hbase列式存储

行式存储传统的数据库是关系型的,且是按行来存储的。如下图:其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。来一张形象的图:不管你坐或不坐,座位都在那里,不离不弃。列式存储为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。如下图:初次看列式存储稍微有点懵,下面给出行存与列存的转换:原来张三的一列(...

weixin_39941792的博客 2083
上一篇: 我觉得微信7.0的“看一看”还是不行
下一篇: 2019年我建议你做好三件事情
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值