PostgreSQL列存扩展hydra简单测试

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
25天前
|
安全 Linux 虚拟化
|
15天前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
3月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
4月前
|
存储 算法 Cloud Native
【PolarDB-X列存魔法】揭秘TPC-H测试背后的性能优化秘籍!
【8月更文挑战第25天】阿里巴巴的云原生数据库PolarDB-X以其出色的性能、可靠性和扩展性闻名,在多种业务场景中广泛应用。尤其在列存储模式下,PolarDB-X针对分析型查询进行了优化,显著提升了数据读取效率。本文通过TPC-H基准测试探讨PolarDB-X列存执行计划的优化策略,包括高效数据扫描、专用查询算法以及动态调整执行计划等功能,以满足复杂查询的需求并提高数据分析性能。
107 1
|
5月前
|
固态存储 测试技术 数据库
最新测试揭秘:TDengine 线性扩展能力能否满足你的性能需求?
**摘要:** TDengine 的线性扩展能力通过CPU和磁盘测试得以验证。在CPU测试中,使用TDengine V3.3.0.0和taosBenchmark,随着CPU核数从4增至12,写入性能线性提升,每个CPU增加对应约50W条/秒的提升,保持CPU在瓶颈状态。磁盘IO测试中,使用低速机械盘,增加磁盘数量导致写入性能成比例增长,充分利用新增磁盘IO。测试结果表明,无论CPU还是磁盘扩展,TDengine都能有效利用资源,展示出出色的线性扩展能力。
67 0
|
7月前
|
SQL 关系型数据库 OLAP
PostgreSQL从小白到高手教程 - 第46讲:poc-tpch测试
PostgreSQL从小白到高手教程 - 第46讲:poc-tpch测试
159 3
|
7月前
|
关系型数据库 OLAP OLTP
PostgreSQL从小白到高手教程 - 第45讲:poc-tpcc测试
CUUG PostgreSQL技术大讲堂系列公开课第45讲-POC-TPCC测试的内容,往期视频及文档,请联系CUUG。
158 1
|
7月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
96 0
|
7月前
|
SQL 关系型数据库 数据库
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
214 0
|
7月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL【部署 01】离线安装PostgreSQL+PostGIS踩坑及问题解决经验分享(含安装文件PostgreSQL+PostGIS及多个依赖+测试SQL)
PostgreSQL【部署 01】离线安装PostgreSQL+PostGIS踩坑及问题解决经验分享(含安装文件PostgreSQL+PostGIS及多个依赖+测试SQL)
721 0