五分钟轻松了解Hbase面向列的存储

转载自  五分钟轻松了解Hbase面向列的存储

说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点。

行式存储

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

其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。来一张形象的图:

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

 

列式存储

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

初次看列式存储稍微有点懵,下面给出行存与列存的转换:

原来张三的一列(单元格)数据对应现在张三的一行数据。原来张三的六列数据变成了现在的六行。

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

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

(摆渡车内部就是一个大平板)

你要站便站,我给你空间,你不站便不站,还给我空间。

 

行列对比

①行式存储倾向于结构固定,列式存储倾向于结构弱化。

行式存储相当于套餐,即使一个人来了也给你上八菜一汤,造成浪费;列式存储相等于自助餐,按需自取,人少了也不浪费

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

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

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

 

官方介绍

Apache Hbase是Hadoop数据库,一个分布式、可扩展、大数据存储。

当你需要随机地实时读写大数据时使用Hbase。它的目标是管理超级大表-数十亿行X数百万列。

Hbase是一个开源的、分布式的、带版本的、非关系型数据库,模仿谷歌的BigTable。BigTable使用Google File System作为分布式数据存储,同理Hbase使用HDFS。

 

Hbase世界

Hbase虽然弱化了结构,但并不等于放任不管。传统关系型数据库在插入数据前表结构(即所有列和列的数据类型)已经是严格确定的。

Hbase的表在放入数据前也有需要确定下来的东西,那就是Column Family(常译为列族/列簇)。单词Family就是家庭的意思,所以列族就是列的家庭。那么列自然就是家庭成员了,通常家庭成员都有多个,所以一个列族包含多个列。

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

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

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

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

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

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

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

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

一个行键、列族、列修饰符、数据和时间戳组合起来叫做一个单元格(Cell)。这里的行键、列族、列修饰符和时间戳其实可以看作是定位属性(类似坐标),最终确定了一个数据。下图中的一行相等于Hbase中的一个单元格:

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

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

官方文档中提醒:把传统数据库中的表/行/列的概念用在Hbase中不是一个有帮助的类比。相反可以把Hbase的表想象成一个多(两)维Map(Map套Map)。列族是第一维,列修饰符是第二维

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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1282-多米诺骨牌【dp,背包】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1282 题目大意 n个多米诺骨牌,上下值不相同,可以交换一个多米诺上下的值,求最少的交换次数使上下之和的差值最小。 解题思路 用fi,jNfi,jN表示只计算前i个多米诺&…

判断是否为素数

#include<stdio.h> main(){ int m,n;printf("请输入一个数我来给你判断是否是素数&#xff1a;\n");scanf("%d",&m);if((m%40&&m%100!0)||m%4000){printf("该数是素数");} else{printf("该数不是素数");} }

jeecg微服务项目调用接口报错Token验证失效的解决方法

大家好&#xff0c;我是雄雄。 前言 今天&#xff0c;记录一篇啼笑皆非的问题。 昨晚上在做微信公众号开发时&#xff0c;遇到了个解决好久的问题&#xff0c;即&#xff1a;微信公众号上配置服务器信息之后&#xff0c;回调服务器接口总是报错token验证失败。 剧透&#xf…

是时候开始用C#快速开发移动应用了

从2015年接触Xamarin到至今已经2个年头&#xff0c;我对Xamarin的技能没有长进多少&#xff0c;但它却已经足够成熟到在跨平台移动开发工具中占有一席之地。在扫了一些资料之后&#xff0c;突然发现国外有很多移动端的应用已经是用Xamarin开发&#xff0c;Telerik还有专门的团队…

P1525-关押罪犯【并查集】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1525 题目大意 有n个罪犯&#xff0c;罪犯有些关系&#xff0c;就是(i,j,c)(i,j,c)表示罪犯i和罪犯j在同一个监狱会造成c的破坏&#xff0c;有两座监狱&#xff0c;要求分配的使得最大的破坏最小。 解…

十分钟理解负载均衡

转载自 十分钟理解负载均衡 开头先理解一下所谓的“均衡” 不能狭义地理解为分配给所有实际服务器一样多的工作量&#xff0c;因为多台服务器的承载能力各不相同&#xff0c;这可能体现在硬件配置、网络带宽的差异&#xff0c;也可能因为某台服务器身兼多职&#xff0c;我们…

输入一个字母,转大小写

用scanf完成 #include<stdio.h> main(){char m;scanf("%c",&m);if(m>a&&m<z){mm-32;}else if(m>A&&m<Z){m32;}printf("%c",m);}用getcahr完成 #include<stdio.h> main(){char m;mgetchar();if(m>a&&…

nginx中配置不输入端口(指定地址)访问项目的方法

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 需求 访问项目时&#xff0c;地址是这样的&#xff1a;http://152.189.xxx.xxx:7890,绑定了域名之后&#xff0c;需要这样访问&#xff1a;http://XXXX.com:7890,想要换成http://152.189…

.net core 使用Redis的发布订阅

Redis是一个性能非常强劲的内存数据库&#xff0c;它一般是作为缓存来使用&#xff0c;但是他不仅仅可以用来作为缓存&#xff0c;比如著名的分布式框架dubbo就可以用Redis来做服务注册中心。接下来介绍一下.net core 使用Redis的发布/订阅功能。Redis 发布订阅Redis 发布订阅(…

MYSQL性能优化的最佳20+条经验

转载自 MYSQL性能优化的最佳20条经验 今天&#xff0c;数据库的操作越来越成为整个应用的性能瓶颈了&#xff0c;这点对于Web应用尤其明显。关于数据库的性能&#xff0c;这并不只是DBA才需要担心的事&#xff0c;而这更是我们程序员需要去关注的事情。当我们去设计数据库表结…

P1038-神经网络【拓扑排序】

正题 题目链接:https://www.luogu.org/recordnew/lists?uid52918&pidP1038 题目大意 有n个点&#xff0c;输入点给出权值&#xff0c;其余点的权值为 Ci∑i,j∈EWi,jCj−UiCi∑i,j∈EWi,jCj−UiCi<0Ci<0的话就不算 求输出层的权值 解题思路 求出一个点之前要求出…

用数组选出最大的数并且排序

选出数组最大的值 #include<stdio.h> main(){//选出最大的 int a[5]{200,110,101,1010,5},i,max;maxa[0];for(i0;i<5;i){if(a[i]>max){maxa[i];}} printf("%d",max); }排序 #include<stdio.h> main(){//排序 int a[5]{200,110,101,1010,5},i,max…

java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现

大家好&#xff0c;我是雄雄&#xff0c;欢迎你的到来~ 前言 需求是这样的&#xff0c;当用户关注公司服务&#xff08;公众&#xff09;号时&#xff0c;就自动注册成为了会员&#xff0c;且通过小程序设置提醒&#xff0c;然后后台可以通过服务&#xff08;公众&#xff09;…

王者荣耀是怎样炼成的(二)《王者荣耀》unity安装及使用的小白零基础入门

工欲善其事&#xff0c;必先利其器。上回书《王者荣耀是怎样炼成的&#xff08;一&#xff09;《王者荣耀》用什么开发&#xff0c;游戏入门&#xff0c;unity3D介绍》说到&#xff0c;开发游戏用到unity和C#。本篇博客将从零开始做一个unity的基础入门。\(^o^)/~欢迎大家的斧正…

史上最全MySQL 大表优化方案(长文)

转载自 史上最全MySQL 大表优化方案&#xff08;长文&#xff09; 当MySQL单表记录数过大时&#xff0c;增删改查性能都会急剧下降&#xff0c;可以参考以下步骤来优化&#xff1a; 一、单表优化 除非单表数据未来会一直不断上涨&#xff0c;否则不要一开始就考虑拆分&…

阶乘的值

#include<stdio.h> main(){//阶乘 int a,i,sum;printf("请输入你所需要的阶乘数&#xff1a;\n");scanf("%d",&a);sum1;for(i1;i<a;i){sumsum*i;} printf("%d",sum); } 输出阶乘的数

微信公众平台安全模式下传输xml数据包时解密方式

大家好&#xff0c;我是雄雄&#xff0c;欢迎你的到来。 前言&#xff1a; 最近一直在搞微信服务&#xff08;公众&#xff09;号开发&#xff0c;前面也写过一篇文章&#xff0c;是关于一开始配置、验证token以及接收用户触发关注/取消关注事件时的接口&#xff0c;文章地址&…

nssl1148,jzoj5461-购物【可撤回贪心,堆】

正题 jzoj题目链接:https://jzoj.net/senior/#main/show/5461 题目大意 有n个物品&#xff0c;m元&#xff0c;k个打折券。 每个物品打折前pip_ipi​元&#xff0c;打折后qiq_iqi​元&#xff0c;求最多能买多少物品。 解题思路 用可撤回贪心。 先将p和q分开排序&#xff0c…

“.Net 社区大会”(dotnetConf) 2017 Day 1 Keynote: .NET Everywhere

8月份已经发布了.NET Core 2.0, 大会Keynote 一开始花了大量的篇幅回顾.NET Core 2.0的发布&#xff0c;社区的参与度已经非常高。大会的主题是.NET 无处不在&#xff1a;NET Core 2.0已经完成了服务端的布局&#xff0c;那么各种终端的覆盖就是Xamarin的主场&#xff0c;Xamar…

金三银四铜五铁六

转载自 金三银四铜五铁六 金三银四铜五铁六 据说&#xff0c;金三银四&#xff0c;截止今天为止面试黄金时间已经过去十之八九&#xff0c;而鲁班&#xff08;LB &#xff0c;以下全文均用LB代替&#xff09;恰逢是这批面试大军其中的一名小兵&#xff0c;很不幸今年恰逢遇…