传统的行存储和(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.     使用这个下标组装出最终的结果集。






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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm 常用快捷键_PyCharm快捷键

    pycharm 常用快捷键_PyCharm快捷键工欲善其事必先利其器,PyCharm是最popular的Python开发工具,它提供的功能非常强大,是构建大型项目的理想工具之一,如果能挖掘出里面实用技巧,能带来事半功倍的效果。我在Windows平台下的默认KeyMap设置,在Mac也是类似的。1、快速查找文件Ctrl+ECtrl+E可打开最近访问过的文件Ctrl+Shift+E打开最近编辑过的文件从Tab…

  • 3.15曝光“山寨”杀毒软件“杀毒三宗罪”

    3.15曝光“山寨”杀毒软件“杀毒三宗罪”“山寨”版杀毒软件,不同于其他山寨手机等产品。对于山寨手机,除了需要用户忍受哇哇叫的刺耳铃声,最起码山寨手机在通讯及其他娱乐商务功能上,都可以满足用户需求,不会在产品功效上严重侵犯消费者权益。而山寨

  • ostaskdel函数_cursor函数

    ostaskdel函数_cursor函数OSTaskCreate()

  • Pytest(13)命令行参数–tb的使用

    Pytest(13)命令行参数–tb的使用前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

  • spring boot 中使用 jpa以及jpa介绍

    最近在项目中使用了一下jpa,发现还是挺好用的。这里就来讲一下jpa以及在springboot中的使用。在这里我们先来了解一下jpa。1.什么是jpa呢?JPA顾名思义就是JavaPersistenceAPI的意思,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。2.jpa具有什么优势?2.1标准化JPA是JCP组织发布的Java

  • yolov5启用数据增强、tensorboard可视化及cutout增强

    yolov5启用数据增强、tensorboard可视化及cutout增强yolov5启用数据增强与tensorboard可视化一,yolov5启用数据增强1.data目录下,有两个hyp的文件:data/hyp.scratch.yaml和data/hyp.finetune.yaml具体内容如下:#HyperparametersforVOCfine-tuning#pythontrain.py–batch64–cfg”–weightsyolov5m.pt–datavoc.yaml–img512–epochs50#See

发表回复

您的电子邮箱地址不会被公开。

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