天天看点

Vertica ros和wos介绍

1.单节点的数据存储

  vertica数据存储分为两部分,一是读优存储(read-optimized store,ROS),另一个是写优存储(write-optimized store,WOS),每次更新和插入的数据临时放在WOS部分,WOS达到最大容量后,vertica将数据加载到ROS。SQL查询会访问ROS部分,并且ROS存放已经经过压缩和排序的数据,这样就做到了读写并发两不误,通过tuple mover进程定期将WOS的数据压缩排序后拷贝到ROS区域。   ros总共有1024个sql。  

2.选择加载方式

(1)适用sql 表元数据:CREATE TABLE 和ALTER TABLE DML语句: COPY/ COPY FROM VERTICA,INSERT,MERGE,和UPDATE 如果表指定了加载选项,则除非DML语句另有指定,否则Vertica会将其用于所有DML操作。   (2)加载方式种类 指定该表上面上所有DML语句的默认记载行为,例如insert和copy。

  • AUTO(默认):最初将数据加载到WOS中,适用于较小的批量加载。
  • DIRECT:直接将数据加载到ROS容器中,适用于大容量(> 100 MB)的大容量加载。
  • TRICKLE:仅将数据加载到WOS中,适用于频繁的增量加载。

  (3)使用例子 建表语句:

DROP TABLE IF EXISTS test.history;
CREATE TABLE test.history
(
    id int,
    version varchar(255) NOT NULL,
    description varchar(255) NOT NULL,
    update_date date NOT NULL,
    PRIMARY KEY(id)
)DIRECT;
           

copy语句:

COPY a FROM STDIN DIRECT;
COPY b FROM LOCAL STDIN DIRECT;
           

注意:避免使用DIRECT加载许多较小的数据集。这种方法导致许多ROS容器必须稍后组合。   全局Direct设置:

alter database default set DMLTargetDirect = 1;
show database default DMLTargetDirect;
alter resource pool tm maxconcurrency 7 plannedconcurrency 6;
alter resource pool wosdata memorysize '0%';
           

3.常见错误

(1)错误信息 [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections:   (2)错误原因 是由于过多的ROS碎片导致的,可以通过调小Tuple Mover的参数来优化,参数如下  

参数名称 解释 默认值
MergeOutInterval Tuple Mover在两次检查之间等待新的ROS文件合并的等待秒数。如果经常添加ROS容器,则可能需要减小此值。 600 单位:秒
MoveOutInterval Tuple移动器在两次检查之间需要等待的秒数,该时间是检查 WOS中的新数据以将其移至 ROS的时间。 300 单位:秒

  (3)修改参数语句

SELECT SET_CONFIG_PARAMETER('MergeOutInterval',100);
SELECT SET_CONFIG_PARAMETER('MoveOutInterval',100);
           

(4)手动进行ros合并命令

select DO_TM_TASK ('mergeout');
           

继续阅读