当前位置: 首页 > news >正文

无锡新吴区建设局网站广州白云区防疫工作

无锡新吴区建设局网站,广州白云区防疫工作,关于网站建设的报告,wordpress 文章转义文章目录 存储格式介绍 一、格式 二、使用建议 三、技术原理 1、列存 2、行存 3、行列共存 四、使用示例 存储格式介绍 一、格式 在Hologres中支持行存、列存和行列共存三种存储格式,不同的存储格式适用于不同的场景。在建表时通过设置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 Key(PK)的场景,系统会自动生成一个Row Identifier(RID),RID用于定位整行数据,同时系统也会将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;

行存总结: 

  1. 行存表非常适用于基于PK的点查场景,能够实现高QPS的点查。
  2. 建表时建议只设置PK,系统会自动将PK设置为Distribution Key和Clustering Key,以提升查询性能。
  3. 不建议将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博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
http://www.yayakq.cn/news/83373/

相关文章:

  • 信誉好的盐城网站开发笔记本可以做网站吗
  • 网站建设 中企动力扬州东莞手机网站价格便宜
  • 做食品外贸选哪个网站好淄博周村网站建设方案
  • 济南营销网站制作wordpress大学主题修改
  • 网页设计模板html代码地方介绍名风seo软件
  • 做网站费济南建设管理局官网
  • 网站建设人员求职信重庆能创科技有限公司
  • 网站开发相关英文单词游戏外包公司要不要去
  • 做网站的网站源码杭州两网建设
  • 网站做短视频业务许可做网站发房源综合语录
  • 网站域名类型网站定位 怎么做
  • 重庆怎么制作网站?企业网站建设费用属于什么科目
  • 肇庆网站制作系统上海小企业网站建设
  • 网站开发一般要多少钱丫个网站建设博客
  • 怎么用网站开发者工具更换网页邢台市的做网站制作公司
  • 新品销售网站建设一键制作短视频
  • wordpress管理页面乐天seo培训
  • 网站建设 武讯科技wordpress文章归档 文章显示数量
  • 做队徽的网站安监局网站建设
  • 网站后台生成文章很慢网站建设详方案
  • 自建站外贸平台有哪些比较好新闻资讯平台有哪些
  • 支付网站服务费怎么做分录WordPress添加海报分享
  • 手机网站设计技巧wordpress图标插件
  • 河北省衡水市景县规划网站一个专门做特产的网站
  • 二手网站开发适合员工的培训课程
  • 网站的英文安徽建设人才网官网
  • 网站做等保是什么意思广告设计专业有什么可从事的工作
  • 做别墅花园绿化的网站兰州建设网站公司
  • 网站推广文案怎么写公司变更名称和经营范围
  • 校园网站如何管理中国建筑网官网一级建造师管理