行存储(关系型数据库)与列存储(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.     使用这个下标组装出最终的结果集

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

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

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

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

(0)


相关推荐

  • 键值对pair「建议收藏」

    什么是pairpair类是C++标准库的一部分,它使得我们可以在一个对象的内部把相同类型或不同类型的两个值关联起来,它被包含在头文件unility中:pair类的结构大致如下:template<classT1,classT2>classpair{public:pair(T1v1,T2v2):first(v1),s…

  • gitlab docker安装_crawl用法

    gitlab docker安装_crawl用法1先给个干货crawlab的官方文档地址https://docs.crawlab.cn/Installation/Docker.htmlgithub说明地址https://github.com/crawlab-team/crawlab/blob/master/README-zh.md2两种安装方式一是通过dockerpull拉取,代码如下dockerpulltikazyq/crawlab:latest二是从github拉取代码,然后使用dockercompose命…

    2022年10月31日
  • 【spring】事务

    【spring】事务【spring】事务

  • 什么是SQL游标?[通俗易懂]

    什么是SQL游标?[通俗易懂]1.1游标的概念游标(Cursor)它使用户可逐行访问由SQLServer返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据

  • eruka快速刷新和kafka配置

    eruka快速刷新和kafka配置Kafkapartition扩充并且需要迁移数据生产不用指定具体分区,会自动分配拉取也不用指定具体分区,会自动拉多个分区可以同时拉取多个topickafka配置<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.12</artifactId><version>2.3.0</version>&lt…

  • navicat激活码 NAVC-PY2U【2022免费激活】

    (navicat激活码 NAVC-PY2U)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

发表回复

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

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