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. RxSwift學習教程之基礎篇

    前言 我們在 iOS 開發過程中,幾乎無時無刻都要面對異步事件的處理.例如,按鍵點擊.數據保存..音頻後臺播放.交互動畫展示.這些事件並不具備特定時序性,甚至它們可能同時發生. 雖然 Apple 提供 ...

  2. js prototype 原型

    //https://xxxgitone.github.io/2017/06/10/JavaScript%E5%88%9B%E5%BB%BA%E5%AF%B9%E8%B1%A1%E7%9A%84%E4% ...

  3. 【前端】CSS隐藏元素的方法和区别

    CSS隐藏元素的方法和区别 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  4. The socket is closed!

    关闭mongodb    /usr/local/app/mongidb//bin/mongod   --shutdown  --dbpath /usr/local/data/mongo/data/ 然 ...

  5. ASCII 码对照表

    ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ! 65 A 97 a 2 ST ...

  6. [洛谷 P2365] 任务安排 (线性dp)

    3月14日第二题!! 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...

  7. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  8. CentOS 笔记(四) Jexus部署相关

    ①设置jexus 为服务 cd /lib/systemd/system/ sudo vi jexus.service #注意 jexus 实际路径 [Unit] Description=jexus A ...

  9. docker-compose,docker-machine,docker swarm 的简单总结

    1.docker-compose: 用来在单机上启动一组应用服务.这个服务中可能包含有很多应用,比如你的app服务,redis,mysql,等等. (1)我们需要先创建好docker-compose的 ...

  10. 《黑白团团队》第八次团队作业:Alpha冲刺 第二天

    项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 团队项目Github仓库地址链接. 第二天 日期:2019/6/16 成员 ...