The Vertica Analytic Database:C-Store 7 Years Later笔记
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)。那么什么是事务压力,什么是分析压力呢。
- Transactional:事务压力主要来自于每秒的事务并发量可能有上千,并且这些事务涉及少量的元组。通常是删除某些元组,增加某些元组,或者修改某一列上的某一个值。
- Analytic:分析压力并不在于多数的事务并发,分析压力主要在于每一个事务所涉及的元组数很多,可能是一张表中的大部分元组。
既然Vertica数据库应用场景在于分析,所以主要压力来源于查询,那么列式数据库相对于传统的行式数据库而言,在事务上控制相对难,但是在查询和分析上有天然的优势。
2、数据模型
这一部分Vertica的设计和C-Store基本一致,在数据模型上,同样是projection和segment,Vertica同样是分布式数据库,在数据分布上,以Segment为单位,至于怎样划分Segement,Vertica采用Hash某一个属性值得方式进行划分。
另外在压缩方面,也和C-Store大同小异。压缩方式有六种:
- Auto:系统基于存储内容自动选择最优的编码方式
- RLE:通过一个简单的键值对(值和值出现的次数)来替换一个连续的序列
- Delta Value:记录增量数据。
- Block Dictionary:字典压缩
- Compressed Delta Range:通过记录和上一条记录的差异来存储数据
- Compressed Common Delta:对所有的增量数据建立字典。
3、查询执行
这一块儿是Vertica相对于C-Store改进的地方,查询执行的主要目的在于解析SQL语句,转变为数据库内部可以执行的执行方案。那么针对这一目的,Vertica设计了查询执行这一模块。
3.1 物理运算符
计划的执行是通过Execution Engine(EE)进行的,在EE内部,实现了7种物理运算符:
- Scan:从一个projection里面读出数据。
- GroupBy:对数据进行group和agg操作,在这一块儿有基于hash的不同算法,具体用哪一种算法取决于需要多高的效率,多大的内存以及运算符是否需要提供独立的组别。
- Join:实现了关系与关系之间的join操作,包括INNER,LEFT OURTER,RIGHT OUTER,FULL OUTER,SEMI以及ANTI joins
- ExprEval:对一个表达式进行计算
- Sort:对数据进行排序
- Analytic:计算SQL-99中的聚合运算方面的操作(max,avg,sum等等)
- Send/Recv:从一个节点发送元组到另一个节点或者是接收从另外一个节点发送过来的元组。

6.2 查询优化
在C-Store中,有最小化的查询优化模块,只提供了很简单的查询优化操作,join的操作顺序呢完全是随机的。这一块儿是Vertica相比于C-Store改进最大的地方,Vertica在查询优化方面经历了三个阶段:StarOpt,StarifiedOpt,以及V2Opt。
但是论文里面仅仅只是对这三个阶段进行了介绍,并没有说明实现的具体思路是什么。所以很可惜,毕竟是HP的商业数据库,所以这一块儿只能有一个大概的思想和思路。
The Vertica Analytic Database:C-Store 7 Years Later笔记的更多相关文章
- Vertica使用Database Designer创建完整的设计
Vertica Database Designer 分析逻辑架构,示例数据库可以分析实力查询. 创建可自动部署或手动部署的物理架构设计(一组投射) 任何不具备数据库专业知识的人员均可使用 可以随时运行 ...
- .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- Vertica 导出数据测试用例
需求:构建简单的测试用例,完成演示Vertica导出数据的功能. 测试用例:导出test业务用户t_jingyu表中的数据. 一.初始化测试环境 二.导出数据 2.1 vsql命令说明帮助 2.2 导 ...
- Vertica增加一个数据存储的目录
Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...
- Vertica DBD 分析优化设计
DBD = Database Designer,是Vertica数据库优化中最主要的原生工具. 首先运行admintools工具,按下面步骤依次执行: 1.选择"6 Configuratio ...
- Vertica节点宕机处理一例
Vertica节点宕机处理一例: 查询数据库版本和各节点状态 常规方式启动宕机节点失败 进一步查看宕机节点的详细日志 定位问题并解决 1. 查询数据库版本和各节点状态 dbadmin=> sel ...
- Vertica集群扩容实验过程记录
需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...
- vertica 8.0 新特性
前言: <<line>> 表明在vertica 8.0文档中的title 正文: 1-支持平台 1.1-操作系统 <<Vertica Server and Ve ...
- vertica单节点安装教程
[准备] 1.CentOS 7.6的镜像盘(下载地址:官网) 2.vertica-9.1.0-0.x86_64.RHEL6(下载地址:https://pan.baidu.com/s/1IjWBUTku ...
随机推荐
- 关于如何成为高级java程序员
今日,对如何进一步提升java.成为一个高级的程序员有了兴趣,在网上看到一篇回答,感觉不错,记下来 总结了以下六点:一.JAVA基础 要想成为高级Java程序员,Java是一定要学习的.要成为高级程序 ...
- Nuget包含css\js等资源文件
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netst ...
- windows 命令行 for 用法
for /r 目录名 %i in (匹配模式1,匹配模式2) do @echo %i for /r SATA %i in (*.txt) do @echo %i D:\REY\test>for ...
- PostgreSQL 安装配置 (亲测可用)
转自:http://blog.csdn.net/jesseyoung/article/details/41348835 受作者博客限制,请访问上面的链接 ---------- 下面是另一个转载 --- ...
- django迁移数据库报错解决
迁移数据库时提示之前的项目中模型未引入 如图 我在创建新的工程时,迁移数据模型时发现出错,错误提示关联模型未被解决,提示的模型是之前项目中定义的,本项目并没有用到.于是在不知道错误原因下,我重装dja ...
- Django 中Admin站点的配置
Admin站点是django提供的一个后台管理页面,可以用来对用户与数据库表数据进行管理. Admin站点配置流程 1.在settings.py文件中INSTALL_APPS列表中添加django.c ...
- Python for Xpath
# Xpath- 在XML文件中查找信息的一套规则/语言,根据XML的元素或者属性进行遍历 ## Xpath开发工具- 开源的Xpath表达式编辑工具:XMLQuire- Chrome插件:Xpath ...
- 四大MQ比较及MQ详解
消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之 一.当今市面上有很多主流的消息中间件,如老牌的Activ ...
- jQuery练习总结(二)
--------------------------------------- <!DOCTYPE html> <!DOCTYPE HTML PUBLIC "-//W3C/ ...
- 将 excel文件数据导入MySQL数据库中
第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:\city.txt 第四步:避免创 ...