PostgreSQL列存扩展hydra简单测试

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: Hydra是一款PostgreSQL的扩展,为PostgreSQL增加了列存引擎,使得PostgreSQL的olap性能大幅提升,本文介绍Hydra基本的使用方法。

一、Hydra简介

Hydra 是一个列式存储扩展,旨在为 PostgreSQL 提供高性能的向量化列存储扩展。PostgreSQL 生态其实已经有一些列式存储扩展,例如 Citus 自带的 columnar,以及 TimescaleDB 针对时序数据的压缩列存引擎。不过看起来 hydra 在这个领域又达到了新的高度:在它给出的样例场景中(500G count),它可以达到令人震惊的加速比:从四五分钟到亚秒级。兼容性也还不错,支持分区表,可以与pg_hint_plan、pg_ivm等扩展配合使用。

微信图片_20231028142609.png

Hydra Fork 自 Citus 的列存插件 columnar,但进行了许多改进优化,例如矢量化执行,查询并性化,并进行了一系列针对性的调优。hydra 目前已经发布1.0.1 Release版,目前还不支持最新的PostgreSQL 16。

二、安装

安装环境:服务器44核88线程,内存128G,硬盘5400转SATA x 3 Raid5,操作系统:Rocky Linux 9.2 (Blue Onyx),PostgreSQL 15.4。

# 安装依赖包dnf install autoconf libcurl-devel liblz4-devel libzstd-devel
git clone https://github.com/hydradatabase/hydra.git -b v1.0.1
cd hydra/columnar
./autogen.sh
./configure
makemake install

三、使用

-- 创建扩展,需要超级用户权限CREATE EXTENSION IF NOT EXISTS columnar;-- Hydra支持列存表(columnar)和传统的PostgreSQL堆表(heap),默认创建时是columnar表。可在建表时指定要创建的类型:CREATETABLE heap_table (...) USING heap;CREATETABLE columnar_table (...) USING columnar;-- Hydra支持列存、行存相互转换CREATETABLE my_table (i INT8) USING heap;-- convert to columnarSELECT columnar.alter_table_set_access_method('my_table','columnar');-- convert back to row (heap)SELECT columnar.alter_table_set_access_method('my_table','heap');--也支持通过拷贝数据手动转换CREATETABLE table_heap (i INT8) USING heap;CREATETABLE table_columnar (LIKE table_heap) USING columnar;INSERTINTO table_columnar SELECT*FROM table_heap;--支持分区表,分区表可以是heap表,也可以是columna表CREATETABLE parent(ts timestamptz, i int, n numeric, s text)PARTITION BY RANGE (ts);-- columnar partitionCREATETABLE p0 PARTITION OF parent
FOR VALUESFROM('2020-01-01') TO ('2020-02-01')USING columnar;-- columnar partitionCREATETABLE p1 PARTITION OF parent
FOR VALUESFROM('2020-02-01') TO ('2020-03-01')USING columnar;-- row partitionCREATETABLE p2 PARTITION OF parent
FOR VALUESFROM('2020-03-01') TO ('2020-04-01')USING heap;INSERTINTO parent VALUES('2020-01-15',10,100,'one thousand');-- columnarINSERTINTO parent VALUES('2020-02-15',20,200,'two thousand');-- columnarINSERTINTO parent VALUES('2020-03-15',30,300,'three thousand');-- row

四、实测

导入生产环境数据到测试环境,其中一张表5000万+行数据,一张表1.2亿+行,两张与若干辅表join,然后聚合,heap表耗时40s,将两张大表转换成columnar表,耗时仅1.7s,性能提升巨大。空间占用情况:1.2亿+行数据的表heap表时占用空间40G+,转换成columnar表后仅占用5.2G,空间节省也很可观。但转换表时需要注意:如果heap表有序列或者字段带有generated by default as identity 属性,转换时可能会报错,建议先删除相应属性再转换,转换完成后再重新设置。

五、限制

  • 不支持逻辑复制
  • 不支持ON CONFLICT子句
  • 在某些情况下,索引可能会导致查询变慢,大部分情况下索引不是必须的
  • 不支持BRIN索引


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
10月前
|
存储 安全 关系型数据库
PostgreSQL物化视图增量更新扩展 -- pg_ivm
PostgreSQL不支持物化视图增量更新,需要定期执行REFRESH MATERIALIZED VIEW命令刷新物化视图。Incremental View Maintenance (IVM)是一种使物化视图保持最新的方法,其中只计算增量更改并将其应用于视图,而不是REFRESH MATERIALIZED VIEW那样从头开始重新计算内容。当只更改视图的一小部分时,IVM可以比重新计算更高效地更新物化视图。
933 0
|
1月前
|
固态存储 测试技术 数据库
最新测试揭秘:TDengine 线性扩展能力能否满足你的性能需求?
**摘要:** TDengine 的线性扩展能力通过CPU和磁盘测试得以验证。在CPU测试中,使用TDengine V3.3.0.0和taosBenchmark,随着CPU核数从4增至12,写入性能线性提升,每个CPU增加对应约50W条/秒的提升,保持CPU在瓶颈状态。磁盘IO测试中,使用低速机械盘,增加磁盘数量导致写入性能成比例增长,充分利用新增磁盘IO。测试结果表明,无论CPU还是磁盘扩展,TDengine都能有效利用资源,展示出出色的线性扩展能力。
27 0
|
9月前
|
关系型数据库 PostgreSQL
PostgreSQL pg_orphaned扩展
由于种种原因,PostgreSQL可能会产生一些孤儿文件,这些文件会占用磁盘空间,手工查找费时费力还容易出错,pg_orphaned扩展很好的解决了这个问题。
1356 5
|
3月前
|
SQL 关系型数据库 OLAP
PostgreSQL从小白到高手教程 - 第46讲:poc-tpch测试
PostgreSQL从小白到高手教程 - 第46讲:poc-tpch测试
130 3
|
3月前
|
关系型数据库 OLAP OLTP
PostgreSQL从小白到高手教程 - 第45讲:poc-tpcc测试
CUUG PostgreSQL技术大讲堂系列公开课第45讲-POC-TPCC测试的内容,往期视频及文档,请联系CUUG。
107 1
|
3月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
72 0
|
3月前
|
SQL 关系型数据库 数据库
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
108 0
|
3月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL【部署 01】离线安装PostgreSQL+PostGIS踩坑及问题解决经验分享(含安装文件PostgreSQL+PostGIS及多个依赖+测试SQL)
PostgreSQL【部署 01】离线安装PostgreSQL+PostGIS踩坑及问题解决经验分享(含安装文件PostgreSQL+PostGIS及多个依赖+测试SQL)
369 0
|
3月前
|
SQL 关系型数据库 测试技术
postgresql|数据库|数据库测试工具pgbench之使用
postgresql|数据库|数据库测试工具pgbench之使用
176 0
|
3月前
|
SQL 关系型数据库 编译器
PostgreSQL SQL扩展 ---- C语言函数(二)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
111 0

热门文章

最新文章