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

本文涉及的产品
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 标签 PostgreSQL , 列存 , 混合存储 , 列存索引 , 向量化存储 , 混合索引 , ros , wos , cstore , ocr , vector index , roadmap 背景 列存优势 1、列存没有行存1666列的限制 2、列存的大量记录数扫描比行存节约资源 3、列存压缩比高,节约空间 4、列存的大量数据计算可以使用向量化执行,效率高 行存优势

标签

PostgreSQL , 列存 , 混合存储 , 列存索引 , 向量化存储 , 混合索引 , ros , wos , cstore , ocr , vector index , roadmap


背景

列存优势

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


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 (志铭奉献)》

 

免费领取阿里云RDS PostgreSQL实例、ECS虚拟机

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
3月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的逻辑存储结构
PostgreSQL的逻辑存储结构包括数据库集群、数据库、表空间、段、区、块等。每个对象都有唯一的对象标识符OID,并存储于相应的系统目录表中。集群由单个服务器实例管理,包含多个数据库、用户及对象。表空间是数据库的逻辑存储单元,用于组织逻辑相关的数据结构。段是分配给表、索引等逻辑结构的空间集合,区是段的基本组成单位,而块则是最小的逻辑存储单位。
110 2
【赵渝强老师】PostgreSQL的逻辑存储结构
|
21天前
|
JSON 关系型数据库 PostgreSQL
PostgreSQL 9种索引的原理和应用场景
PostgreSQL 支持九种主要索引类型,包括 B-Tree、Hash、GiST、SP-GiST、GIN、BRIN、Bitmap、Partial 和 Unique 索引。每种索引适用于不同场景,如 B-Tree 适合范围查询和排序,Hash 仅用于等值查询,GiST 支持全文搜索和几何数据查询,GIN 适用于多值列和 JSON 数据,BRIN 适合非常大的表,Bitmap 适用于低基数列,Partial 只对部分数据创建索引,Unique 确保列值唯一。
|
6月前
|
监控 关系型数据库 数据库
PostgreSQL的索引优化策略?
【8月更文挑战第26天】PostgreSQL的索引优化策略?
151 1
|
2月前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的物理存储结构
PostgreSQL在初始化时通过环境变量$PGDATA指定的目录下生成各类文件,构成其物理存储结构,包括数据文件、日志文件(如运行日志、WAL预写日志、事务日志和服务器日志)、控制文件及参数文件等,确保数据库的高效运行与数据安全。
113 1
|
6月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
698 0
|
6月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL索引维护看完这篇就够了
PostgreSQL索引维护看完这篇就够了
445 0
|
存储 关系型数据库 数据库
PostgreSQL技术大讲堂 - 第28讲:索引内部结构
从零开始学PostgreSQL技术大讲堂 - 第28讲:索引内部结构
826 2
|
关系型数据库 Go 数据库
《提高查询速度:PostgreSQL索引实用指南》
《提高查询速度:PostgreSQL索引实用指南》
621 0
|
关系型数据库 分布式数据库 数据库
PolarDB for PostgreSQL 14:全局索引
PolarDB for PostgreSQL 14 相较于 PostgreSQL 14,提供了更多企业级数据库的特性。本实验将体验其中的全局索引功能。
|
弹性计算 关系型数据库 OLAP
AnalyticDB PostgreSQL版向量索引查询
本案例对比了传统查询和使用向量索引执行查询的执行时间,助您体验使用向量索引查询带来的高效和快捷。