1、设计目标

Vertica数据库可以说是7年之后的C-Store,在2012年发表的这样一篇论文,描述了现在基于C-Store的一部分改进,当然,Vertica借鉴了很多C-Store的思想,但并非完全是C-Store。由于Vertica也是分析型数据库,所以数据设计的目标也是重读不重写或者说是重分析轻事务(Vertica was explicitly designed for analytic workloads rather than for transactional workloads)。那么什么是事务压力,什么是分析压力呢。

  1. Transactional:事务压力主要来自于每秒的事务并发量可能有上千,并且这些事务涉及少量的元组。通常是删除某些元组,增加某些元组,或者修改某一列上的某一个值。
  2. Analytic:分析压力并不在于多数的事务并发,分析压力主要在于每一个事务所涉及的元组数很多,可能是一张表中的大部分元组。

既然Vertica数据库应用场景在于分析,所以主要压力来源于查询,那么列式数据库相对于传统的行式数据库而言,在事务上控制相对难,但是在查询和分析上有天然的优势。

2、数据模型

这一部分Vertica的设计和C-Store基本一致,在数据模型上,同样是projection和segment,Vertica同样是分布式数据库,在数据分布上,以Segment为单位,至于怎样划分Segement,Vertica采用Hash某一个属性值得方式进行划分。

另外在压缩方面,也和C-Store大同小异。压缩方式有六种:

  1. Auto:系统基于存储内容自动选择最优的编码方式
  2. RLE:通过一个简单的键值对(值和值出现的次数)来替换一个连续的序列
  3. Delta Value:记录增量数据。
  4. Block Dictionary:字典压缩
  5. Compressed Delta Range:通过记录和上一条记录的差异来存储数据
  6. Compressed Common Delta:对所有的增量数据建立字典。

3、查询执行

这一块儿是Vertica相对于C-Store改进的地方,查询执行的主要目的在于解析SQL语句,转变为数据库内部可以执行的执行方案。那么针对这一目的,Vertica设计了查询执行这一模块。

3.1 物理运算符

计划的执行是通过Execution Engine(EE)进行的,在EE内部,实现了7种物理运算符:

  1. Scan:从一个projection里面读出数据。
  2. GroupBy:对数据进行group和agg操作,在这一块儿有基于hash的不同算法,具体用哪一种算法取决于需要多高的效率,多大的内存以及运算符是否需要提供独立的组别。
  3. Join:实现了关系与关系之间的join操作,包括INNER,LEFT OURTER,RIGHT OUTER,FULL OUTER,SEMI以及ANTI joins
  4. ExprEval:对一个表达式进行计算
  5. Sort:对数据进行排序
  6. Analytic:计算SQL-99中的聚合运算方面的操作(max,avg,sum等等)
  7. Send/Recv:从一个节点发送元组到另一个节点或者是接收从另外一个节点发送过来的元组。

6.2 查询优化

在C-Store中,有最小化的查询优化模块,只提供了很简单的查询优化操作,join的操作顺序呢完全是随机的。这一块儿是Vertica相比于C-Store改进最大的地方,Vertica在查询优化方面经历了三个阶段:StarOpt,StarifiedOpt,以及V2Opt。

但是论文里面仅仅只是对这三个阶段进行了介绍,并没有说明实现的具体思路是什么。所以很可惜,毕竟是HP的商业数据库,所以这一块儿只能有一个大概的思想和思路。

The Vertica Analytic Database:C-Store 7 Years Later笔记的更多相关文章

  1. Vertica使用Database Designer创建完整的设计

    Vertica Database Designer 分析逻辑架构,示例数据库可以分析实力查询. 创建可自动部署或手动部署的物理架构设计(一组投射) 任何不具备数据库专业知识的人员均可使用 可以随时运行 ...

  2. .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记

    目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...

  3. Vertica 导出数据测试用例

    需求:构建简单的测试用例,完成演示Vertica导出数据的功能. 测试用例:导出test业务用户t_jingyu表中的数据. 一.初始化测试环境 二.导出数据 2.1 vsql命令说明帮助 2.2 导 ...

  4. Vertica增加一个数据存储的目录

    Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...

  5. Vertica DBD 分析优化设计

    DBD = Database Designer,是Vertica数据库优化中最主要的原生工具. 首先运行admintools工具,按下面步骤依次执行: 1.选择"6 Configuratio ...

  6. Vertica节点宕机处理一例

    Vertica节点宕机处理一例: 查询数据库版本和各节点状态 常规方式启动宕机节点失败 进一步查看宕机节点的详细日志 定位问题并解决 1. 查询数据库版本和各节点状态 dbadmin=> sel ...

  7. Vertica集群扩容实验过程记录

    需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...

  8. vertica 8.0 新特性

    前言: <<line>> 表明在vertica 8.0文档中的title   正文: 1-支持平台 1.1-操作系统 <<Vertica Server and Ve ...

  9. vertica单节点安装教程

    [准备] 1.CentOS 7.6的镜像盘(下载地址:官网) 2.vertica-9.1.0-0.x86_64.RHEL6(下载地址:https://pan.baidu.com/s/1IjWBUTku ...

随机推荐

  1. 几个方便编程的C++特性

    前言: C++11的自动化特性给编程提供了不少方便,同时也给调试增加了很多负担,至于取舍看程序员的风格和侧重而定. auto:自动类型推断 在C++11之前,auto关键字用来指定存储期.在新标准中, ...

  2. Java学习笔记2——数据类型和转换

    前提知识: 1字节=8bit:1bit以一个二极管表示,代表2个状态(0或者1):2bit代表22即4种状态(00,01,10,11),8bit即是28即256种状态,16bit即是65536种状态. ...

  3. 动漫绘画软件优动漫PAINT最近所用文件

    在使用优动漫PAINT的时候有时候会遇到这样的问题,近期编辑的文件找不见了,或者想要接着之前的文件进行编辑,如何快速找到这些文件呢?其实在最近所用文件中一目了,本文我们一起来看看. 如果您想接着上次未 ...

  4. PhotoZoom Pro 7 支持哪些图像格式?

    PhotoZoom是一款新颖的.技术上具有革命性的对数码图片无损放大的工具.为设计工作者提供了优良的解决方案,可快速渲染出完美的放大照片,呈现无与伦比的画质效果.将因其应用的广泛性,所以对图像文件的支 ...

  5. mysql8下载与安装

    MySQL各版本的区别 MySQL 8.0.13安装教程(windows 64位)   编码用utf8mb4 Navicat连接mysql出现1862错误

  6. Codeforces Round #471 (Div. 2)B. Not simply beatiful strings

    Let's call a string adorable if its letters can be realigned in such a way that they form two conseq ...

  7. [luogu3726 HNOI2017] 抛硬币 (拓展lucas)

    传送门 数学真的太优秀了Orz 数据真的太优秀了Orz 题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月, ...

  8. echarts在vue里面使用,以及基础配置。

    基础的图表和基础的配置. 效果图如下: 1.安装图表依赖包:npm install echarts 2.在main.js里面 引入echarts import echarts from 'echart ...

  9. 【 ACM-ICPC 2018 沈阳赛区网络预赛 D】Made In Heaven

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 点可以重复走的k短路. [代码] #include <bits/stdc++.h> #define LL long lo ...

  10. Using index, using temporary, using filesort - how to fix this?

    解释一: These are the following conditions under which temporary tables are created. UNION queries use ...