oracle层级关系按列存储_几张图看懂列式存储

最近看到一篇很好资料,里面三言两语配上几个图就把列式存储(Column-based Storage)讲明白了,牛啊!最喜欢的就是这种浅显易懂就把背景知识讲得明明白白,而不是长篇大论的讲概念。

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.

下面来看一个例子:

image.png

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

行式存储

列式存储

优点

Ø数据被保存在一起

ØINSERT/UPDATE容易

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

Ø 投影(projection)很高效

Ø 任何列都能作为索引

缺点

Ø 选择(Selection)时即使只涉及某几列,

所有数据也都会被读取

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

Ø INSERT/UPDATE比较麻烦

image.png

image.png

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

选择(Selection)

选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。

选择运算的记号为 σF(R)。

其中σ是选择运算符,下标F是一个条件表达式,R是被操作的表。

投影(Projection)

投影也是单目运算,该运算从表中选出指定的属性值组成一个新表,记为:ΠA(R)。

其中A是属性名(即列名)表,R是表名。

连接(JOIN)

把两个表中的行按着给定的条件拼接而形成的新表。

执行顺序:自然连接–>选取–>投影

*

image.png

2补充:数据压缩

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

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

image.png

3查询执行性能

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

image.png

关键步骤如下:

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

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

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

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

从Dremel和Impala的学习引申出了SQL查询的并行执行问题,于是借此机会深入学习一下关系数据库以及关系代数的并行计算。

Speedup和Scaleup

Speedup指用两倍的硬件换来一半的执行时间。Scaleup指两倍的硬件换来同等时间内执行两倍的任务。但往往事情不是那么简单,两倍的硬件也会带来其他问题:更多CPU带来的长启动时间和通信开销,以及并行计算带来的数据倾斜问题。

image.png

多处理器架构

共享内存:任意CPU都能访问任意的内存(全局共享)和磁盘。优点是简单,缺点是扩展性差,可用性低。

image.png

共享磁盘:任意CPU都能访问任何的磁盘,但是只能访问自己的主存。优点是可用性和扩展性比较好,缺点是实现复杂以及潜在的性能问题。

image.png

不共享:任意CPU都只能访问自己的主存和磁盘。优点也是扩展性和可用性,缺点是实现复杂以及复杂均衡。

image.png

混合型:系统整体上是shared nothing架构,但结点内部可能是其他架构。这样就混合了多种架构的优点。

image.png

数据分区

数据分区的目的就是:让数据库能够并行地读写数据,最大程度地挖掘I/O的潜力。常见的分区算法有:round-robin、范围索引、哈希。

image.png

关系运算并行化

关系代数自身的属性允许关系操作的并行化。

image.png

并行查询处理主要分为四步:

Ø 翻译:将关系代数表达式翻译成查询树。

Ø 优化:重排join顺序,并选择不同join算法来最小化执行开销。

Ø 并行:将查询树转换成物理操作树,并加载到处理器。

Ø 执行:并行运行最终的执行计划。

首先将一条SQL语句翻译成查询树。

image.png

然后根据表大小、索引等情况,重新排列join顺序,并选择合适的算法。

image.png

关于join算法,常见的有以下几种:

Ø Nested Loop join:思路很简单,相当于两层循环遍历,外层是驱动表,返回满足关联条件的行。适用于驱动表小(经过条件过滤后),而被驱动表上join字段有索引的情况。在两表都很大时效率很差。

for each row R1 in the outer table

for each row R2 in the inner table

if R1 joins with R2

return (R1, R2)

Ø Sort-merge join:思路也很简单,就是按join字段排序,然后进行归并排序。当join字段存在重复值时,相当于每个重复值形成了一个分区。Join字段是否排序和重复值的多少决定了sort-merge的效率。适用于两表都很大的情况,尤其当join字段上存在聚集索引时(相当于已经排好序了),效率很高。算法主要消耗在磁盘上。

Ø Hash join:类似于存在重复值情况时的sort-merge,只不过是人为的使用哈希函数进行分区。思路是扫描小表建立哈希表(build阶段,小表也叫build表),然后逐行扫描大表进行比较(probe阶段,大表也叫probe表)。适用于两表都很大又没有索引的情况,限制是只适用于等值连接。算法主要消耗在CPU上。

image.png

此外,对于子查询还有semi join和anti join等算法。

最后将查询树变成物理操作树,也就是真正的执行计划。然后根据集群的资源情况,调度到合适的结点上进行并行计算。

image.png

参考资料

1 Parallel Query Processing

五大存储模型

昨天跟一同事讨论Sybase是不是关系型数据库,同事说Sybase是列式存储,应该属于NoSQL,我一直的记忆Sybase是关系型数据库,后来专门去查了资料,才发现同事所说的Sybase IO是列式存储;而我说的是Sybase SQL Server,是关系型数据库。网上看到这篇文章,算是对几种数据库模型补补课。

数据库市场需要细分,行式数据库不再满足所有的需求,而有很多需求需要通过本内存数据库和列式数据库解决,列式数据库在数据分析、海量存储、BI这三个领域有自己独到。

1. 关系型数据库(行式数据库) MySQL Sybase Oracle

定义:关系模型使用记录(行或者元祖)进行存储,记录存储在表中,表由架构界定。表中的每个列都有名称和类型,表中的所有记录都要符合表的定义。SQL是专门的查询语言,提供相应的语法查找符合条件的记录,如表联接(Join)。表联接可以基于表之间的关系在多表之间查询记录。

存储格式:行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。

例如以下的一个表:

| EmpId | Lastname | Firstname | Salary |

| 1 | Smith | Joe | 40000 |

| 2 | Jones | Mary | 50000 |

| 3 | Johnson | Cathy | 44000 |

1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;

特点:据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。不能满足后面三个需求:对数据库高并发读写要求,对海量数据的高效率存储和访问需求,对数据库高可扩展性和高可用性。 一句话不适合分布式、高并发和海量。

2. 列式存储 Sybase IQ, C-Store, Vertica,Hbase

定义:什么是列式数据库?列式数据库是以列相关存储架构进行数据存储的数据库。列式存储以流的方式在列中存储所有的数据,主要适合与批量数据处理和即席查询。

存储格式 :

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;

特点:包括查询快,由于查询需要读取的blocks少;数据压缩比高,正因为同一类型的列存储在一起。Load快。 简化数据建模的复杂性。但是插入更新慢,不太适合数据老是变化,它是按列存储的。这时候你就知道它适做DSS(决策支持系统),BI的优秀选择,数据集市,数据仓库,它不适合OLTP。

Examples are Sybase IQ, C-Store, Vertica, VectorWise,MonetDB, ParAccel, and Infobright.

3. 键值存储 Cassandra, Hbase, Bigtable

即Key-Value存储,简称KV存储。它是NoSQL存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。

典型例子 Sorted String Table即SSTable。其实STL 库中map和hash_map, JAVA中hash_table, hash_map就是键值存储。 但是他们值只支持内存操作,而且map的查询效率太低,关键是他们只是简单的数据结构,不能实现较大规模存储和分布式,而且数据的修改效率比较低。 而SSTalbe就解决了这些问题。

键值存储实际是分布式表格系统的一种。

分布式key-value 系统有cassandra, hbase, bigtable etc

注:其实Hbase也属于列式存储

4. 文档存储

文档存储支持对结构化数据的访问,不同于关系模型的是,文档存储没有强制的架构。

事实上,文档存储以封包键值对的方式进行存储。在这种情况下,应用对要检索的封包采取一些约定,或者利用存储引擎的能力将不同的文档划分成不同的集合,以管理数据。

与关系模型不同的是,文档存储模型支持嵌套结构。例如,文档存储模型支持XML和JSON文档,字段的“值”又可以嵌套存储其它文档。文档存储模型也支持数组和列值键。

与键值存储不同的是,文档存储关心文档的内部结构。这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询。支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。

MongoDB 对SQL 和ACID 支持的比较全面的数据库了。不过, 比较多的还是介绍日志的采集和存储,小文件的分布式存储,类似互联网微博应用的数据存储等方面的内容。

5.图形数据库

图形数据库存储顶点和边的信息,有的支持添加注释。

图形数据库可用于对事物建模,如社交图谱、真实世界的各种对象。IMDB(Internet MovieDatabase)站点的内容就组成了一幅复杂的图像,演员与电影彼此交织在一起。

图形数据库的查询语言一般用于查找图形中断点的路径,或端点之间路径的属性。Neo4j是一个典型的图形数据库。

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

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

相关文章

linux fg 命令,Linux fg 命令 command not found fg 命令详解 fg 命令未找到 fg 命令安装 - CommandNotFound ⚡️ 坑否...

显示行号|选择喜欢的代码风格默认GitHubDuneLakeSidePlateauVibrantBlueEightiesTranquilfg 将后台作业放到前台终端运行。fg 命令安装:-bash: fg: command not found#Debianapt-get install bash#Ubuntuapt-get install bash#Alpineapk add bash#Arch Linuxpacman …

wps 宏 禁用_WPS表格如何解除宏禁用

WPS的办公软件个人感觉是挺好的,可惜有一次我在使用WPS表格(相当于Office excel)时,发现居然无法使用宏,怎么办?不用担心接下来学习啦小编举例简单的例子告诉大家WPS表格解除宏禁用的方法。WPS表格解除宏禁用的方法上面我已经给出了插件的下…

linux设备资源分配,基于Linux 简化 AMP 配置使其更方便更动态地分配资源

描述嵌入式系统一般分为两大类:需要硬实时性能的;和不需要硬实时性能的。过去,我们不得不做出艰难抉择: 选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处?如今,嵌入式开…

netcore权限控制_netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源...

基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统特色:用户管理菜单管理角色管理权限管理[精确到按钮])代码生成器如何使用代码克隆到本地 用vs2017或以上版本 打开工程。项目结构如下:找到DbModel下面的初始化db脚本里面包含4张表的schem…

uint16 累加_在一个驱动程序中看到uint16,uint32,unit8,int8是什么意思?有何作用?...

展开全部uint16 :无符32313133353236313431303231363533e59b9ee7ad9431333365643535号16bit整数,uint32:无符号32bit整数,unit8:无符号8bit整数,int8:有符号8bit整数。其作用是程序更加简洁&…

linux qt显示gif图片,QT显示GIF图片

在QT中要显示GIF图片,不能通过单单的添加部件来完成.还需要手动的编写程序.工具:QT Creator新建一个工程,我们先在designer中,添加一个QLabel部件.如下图:将QLabel拉成适当大小.在类cpp函数中添加如下程序:#include "widget.h"#include "ui_widget.h"#incl…

安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级二级考试真题C语言2012年12月...

安徽省计算机等级二级考试真题C语言2012年12月2012年下半年全国高等学校(安徽考区)计算机水平考试试卷(二级 C语言程序设计)一、单项选择题(每题1分,共40分)1.微型机的中央处理器主要集成了_____。A)控制器和CPU B)运算器和控制器C)控制器和存储器 D)运算器和CPU2.计…

太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告的数据处理Ini怎么?太阳能电池基 爱问知识人...

摘要:实验结果的表示,首先取决于实验的物理模式,通过被测量之间的相互关系,考虑实验结果的表示方法。常用到数据处理方法有作图法,列表法,平均值法,最小二乘法等。在处理数据时可根据需要和方便…

C语言存储管理模拟程序设计代码,C语言程序设计教学大纲.doc

目 录《C语言程序设计》教学大纲1《实用操作系统》教学大纲5《网页设计》教学大纲8《计算机硬件基础》教学大纲12《计算机网络技术》教学大纲15《数据库技术》教学大纲19《专业英语》教学大纲23《Java程序设计》教学大纲27《组网技术与管理》教学大纲30《WEB编程技术…

ubuntu 禁用透明大页_如何在ubuntu上默认启用透明的大页面?

如何在ubuntu上默认启用透明的大页面?$uname -aLinux yoda 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux~$cd /sys/kernel/mm/transparent_hugepage//sys/kernel/mm/transparent_hugepage$lsdefrag enab…

数学C语言编程,数学规划 (最速下降法,c语言编程).doc

数学规划 (最速下降法,c语言编程).doc数 学 规 划 课 程 设 计题目:用最速下降法求解无约束非线性规划问题姓名:学号:成绩:2011年6月用最速下降法求解无约束非线性规划问题摘要:无约束非线性规划问题是一类重要的数学规…

华三防火墙h3cf100配置双宽带_H3C新一代F100系列防火墙评测报告

【IT168评测】随着网络应用在中小企业的深入发展,中小企业对于网络安全的需求也越来越强烈。而传统的网络安全设备可以帮助中小企业防御病毒、蠕虫及应用层攻击,但是由于缺乏有效的监管,中小企业内网用户的P2P下载、在线视频等大量占用着企业…

公交查询系统 c语言,城市公交查询系统的设计任务书

主要参考文献(资料):[1] 汪光焘.畅通城市交通,实现城市的可持续发展.可持续发展,2002,(2):18-19[2] 马武定.城市化与城市可持续发展的基本问题.城市规划汇刊,2002,(2):7-9[3] 冯博.S…

matlab计算一组数的函数值_matlab中怎么求一组数据概率最大的数

好象直接使用就可以了,第一次出现就包含了定义顺便把些命令弄给你看下matlab命令matlab commands and functions listA aabs 绝对值、模、字符的ASCII码值acos 反余弦acosh 反双曲余弦acot 反余切acoth 反双曲余切acsc 反余割acsch 反双曲余割align 启动图形对象几何位置排列工…

c语言文件怎么在手机上打开,各位前辈这两个程序怎么在手机上运行

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*made by ebhrz*/#include #include #include #include #include #include #include /*---------global define---------*/int cfd; /* 文件描述符 */int recbytes;int sin_size;char buffer[1024] { 0 }; /* 接受缓冲区 */struc…

u盘启动蓝屏 索尼vaio_U盘重装系统出现蓝屏?不要急,这四个手段轻松帮你解决!...

现如今U盘重装系统是主流的重装系统方式,通过U盘PE重装系统是大多数用户重装电脑系统的第一选择。不过在用U盘重装系统的时候,进入PE系统有时候会出现一些问题。有用户进入PE系统就蓝屏,这是怎么回事呢?下面就让韩博士小编为大家带…

觅凤c语言教程,C语言程序设计教程 第1章.ppt

傣永靶莱瑞市芽星谴绥真椎匣灵租骡淬女测推谅应弥蠢仑早饲姑锗佩草隔C语言程序设计教程 第1章C语言程序设计教程 第1章第1章 绪 论??唆闽邹搔绕裂陶短噎诚贤希绞重垒嚷济酸凛委句枉鞘扁渗皋耿淮此朴胎竖C语言程序设计教程 第1章C语言程序设计教程 第1章1.1 程序设计语言的发展…

iframe懒加载_懒加载是如何实现的?

作为网页内容的一部分,图像和视频通常要消耗很多资源加载。要提高网页应用的性能,如何避免资源浪费在加载图像和视频上就很重要了。但是,很多时候我们都不愿意减少网页上的媒体资源,所以我们经常无从下手。幸运的是,我…

数据库系统工程师考c语言吗,2019年数据库系统工程师考点:DBMS的基本功能

【导语】2019年数据库系统工程师考试备考正在进行中,为了方便考生及时有效的备考,那么,无忧考网为您精心整理了2019年数据库系统工程师考点:DBMS的基本功能,欢迎大家的参考学习。如想获取更多数据库系统工程师考试的模…

redis value最大值_Redis从入门到深入-String的value

1. string类型1.1 redis数据存储类型redis本身是一个Map,其中所有的数据都是采用key:value的形式存储数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串1.2 string类型存储的数据:单个数据…