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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 标签 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的逻辑存储结构
PostgreSQL的逻辑存储结构包括数据库集群、数据库、表空间、段、区、块等。每个对象都有唯一的对象标识符OID,并存储于相应的系统目录表中。集群由单个服务器实例管理,包含多个数据库、用户及对象。表空间是数据库的逻辑存储单元,用于组织逻辑相关的数据结构。段是分配给表、索引等逻辑结构的空间集合,区是段的基本组成单位,而块则是最小的逻辑存储单位。
【赵渝强老师】PostgreSQL的逻辑存储结构
|
关系型数据库 数据库 索引
AnalyticDB for PostgreSQL 黑科技解析 - 列存储 Meta Scan 性能加速
本文介绍阿里云 AnalyticDB for PostgreSQL(原HybridDB for PostgreSQL) 产品,即 MPP 数据仓库服务,其列存储 meta scan机制,及其对 分析场景的性能提升。
2631 0
|
24天前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的物理存储结构
PostgreSQL在初始化时通过环境变量$PGDATA指定的目录下生成各类文件,构成其物理存储结构,包括数据文件、日志文件(如运行日志、WAL预写日志、事务日志和服务器日志)、控制文件及参数文件等,确保数据库的高效运行与数据安全。
|
存储 关系型数据库 对象存储
PolarDB-PG | PostgreSQL + 阿里云OSS 实现高效低价的海量数据冷热存储分离
数据库里的历史数据越来越多, 占用空间大, 备份慢, 恢复慢, 查询少但是很费钱, 迁移慢 怎么办? 冷热分离方案: - 使用PostgreSQL 或者 PolarDB-PG 存成parquet文件格式, 放到aliyun OSS存储里面. 使用duckdb_fdw对parquet文件进行查询. - duckdb 存储元数据(parquet 映射) 方案特点: - 内网oss不收取网络费用, 只收取存储费用, 非常便宜 - oss分几个档, 可以根据性能需求选择 - parquet为列存储, 一般历史数据的分析需求多,性能不错 - duckdb 支持 parquet下推过滤, 数据过滤性能不错
7082 6
PolarDB-PG | PostgreSQL + 阿里云OSS 实现高效低价的海量数据冷热存储分离
|
存储 对象存储 块存储
|
存储 缓存 NoSQL
[译]解锁TOAST的秘密:如何优化PostgreSQL的大型列存储以最佳性能和可扩展性
[译]解锁TOAST的秘密:如何优化PostgreSQL的大型列存储以最佳性能和可扩展性
269 0
|
存储 关系型数据库 API
|
存储 关系型数据库 Linux
|
存储 SQL 缓存
PostgreSQL 内核解读系列 - 第4节 存储管理(下)
本文整理自阿里云数据库开源社区 Maintainer 于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分: 1. 磁盘管理 2. 空闲空间映射表(FSM) 3. 可见性映射表(VM) 4. 内存管理。
PostgreSQL 内核解读系列 - 第4节 存储管理(下)
|
存储 关系型数据库 分布式数据库
直播预告 | PolarDB for PostgreSQL - 共享存储在线扩容
随着业务的发展,当数据库的存储容量不能满足数据规模的增长时,需要对存储空间进行扩容,此过程中会因数据迁移而导致服务中断。本期开源学堂将演示对部署在共享存储上的 PolarDB-PG 集群进行不中断业务的在线扩容,同时简析部署流程背后的技术原理。
 直播预告 | PolarDB for PostgreSQL - 共享存储在线扩容