传统的行存储和(HBase)列存储的区别「建议收藏」

传统的行存储和(HBase)列存储的区别「建议收藏」1为什么要按列存储列式存储(Columnarorcolumn-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):Ø Row-basedstoragestoresatableinasequenceofrows.Ø Column-basedstorag

大家好,又见面了,我是你们的朋友全栈君。

1 为什么要按列存储

列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):

Ø  Row-based storage stores atable in a sequence of rows.

Ø  Column-based storage storesa table in a sequence of columns.

 

下面来看一个例子:

传统的行存储和(HBase)列存储的区别「建议收藏」

 

从上图可以很清楚地看到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。所以它们就有了如下这些优缺点:

                             

行式存储

列式存储

优点

Ø  数据被保存在一起

Ø  INSERT/UPDATE容易

Ø  查询时只有涉及到的列会被读取

Ø  投影(projection)很高效

Ø  任何列都能作为索引

缺点

Ø  选择(Selection)时即使只涉及某几列,所有数据也都会被读取

Ø  选择完成时,被选择的列要重新组装

Ø  INSERT/UPDATE比较麻烦

注:关系型数据库理论回顾 – 选择(Selection)和投影(Projection)

传统的行存储和(HBase)列存储的区别「建议收藏」


2补充:数据压缩

刚才其实跳过了资料里提到的另一种技术:通过字典表压缩数据。为了方便后面的讲解,这部分也顺带提一下。

下面才是那张表本来的样子。经过字典表进行数据压缩后,表中的字符串才都变成数字了。正因为每个字符串在字典表里只出现一次了,所以达到了压缩的目的(有点像规范化和非规范化Normalize和Denomalize)

传统的行存储和(HBase)列存储的区别「建议收藏」

3查询执行性能

下面就是最牛的图了,通过一条查询的执行过程说明列式存储(以及数据压缩)的优点:

传统的行存储和(HBase)列存储的区别「建议收藏」

关键步骤如下:

1.     去字典表里找到字符串对应数字(只进行一次字符串比较)。

2.     用数字去列表里匹配,匹配上的位置设为1。

3.     把不同列的匹配结果进行位运算得到符合所有条件的记录下标。

4.     使用这个下标组装出最终的结果集。






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160449.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • siamfc++代码_c语言代码怎么理解

    siamfc++代码_c语言代码怎么理解文章目录前言一、论文翻译二、论文代码1.backbone网络前言记录自己阅读复现SiamFC的全过程,包括论文翻译,代码理解等一、论文翻译论文原文:链接:https://pan.baidu.com/s/1wvXra0Ji6L9IMVZikaUs9Q提取码:s7t3本文是Siam系列跟踪论文的开篇之作,兼容了速度与精度,引起跟踪社区极大的关注。论文中对一些细节描述分非常充分,适合精读本文。二、论文代码代码参考;https://github.com/HonglinChu/SiamTra.

    2022年9月30日
    2
  • 基于Python的OpenCV人脸检测

    基于Python的OpenCV人脸检测本文将要讲述的是Python环境下如何用OpenCV检测人脸,本文的主要内容分为:1、检测图片中的人脸2、实时检测视频中出现的人脸3、用运设备的摄像头实时检测人脸提前做的准备:安装好Python3下载安装OpenCV库,方法是pipinstallopencv-python-ihttps://mirrors.aliyun.com/pypi/simple/–trusted-host=mirrors.aliyun.com/pypi/simple下载特征数据HAAR和LBP,这两种数

    2022年6月7日
    32
  • 如何用matlab编写分段函数_matlab 分段函数

    如何用matlab编写分段函数_matlab 分段函数f(x)的定义如下:2226,04()56,010,231,xxxxfxxxxxxxx且且其它1、写一个函数文件f(x)实现该函数,要求参数x可以是向量;2、作出该函数的图形;3、求出f(x)的零点与最值。解:(1)、编写M函数文件functiony=f(x)n=length(x);ifx<0&x~=-4y=x.^2+x-6;elseif…

    2022年6月14日
    127
  • pycharm虚拟环境下安装第三方库_pycharm虚拟环境下安装第三方库

    pycharm虚拟环境下安装第三方库_pycharm虚拟环境下安装第三方库文章目录前言一、什么是虚拟环境?二、PyCharm中创建虚拟环境1.virualenv2.pipenv3.conda4.导入环境三、包管理总结前言我们在用python进行开发时,往往不同的项目会使用不同的环境,那么如何让不同的环境并存呢?答案是使用虚拟环境。一、什么是虚拟环境?顾名思义,虚拟环境就是一个虚拟的、从电脑中独立开辟出的环境。有点类似于虚拟机,不同的虚拟机之间即可共存,又互不影响,python中使用的虚拟环境亦如此。比如我想要一个python3.9的环境,我就可以创建一个名为py39.

    2022年8月27日
    8
  • *.asmx文件漏洞搜索「建议收藏」

    *.asmx文件漏洞搜索「建议收藏」AdminWebServicehttp://<AdminSite>/_vti_adm/Admin.asmxProvidesmethodsformanagingadeploymentofMicrosoftWindowsSharePointServices,suchasforcreatingordeletingsitec…

    2022年5月4日
    59
  • Linux重启网卡失败_debian重启网卡命令

    Linux重启网卡失败_debian重启网卡命令Linux下解决网卡重启失败:Jobfornetwork.servicefailedbecausethecontrolprocessexitedwitherrorcode

    2025年12月2日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号