网站怎么做优化推广,重庆网站seo外包,广告商网站建设,网站开发安全机制文章目录
存储格式介绍
一、格式
二、使用建议
三、技术原理
1、列存
2、行存
3、行列共存
四、使用示例 存储格式介绍
一、格式
在Hologres中支持行存、列存和行列共存三种存储格式#xff0c;不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指…
文章目录
存储格式介绍
一、格式
二、使用建议
三、技术原理
1、列存
2、行存
3、行列共存
四、使用示例 存储格式介绍
一、格式
在Hologres中支持行存、列存和行列共存三种存储格式不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指定表的存储格式语法如下
-- 2.1版本起支持
CREATE TABLE table_name (...) WITH (orientation [column | row | row,column]);-- 所有版本支持
BEGIN;
CREATE TABLE table_name (...);
call set_table_property(table_name, orientation, [column | row | row,column]);
COMMIT;注意事项
orientation指定了数据库表在Hologres中的存储模式是列存还是行存Hologres从 V1.1版本开始支持行列共存的模式。建表时默认为列存column storage形式。行存或行列共存需要在建表时显式指定。修改表的存储格式需要重新建表不能直接转换。 二、使用建议
表的存储模式使用建议如下 三、技术原理
1、列存 begin;
create table public.tbl_col (
id text NOT NULL,
name text NOT NULL,
class text NOT NULL,
in_time TIMESTAMPTZ NOT NULL,
PRIMARY KEY (id)
);
call set_table_property(public.tbl_col, orientation, column);
call set_table_property(public.tbl_col, clustering_key, class);
call set_table_property(public.tbl_col, bitmap_columns, name);
call set_table_property(public.tbl_col, event_time_column, in_time);
commit;
select * from public.tbl_col where id 3333;
select id, class,name from public.tbl_col where id 3333 order by id;示意图如下图 2、行存
如果Hologres的表设置的是行存那么数据将会按照行存储。行存默认使用SST格式数据按照Key有序分块压缩存储并且通过Block Index、Bloom Filter等索引以及后台Compaction机制对文件进行整理优化点查查询效率。
PK和Clustering Key一致
系统会为每张表在底层存储一个主键索引文件详情请参见主键Primary Key。行存表设置了Primary KeyPK的场景系统会自动生成一个Row IdentifierRIDRID用于定位整行数据同时系统也会将PK设置为Distribution Key和Clustering Key这样就能快速定位到数据所在的Shard和文件在基于主键查询的场景上只需要扫描一个主键就能快速拿到所有列的全行数据提升查询效率。
PK和Clustering Key不一致
如果在建表时设置表为行存表且将PK和Clustering Key设置为不同的字段查询时系统会根据PK定位到Clustering Key和RID再通过Clustering Key和RID快速定位到全行数据相当于扫描了两次有一定的性能牺牲。
推荐设置主键Primary Key
begin;
create table public.tbl_row (id text NOT NULL,name text NOT NULL,class text ,
PRIMARY KEY (id)
);
call set_table_property(public.tbl_row, orientation, row);
call set_table_property(public.tbl_row, clustering_key, id);
call set_table_property(public.tbl_row, distribution_key, id);
commit;--基于PK的点查示例
select * from public.tbl_row where id 1111;--查询多个key
select * from public.tbl_row where id in (1111,2222,3333); begin;
create table public.tbl_row (id text NOT NULL,name text NOT NULL,class text ,
PRIMARY KEY (id)
);
call set_table_property(public.tbl_row, orientation, row);
call set_table_property(public.tbl_row, clustering_key, id);
call set_table_property(public.tbl_row, distribution_key, id);
commit;--基于PK的点查示例
select * from public.tbl_row where id 1111;设置的PK和Clustering Key不一致(不建议使用)
begin;
create table public.tbl_row (id text NOT NULL,name text NOT NULL,class text ,
PRIMARY KEY (id)
);
call set_table_property(public.tbl_row, orientation, row);
call set_table_property(public.tbl_row, clustering_key, name);
call set_table_property(public.tbl_row, distribution_key, id);
commit;行存总结
行存表非常适用于基于PK的点查场景能够实现高QPS的点查。建表时建议只设置PK系统会自动将PK设置为Distribution Key和Clustering Key以提升查询性能。不建议将PK和Clustering Key设置为不同的字段设置为不同的字段会有一定的性能牺牲。 3、行列共存
在实际应用场景中一张表可能用于主键点查又用于OLAP查询因此Hologres在V1.1版本支持了行列共存的存储格式。行列共存同时拥有行列和列存的能力既支持高性能的基于PK点查又支持OLAP分析。数据在底层存储时会存储两份一份按照行存格式存储一份按照列存格式存储因此会带来更多的存储开销。
数据写入时会同时写一份行存格式和写一份列存格式只有两份数据都写完了才会返回成功保证数据的原子性。数据查询时优化器会根据SQL解析出对应的执行计划执行引擎会根据执行计划判断走行存还是列存的查询效率更高要求行列共存的表必须设置主键。
因此行列共存表在通常查询场景尤其是非主键点查场景查询效率更好示例
begin;
create table public.tbl_row_col (
id text NOT NULL,
name text NOT NULL,
class text ,
PRIMARY KEY (id)
);
call set_table_property(public.tbl_row_col, orientation,row,column);
call set_table_property(public.tbl_row_col, distribution_key,id);
call set_table_property(public.tbl_row_col, clustering_key,class);
call set_table_property(public.tbl_row_col, bitmap_columns,name);
commit;SELECT * FROM public.tbl_row_col where id 2222; --基于主键的点查
SELECT * FROM public.tbl_row_col where class二班;--非主键点查
SELECT * FROM public.tbl_row_col where id 2222 and class二班; --普通OLAP查示意图如下 四、使用示例
创建不同存储模式的表使用示例如下
--建行存表
begin;
create table public.tbl_row (a integer NOT NULL,b text NOT NULL,PRIMARY KEY (a)
);
call set_table_property(public.tbl_row, orientation, row);
commit;--建列存表
begin;
create table tbl_col (a int not null, b text not null);
call set_table_property(tbl_col, orientation, column);
commit;--建行列共存
begin;
create table tbl_col_row (pk text not null, col1 text, col2 text, col3 text, PRIMARY KEY (pk));
call set_table_property(tbl_col_row, orientation, row,column);
commit;博客主页https://lansonli.blog.csdn.net欢迎点赞 收藏 ⭐留言 如有错误敬请指正本文由 Lansonli 原创首发于 CSDN博客停下休息的时候不要忘了别人还在奔跑希望大家抓紧时间学习全力奔赴更美好的生活✨