Hydra Columnar:一個開源的PostgreSQL列式存儲引擎
Hydra Columnar 是一個 PostgreSQL 列式存儲插件,專為分析型(OLAP)工作負載設計,旨在提升大規(guī)模分析查詢和批量更新的效率。
Hydra Columnar 以擴展插件的方式提供,主要特點包括:
- 采用列式存儲,利用列內(nèi)數(shù)據(jù)相似性,支持多種壓縮算法,大幅降低存儲成本。
- 并行查詢優(yōu)化,結(jié)合 PostgreSQL 的并行執(zhí)行框架,充分利用多核資源處理復雜分析。
- 向量化執(zhí)行,批量處理列數(shù)據(jù),減少函數(shù)調(diào)用開銷,提升 CPU 緩存利用率,加速查詢。
- PostgreSQL 兼容性,同時支持 OLTP 以及 OLAP 負載場景。
目前,Hydra Columnar 還不支持 PostgreSQL 邏輯復制和外鍵,索引只支持 BTREE 或者 HASH。
以下是一個 Hydra Columnar 與 PostgreSQL、Citus 以及 TimescaleDB 使用 ClickBench 工具進行的分析性能測試比較:
從可以看出,Hydra Columnar 在絕大多數(shù)查詢中獲得了極大的性能提升,具體數(shù)據(jù)可以參考下面的網(wǎng)站:
https://tinyurl.com/clickbench
以下則是 TPC-H 數(shù)據(jù)倉庫測試場景下的性能比較:
Hydra Columnar 提供了多種安裝方式,使用 Docker 安裝運行的命令如下:
git clone https://github.com/hydradatabase/hydra && cd hydra
cp .env.example .env
docker compose up
# 在另一個窗口中連接
psql postgres://postgres:hydra@127.0.0.1:5432
連接數(shù)據(jù)庫之后,啟用插件并創(chuàng)建數(shù)據(jù)表:
CREATE EXTENSION IF NOT EXISTS columnar;
CREATE TABLE sensor_data (
timestamp TIMESTAMP,
device_id INT,
temperature FLOAT
);
我們也可以明確指定存儲引擎,默認使用 Hydra Columnar:
CREATE TABLE heap_table (...) USING heap;
CREATE TABLE columnar_table (...) USING columnar; -- 默認值
然后可以正常導入數(shù)據(jù)并執(zhí)行查詢分析。
-- 批量插入數(shù)據(jù)(列式存儲適合批量寫入)
INSERT INTO sensor_data SELECT ...;
-- 分析查詢(僅掃描 temperature 列)
SELECT AVG(temperature) FROM sensor_data WHERE timestamp > '2023-01-01';
詳細信息可以參考文檔: