将Postgres转变为快速OLAP数据库

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

pg_analytics是一个扩展,提高Postgres数据库的本地分析性能,加速分析查询,无需数据迁移。使用Apache Arrow和DataFusion优化查询,通过Parquet保存数据。构建基于Postgres的分析型数据库的好时机。

🔎

延伸解读

性能提升的基准与局限

pg_analytics 宣称将 Postgres 分析性能提升 94 倍,但网友指出在 Clickbench 基准中其性能仍远不及顶级 OLAP 数据库。Clickbench 查询较简单,与真实分析场景有差距,且未包含 TPC-DS 和 TPC-H 等复杂测试。因此,94 倍提升是相对于普通 Postgres 的改进,而非绝对领先。读者需结合自身查询复杂度评估实际收益。

技术实现与数据压缩优势

pg_analytics 通过表访问方法和执行器钩子集成 Apache Arrow 与 DataFusion,支持列式存储和 Parquet 格式,压缩能力是普通 Postgres 和 Elasticsearch 的 5 倍。Delta-rs 为 Parquet 添加 ACID 事务、更新删除及云数据湖查询支持。这些技术使 Postgres 无需 ETL 即可获得分析加速,但依赖外部引擎,可能引入新的维护复杂度。

OLTP 与 OLAP 的架构选择

文章认为大型企业将 OLTP 和 OLAP 分离到不同数据库是正确选择,便于不同团队专注各自任务。pg_analytics 提供在 Postgres 内加速分析的即插即用方案,避免数据迁移和孤岛。但网友提到已有 Greenplum、Citus、Hydra 等 Postgres 分支用于 OLAP,且 StarRocks 等专用数据库可能更合适。选择时需权衡集成便利性与极致性能。

❓

Q&A

pg_analytics 是什么?它有什么主要作用?

pg_analytics 是一个 Postgres 扩展,可将任何 Postgres 数据库的本地分析性能提高 94 倍。它直接在 Postgres 内部加速分析查询,无需 ETL 过程,是即插即用的解决方案。

pg_analytics 如何提升 Postgres 的分析性能?

pg_analytics 通过 Apache Arrow 使用面向列的布局,并利用 Apache DataFusion 查询引擎优化查询。数据以 Parquet 格式保存,压缩能力是普通 Postgres 和 Elasticsearch 的 5 倍。它通过表访问方法和执行器钩子与 Postgres 集成,拦截查询并转发给 DataFusion 执行。

使用 pg_analytics 后,Postgres 的性能与 Elasticsearch 和 ClickHouse 相比如何?

安装 pg_analytics 后,Postgres 的速度比 Elasticsearch 快 8 倍,在分析基准测试中几乎与 ClickHouse 不相上下。

pg_analytics 如何处理数据存储和事务?

数据通过 Parquet 保存到磁盘,这是一种高度压缩的面向列的文件格式。delta-rs 库为 Parquet 存储添加了 ACID 事务、更新和删除以及文件压缩功能,还支持通过 S3 等数据湖进行查询。

为什么现在是在 Postgres 中构建分析型数据库的好时机?

因为像 DataFusion 这样的可嵌入式查询引擎改变了游戏规则,其查询速度超过了许多 OLAP 数据库。从头构建查询引擎已无意义,下一代分析型数据库应集成现有的可嵌入查询引擎,如 DataFusion,从而随引擎改进而不断优化。

对于大型企业,OLTP 和 OLAP 应该分开吗?

如果企业有一定规模,将 OLTP 和 OLAP 分为两个数据库是正确的选择,因为可以有两个不同的团队负责两个不同的任务。

🏷️

标签

➡️

继续阅读