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
|
300 单位:秒
|
(3)修改参数语句
SELECT SET_CONFIG_PARAMETER('MergeOutInterval',100);
SELECT SET_CONFIG_PARAMETER('MoveOutInterval',100);
(4)手动进行ros合并命令
select DO_TM_TASK ('mergeout');