行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]

行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]1.为什么要按列存储列式存储(Columnarorcolumn-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表:ØRow-basedstoragestoresatableinasequenceofrows.ØColumn-basedstoragestoresatablein…

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

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,es聚合的doc_value)[通俗易懂]

 行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了

 

                             

行式存储

列式存储

优点

Ø  数据被保存在一起

Ø  INSERT/UPDATE容易

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

Ø  投影(projection)很高效

Ø  任何列都能作为索引

缺点

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

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

Ø  INSERT/UPDATE比较麻烦

ps:列式数据库方便projection
SQL Projection is the collective name for the columns that are Selected and returned from a query. In other words, the columns goes behind select in a query. In Oracle, a whole row is first fetched, then data values from the columns within that row are extracted into the known projection.

select某个字段就是projection。

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

行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]

 

 

 数据压缩:通过字典表压缩数据

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

 行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]

 

 

 查询执行性能

通过一条查询的执行过程说明列式存储(以及数据压缩)的优点:

行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]

关键步骤如下:

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

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

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

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

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

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

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


相关推荐

  • pycharm常用快捷键详解,让你编程 事半功倍。[通俗易懂]

    pycharm常用快捷键详解,让你编程 事半功倍。[通俗易懂]pycharm常用快捷键1、编辑(Editing)Ctrl+Space:基本的代码完成(类、方法、属性)Ctrl+Alt+Space快速导入任意类Ctrl+Shift+Enter:语句完成Ctrl+P参数信息(在方法中调用参数)Ctrl+Q快速查看文档F1外部文档Shift+F1:外部文档,进…

    2022年8月25日
  • Django(3)pycharm创建项目[通俗易懂]

    Django(3)pycharm创建项目[通俗易懂]创建项目我们创建django项目有两种方式,命令行方式和使用pycharm工具创建,本文就介绍常用的pycharm工具创建首先点击django,输入项目的名称,选择创建好的虚拟环境,最后点击cre

    2022年7月28日
  • java socket通讯中文乱码问题

    java socket通讯中文乱码问题话不多说上代码publicvoidrun(){//客户端一连接就可以写数据给服务器了newsendMessThread().start();super.run();try{//读Sock里面的数据InputStreams=socket.getInputStream();byte[]buf=newbyte[1024];

    2022年7月26日
  • LINUX软件的安装

    LINUX软件的安装

    2021年8月2日
  • python绘制爱心表白_六行python代码的爱心曲线

    python绘制爱心表白_六行python代码的爱心曲线#-*-coding:utf-8-*-importturtleimporttime#画爱心的顶部defLittleHeart():foriinrange(200):turtle.right(1)turtle.forward(2)#输入表白的语句,默认ILoveyoulove=input(‘请输入表白语句,默认为输入为”ILoveyou”:’)#输入署名或者赠谁,没有不执行me=input(‘请输.

    2022年9月7日
  • java怎么删除数组中的某个元素_js数组删除元素的方法

    java怎么删除数组中的某个元素_js数组删除元素的方法问题在Java开发中,可能会碰到需要删除数组中某个元素的场景。解决方案Javaapi中,数组虽然是一个对象,但是其并没有提供add()或者remove()等操作元素的方法,要删除元素的话,可以通过将数组对象转换成List再进行remove(),这个方法今天不在这里展开,这里介绍的是另外一种方法,直接通过Java的操作对数组元素进行移除。流程如下:要删除一个数组中index位置的元素,使…

    2022年10月25日

发表回复

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

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