vertica介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hmxz2nn/article/details/84894579

简介

Vertica是一款基于列存储的MPP(massively parallel processing)架构的数据库。它可以支持存放多至PB(Petabyte)级别的结构化数据。是由关系数据库大师Michael Stonebraker(2014 年图灵奖获得者)所创建,于2011年被惠普收购并成为其核心大数据平台软件。

Vertica 采用无共享的MPP 架构,基于工业标准的x86 服务器,拥有高可扩展性。
Vertica 集群中的所有节点100%对等,集群中没有主节点或其他共享资源。通过增加节点,就可以线性地扩展集群的计算能力和数据处理容量。
Vertica 是真正的纯列式数据库,优化器和执行引擎可以忽略表中与查询无关的列。Vertica 不仅仅按列式存储数据,还主动地根据列数据的特点和查询的要求选用最佳的算法对数据进行排序和编码压缩,这就极大地降低磁盘I/O 消耗。同时,Vertica 的执行引擎和优化器也是基于列式数据库设计的,编码压缩过的列数据在Vertica 的执行引擎中进行过滤、关联、分组等操作时不需要解反编码,从而大大降低了CPU 和内存消耗。
Vertica 充分利用列式存储的优点,在保持对前端应用透明的前提下,把数据在集群中的所有节点进行均匀分布的同时,还在多个节点上对同一份数据维护了多个拷贝,确保任意一个或几个节点出现故障或进入维修状态都不会影响集群的健康状态。这使得Vertica 拥有类似磁盘RAID 一样高可靠性。
无共享的MPP 架构和真正的列式数据库特性,使Vertica 拥有高性能、高扩展性、高压缩率、高健壮性的特点。与传统的解决方案相比,Vertica 可以以30%的成本,实现50 倍-1000 倍的性能提高。
-----------------------------------------------------------------------------以上来自百度百科-----------------------------------------------------------------------

Vertica架构基础知识

Vertica体系结构的核心有几个关键概念,介绍如下:

列存储

Vertica以列格式存储数据,因此可以查询以获得最佳性能。与基于行的存储相比,列存储减少了磁盘I / O,使其成为读取密集型工作负载的理想选择。Vertica仅读取回答查询所需的列。例如:

=> SELECT avg(price)FROM tickstore WHERE symbol ='AAPL'和date ='5/31/13';

对于此示例查询,列存储只读取三列,而行存储读取所有列:
在这里插入图片描述

数据编码和压缩

Vertica使用编码和压缩来优化查询性能并节省存储空间。

编码将数据转换为标准格式。Vertica使用许多不同的编码策略,具体取决于列数据类型,表基数和排序顺序。编码提高了性能,因为在查询执行期间磁盘I / O较少。此外,您可以在更小的空间中存储更多数据。

压缩将数据转换为紧凑格式。Vertica使用多种不同的压缩方法,并自动为压缩数据选择最佳压缩方法。使用压缩,Vertica可以存储更多数据,提供更多视图,并且使用的硬件比其他数据库少。使用压缩可以在物理存储中保留更多历史数据。

聚集

群集支持扩展和冗余。您可以通过添加更多节点来扩展数据库群集,并且可以通过在群集中分发和复制数据来提高可靠性。
下图是K-safe=1的情况(k-safe技术:保证在vertica集群内,每一个数据库的每一个表的每一个列都被存储在至少K+1台机器上,这样当K台机器不可用,仍然有一个完整的数据库备份可用)。
在这里插入图片描述
列数据分布在集群中的节点上,因此如果一个节点变得不可用,则数据库继续运行。将节点添加到群集或在不可用后重新联机时,它会自动查询其他节点以更新其本地数据。

Projections

(A projection consists of a set of columns with the same sort order, defined by a column to sort by or a sequence of columns by which to sort)。与传统数据库中的索引或物化视图一样,projections可加速查询处理(同一张表的多个projection可按不同排序方式、压缩模式以及数据分布满足查询的多样性)。根据原始表编写查询时,查询使用projections返回查询结果。

projections在群集中的节点之间分布和复制,确保如果一个节点不可用,则另一个数据副本仍然可用。
通过自动数据复制,故障转移和恢复提供了主动冗余,从而提高了性能。节点通过查询系统自动恢复。

Logical and Physical Schema

Vertica将有关数据库对象的信息存储在逻辑架构和物理架构中。两种模式之间的差异以及它们与数据存储的关系是Vertica体系结构的一个重要且独特的方面。

逻辑模式包含的对象,包括表,约束,和视图。Vertica支持您选择的任何关系模式设计。A physical schema consists of collections of table columns called projections. A projection can contain some or all of the columns of a table.

常见的vertica概念

逻辑架构

逻辑模式由以下对象组成:
模式

视图
参照完整性

物理架构

与在表中存储数据的传统数据库不同,Vertica将表数据物理存储在projections中,projections是表列的集合。projections以优化查询执行的格式存储数据。与物化视图一样,projections将结果集存储在磁盘上,而不是在每次在查询中使用时计算它们。Vertica会自动使用更新或新数据刷新这些结果集。

projections提供以下好处:

1.压缩和编码数据以减少存储空间。
2.促进跨数据库群集的分发。根据其大小,可以跨群集节点对projections进行分段或复制。例如,可以对大表的projections进行分段并在所有节点上分布。可以跨所有节点复制小表的未分段projections。
3.对最终用户透明。该Vertica的查询优化器会自动选择执行给定查询的最佳projections。
4.提供高可用性和恢复。Vertica复制群集中至少K + 1个节点上的表列。如果一台计算机在K-Safe环境中出现故障,则数据库将继续使用其余节点上的复制数据进行操作。当节点恢复正常操作时,它会自动查询其他节点以恢复数据和丢失的对象。

projections分类

1.Superprojections
对于数据库中的每个表,Vertica至少需要一个包含表中所有列的Superprojections。在没有特定于查询的projections的情况下,Vertica使用表的Superprojections,它可以支持任何查询和DML操作。

在某些情况下,Vertica 会在创建表时立即自动创建表的Superprojections。当您第一次将数据加载到该表时,如果不存在,则Vertica还会创建Superprojections。CREATE PROJECTION如果指定包含所有表列,则可以创建Superprojections。一张表可以有多个Superprojections。

虽然Superprojections可以支持表上的所有查询,但它们不能促进特定查询的最佳执行。

2.查询特定projections
特定于查询的projections是一种仅包含用于处理给定查询的表列子集的projections。特定于查询的projections显着提高了优化它们的查询的性能。

3.汇总projections
包含表达式或聚合函数(如SUM和COUNT)的查询在使用已包含聚合数据的projections时可以更有效地执行。对于大量数据的查询尤其如此。
Vertica提供了三种类型的projections,用于存储从聚合函数或表达式返回的数据:
1)包含表达式的projections:使用从锚表列计算值的列进行projections。
2)实时聚合projections:包含具有从其锚表中的列聚合的值的列的projections。还可以定义包含用户定义的转换函数的实时聚合projections。
3)Top-Kprojections:实时聚合projections的类型,它返回所选行的分区中的前k行。创建满足Top-K查询条件的Top-K projections。

后边写不下去了,还是在使用的过程中查看官方文档吧。

参考:
https://www.vertica.com/documentation/vertica/9-1-x/

博客:http://blog.sina.com.cn/s/blog_75ad98f30102w6pl.html
关于vertica的特性写的比较详细,可进行参考。

猜你喜欢

转载自blog.csdn.net/hmxz2nn/article/details/84894579