传统数据库的数据是存在表里的,

和传统数据库不同,Vertica物理上将表数据存在Projections中,Projection实际上是表的列的集合。

和物化视图类似,projections将结果集进行存储在disk上,而不是每次查询时再进行计算。

当有新数据或数据更新时,Vertica会自动刷新这些结果集。

 

Projections有如下好处 : 

  • 将数据进行压缩和编码,减少存储空间需求。直接对编码数据进行操作,降低解码的消耗。
  • 方便集群间的分布。基于其大小,projections可以被segmented(大表场景)或者replicated(其他)。
  • 对终端用户透明。Vertica查询优化器再执行给定查询时,自动选择最好的projection
  • 提供高可用性、可恢复性。集群中,Vertica至少会将表的列复制K+1份。

 

Projection Types

一个Vertica的表通常有许多projections,每个包含了不同的内容。

给定一张表的不同projection的内容之间,再范围和组织形式上可能不同。

  • Superprojections
    对于数据库中的每张表,Vertica需要至少有一个superprojection,这个superprojection包含了该表的所有列。
    在没有query-specific projection的情况下,Vertica使用Superprojection来进行相关操作。支持任何查询和DML
    在某些条件下,Vertica会在创建表时自动创建表的superprojection
    如果没有projection存在,当第一次加载数据到表中时,Vertica也会自动创建superprojection
    也可以使用CREATE PROJECTION语句来进行创建。
    一个表可以包含多个superprojection
    Superprojection可以支持表的所有查询,因此它对于特定的查询来说,不是最优的。

 

  • Query-specific projections
    只包含表列的子集的projection,用于执行给定的查询。会显著的提高这些给定查询的性能。
  • Aggregate projections
    如果一个projection包含表达式、聚合函数的结果数据,那么对于含表达式、聚合函数的查询来说,这是最优的。这种projection被称之为Aggregate projection
    Aggregate又分为三类:
    • projection that containes expressions
    • live aggregate projection
    • Top-K projection

 

Projection segmentation

  • Segmented Projections
    对于大表来说,通常需要创建segmented projectionsVerticasegmented projections切分为更小大小的segments,并将这些segments平均分布在集群节点上。
    K-safety定义了每个segment有多少副本。
    projection segmentation可以达到如下目标:
    • 实现高可用、可恢复性
    • 使用多个节点来加速查询
    • 使不同的节点可以为不同的查询负载单独优化

 

  • Hash segmentation
        Vertica使用hash算法将大的projection进行segment
  • Unsegmented projections
    多数情况下,对于十分小尺寸的表,无需进行segment

Designing projections

Vertica建议使用Database Designer来设计physcal schema

Projection Definition Components

创建projection

=> CREATE PROJECTION retail_sales_fact_p (
     store_key ENCODING RLE,
     pos_transaction_number ENCODING RLE,
     sales_dollar_amount,
     cost_dollar_amount )
AS SELECT 
     store_key, 
     pos_transaction_number, 
     sales_dollar_amount, 
     cost_dollar_amount
FROM store.store_sales_fact
ORDER BY store_key
SEGMENTED BY HASH(pos_transaction_number) ALL NODES;


包含如下四个元素:

  • 列、及其编码
  • 基本查询
  • 排序顺序
  • segmentation
    定义如何将projection分布到数据库的节点上。
  • No labels