1、简介
Vertica是一款基于列存储的MPP(massively parallel processing)架构的数据库。它可以支持存放多至PB(Petabyte)
级别的结构化数据。
2、特性
1)列式存储
vertica以列格式存储数据, 以便在查 询时获得最佳性能。相比基于行的存储, 列存储可减少磁盘I/O, 非常适合读取 密集型工作负载
2)高级压缩
压缩会将数据转换为紧凑的格式。 Vertica 使用多种不同的压缩方法, 并 且可以根据要压缩的数据自动选择最 佳方法
3)高可用
Vertica 使用类似RAID 的功能为数据库 提供高可用性。
4)自动数据库设计
Vertica数据库参数几乎无需二次配置
5)海量并行处理
支持海量的事务并行分析处理
6)应用程序集成
集成了DBD分析引擎、Vertica MC控制 管理平台、Vertica WLM资源控制、 scheduler任务计划对接kafka等
3、vertica组件介绍
wos:将未经压缩或建立索引的数据存储在内存中。
ros:将数据存储在磁盘上;这些数据会经过分段,排序,压缩,以便提高优化水平
tuple mover
moveout ‐ 将数据从WOS 复制到Tuple Mover, 然后再复制到ROS; 数据在列式文件中会经过排序、编码和压缩
mergeout ‐ 将若干较小的ROS 容器组合成一个较大的容器, 以 便减少碎片
4、vertica数据导入
5、Projection简介
Projection是Vertica 存储数据的方式 – 由一个或多个表中的列集组成
由Vertica 自动维护 – 不进行夜间Projection重建
每个Projection存储单独的数据副本 – 编码和压缩最大程度地降低存储需求
vertica对象层次化:
Projection类型
- 超级Projection (Super projection) – 包含一个逻辑表的所有列的Projection
- 特定于查询的Projection (Query-specific projection) – 针对特定查询或一类查询优化 – 可以包括列子集
- 预联接Projection (Pre-Join projection) – 存储一个事实表与一个或多个维度表之间的联接结果
- 分支Projection (Buddy projection) – 具有相同列和分段的Projection位于不同的节点上,可提供高可用性(HA)
如何创建projection
- 首次将数据加载到表中时自动创建 – 未经优化的超级Projection (Super projection)
- 使用Database Designer 自动创建 – 经优化的超级Projection (Super projection) – 可能是特定于查询的Projection (Query-specific projection)
- 在vsql语句中使用CREATE PROJECTION 语法手动创建
编码/压缩与排序
- 每个列始终经过编码、压缩,或者编码并压缩。
- Vertica 可以直接处理编码的数据;压缩的数据则必须首先解压缩。
- 在ORDER BY 语句中,所有Projection至少包含一个列
复制示例
- 对于小型Projection,会将完整Projection复制到每个节点 – 本质上提供了此Projection的高可用性
分段示例
- 对于大型Projection,将Projection数据分布在多个节点上
分段和高可用性示例
- 分支Projection为分段的Projection提供高可用性 – 分支Projection (Buddy projection) 是Projection段的副本,存储在其他节点上 – K 级安全是存在于群集上的数据副本
分段、复制、K 级安全示例
- 具有分支Projection (Buddy projection) 的分段
- 复制
添加Projection
- 创建Projection的元数据 – \i .sql – vsql –f .sql
- 将数据复制到新Projection中 – SELECT start_refresh();(后台) – SELECT refresh();(前台)
- 查看刷新状态 – SELECT get_projection_status ('projection_name'); – SELECT * FROM v_monitor.projection_refreshes;
- 完成刷新后,新的Projection可以自动用于回答查询
查看并删除Projection
- 查看所有Projection – \dj – SELECT * FROM v_catalog.projections;
- 删除旧Projection – 表中的最后一个超级Projection (Super projection) 不能删除 – 可能需要将久远历史标记前移(将在之后说明)
- SELECT make_ahm_now();
- DROP projection ;