PostgreSQL 列存, 混合存储, 列存索引, 向量化存储, 混合索引 - OLTP OLAP OLXP HTAP 混合负载应用

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: PostgreSQL 列存, 混合存储, 列存索引, 向量化存储, 混合索引 - OLTP OLAP OLXP HTAP 混合负载应用

背景

列存优势

1、列存没有行存1666列的限制

2、列存的大量记录数扫描比行存节约资源

3、列存压缩比高,节约空间

4、列存的大量数据计算可以使用向量化执行,效率高

行存优势

1、行存查询多列时快

2、行存DML效率高

简单来说,行存适合OLTP业务,列存适合OLAP业务。

如果业务是混合负载,既有高并发SQL,又有实时分析业务怎么办?

Oracle的做法:

in memory column store,实际上是两份存储,一份在磁盘(行存),一份在内存中使用列存。

根据SQL,优化器选择扫描列存还是行存。(通常看planNODE中数据扫描的行选择性,输出的行数,输出的列数等)

Oracle in memory column store是两份存储的思路。

PostgreSQL如何应对混合业务场景呢?

当前PG已经有了SMP并行执行的优化器功能,丰富的聚合函数,窗口函数等,已经有很好的OLAP处理能力。如果能在数据存储组织形式上支持到位,势必会给OLAP的能力带来更大的质的飞跃,以更好的适合OLTP OLAP混合业务场景。

一些PG 混合存储的资料

1、PG roadmap

https://www.postgresql.org/developer/roadmap/

https://wiki.postgresql.org/wiki/PostgreSQL11_Roadmap

里面有提到postgres pro, fujsut 都有计划要开发列存储或者读、写优化索引。

2、PostgreSQL 12 可能会开放storage pluggable API,以支持列存组织形式表。

https://commitfest.postgresql.org/22/1283/

3、ROS, WOS

读优化和写优化存储,适合TP AP混合业务

https://www.postgresql.org/message-id/flat/CAJrrPGfaC7WC9NK6PTTy6YN-NN%2BhCy8xOLAh2doYhVg5d6HsAA%40mail.gmail.com

4、citus开发的PG支持向量化执行的代码,在使用列存储时,AP查询的性能有巨大的提升。

https://github.com/citusdata/postgres_vectorization_test

5、《Extending PostgreSQL with Column Store Indexes》

6、cstore, citusdata(已被微软收购),开源的列存储FDW插件

https://www.citusdata.com/blog/2014/04/03/columnar-store-for-analytics/

7、2ndquadrant 公司的PG列存开发计划
https://blog.2ndquadrant.com/column-store-plans/

8、PG 列存储开发计划讨论wiki

https://wiki.postgresql.org/wiki/ColumnOrientedSTorage

9、《Column-Stores vs. Row-Stores: How Different Are They Really?

10、custom scan provide接口,pg_strom插件使用csp接口实现了gpu加速,其中GPU加速支持数据加载到GPU缓存、或者文件中以列形式组织,加速AP请求的SQL。(这种为非实时维护的数据组织形式,而是读时组织的形式)

http://heterodb.github.io/pg-strom/

11、In-Memory Columnar Store extension for PostgreSQL,PG的内存列存表插件

https://github.com/knizhnik/imcs

12、vops,PG的瓦片式存储(不改变现有HEAP存储接口),以及向量化执行组合的插件。

https://github.com/postgrespro/vops/blob/master/vops.html

《PostgreSQL VOPS 向量计算 + DBLINK异步并行 - 单实例 10亿 聚合计算跑进2秒》

《PostgreSQL 向量化执行插件(瓦片式实现-vops) 10x提速OLAP》

PostgreSQL 列存, 混合存储, 列存索引, 向量化存储, 混合索引 - OLTP OLAP OLXP HTAP 混合负载优化

根据以上资料,可以总结出得到一个结论:

一份数据,多种组织形式存储。不同的组织形式存储适合于不同的业务,不同的数据组织形式存储,有不同的数据扫描方法,根据SQL的统计信息,PLAN等信息判断选择采用什么样的组织形式的数据访问。

而恰好PG的可扩展性,非常适合于扩展出一份数据,多份存储的功能。

1、AM扩展接口,用于索引的扩展,例如当前PG以及支持了9种索引接口(btree, hash, gin, gist, spgist, brin, bloom, rum, zombodb)。

2、plugable storage接口。PG 12可能会发布这个新功能。

1 优化思路

1、写优化

2、读优化

2 数据组织形式

1、表组织形式

多份表的组织形式(多个数据副本),例如以HEAP存储为主(DML, OLTP业务),以列存储为辅(OLAP业务),数据落HEAP存储后返回,以保障SQL的响应速度,后台异步的合并到列存储。

不同的组织形式存储适合于不同的业务,不同的数据组织形式存储,有不同的数据扫描方法,根据SQL的统计信息,PLAN等信息判断选择采用什么样的组织形式的数据访问。

主,辅形式类似GIN索引的思路,fast update 方法,使用pending list区域,降低GIN索引引入的写RT升高,导致数据写入吞吐下降的问题。

2、索引组织形式

数据存储格式为一份(行存储,OLTP),增加一种索引接口(列组织形式(OLAP业务)),例如叫做VCI。

当有OLAP业务需求是,创建VCI索引,优化器根据SQL请求,决定使用VCI索引,还是TP型的索引。

3、分区表混合组织

不同的分区使用不同的组织形式。

例如,这种情况适合不同时间区间有不同的访问需求的场景。比如1个月以前的数据,大多数适合都是AP型的请求,1个月内的数据基本上是高并发的OLTP请求。可以针对不同的分区,采用不同的数据组织形式存储。

4、分区索引混合组织

不同的分区使用不同的索引组织形式。

类似分区表混合组织。

3 实现思路

1、扩展AM,即数据使用行存,索引使用列存储。扩展列存索引接口。

2、扩展存储接口,一份数据,多份表存储的形式。不同的表存储形式,可以有自己独立的索引体系。优化器根据SQL请求,选择不同的数据存储形式,进行访问,以适合OLTP OLAP的混合请求。

参考

《Greenplum 优化CASE - 对齐JOIN字段类型,使用数组代替字符串,降低字符串处理开销,列存降低扫描开销》

《PostgreSQL GPU 加速(HeteroDB pg_strom) (GPU计算, GPU-DIO-Nvme SSD, 列存, GPU内存缓存)》

《Greenplum 海量数据,大宽表 行存 VS 列存》

《PostgreSQL 如何让 列存(外部列存) 并行起来》

《[未完待续] PostgreSQL ORC fdw - 列存插件》

《Greenplum 行存、列存,堆表、AO表性能对比 - 阿里云HDB for PostgreSQL最佳实践》

《Greenplum 列存储加字段现象 - AO列存储未使用相对偏移》

《Greenplum 行存、列存,堆表、AO表的原理和选择》

《Greenplum 列存表(AO表)的膨胀、垃圾检查与空间收缩(含修改分布键)》

《列存优化(shard,大小块,归整,块级索引,bitmap scan) - (大量数据实时读写)任意列搜索》

《PostgreSQL 10.0 preview 功能增强 - OLAP增强 向量聚集索引(列存储扩展)》

《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》

《Greenplum 最佳实践 - 行存与列存的选择以及转换方法》

《PostgreSQL 列存储引擎 susql (志铭奉献)》

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
9天前
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
21 5
|
存储 NoSQL 关系型数据库
|
存储 并行计算 Cloud Native
PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检索时序数据
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的 价值产出, 将数据变成生产力. 本文将介绍PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检索时序数据
211 0
|
7月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检索时序数据
背景PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的 价值产出, 将数据变成生产力.本文将介绍PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检...
135 0
|
存储 关系型数据库 OLAP
PostgreSQL 列存, 混合存储, 列存索引, 向量化存储, 混合索引 - OLTP OLAP OLXP HTAP 混合负载应用
标签 PostgreSQL , 列存 , 混合存储 , 列存索引 , 向量化存储 , 混合索引 , ros , wos , cstore , ocr , vector index , roadmap 背景 列存优势 1、列存没有行存1666列的限制 2、列存的大量记录数扫描比行存节约资源 3、列存压缩比高,节约空间 4、列存的大量数据计算可以使用向量化执行,效率高 行存优势
5260 0
PostgreSQL 列存, 混合存储, 列存索引, 向量化存储, 混合索引 - OLTP OLAP OLXP HTAP 混合负载应用
|
存储 监控 分布式数据库
解密OpenTSDB的表存储优化
本篇文章会详细讲解OpenTSDB的表结构设计,在理解它的表结构设计的同时,分析其采取该设计的深层次原因以及优缺点。它的表结构设计完全贴合HBase的存储模型,而表格存储(TableStore、原OTS)与HBase有类似的存储模型,理解透OpenTSDB的表结构设计后,我们也能够对这类数据库的存储
28180 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版