Apache Cloudberry 孵化报告(202508-202510)

本文基于 Apache Cloudberry 主分支 3.0(该版本尚未正式发布,仅为开发分支),对三种 PostgreSQL 生态下的全文检索实现方案 ------ ParadeDB BM25(通过 pg_search 测试)、Postgres GIN(trigram) 与 ZomboDB ------ 进行了系统的性能对比测试。

测试内容涵盖索引构建时间、查询性能以及内存消耗等关键指标,旨在评估它们在大规模文本检索场景下的实际表现,为 Cloudberry 用户与数据库开发者在选择全文检索方案时提供参考依据。

测试环境

测试在一台配备 4 核 CPU 与 16GB 内存 的环境中进行,Apache Cloudberry 版本为 3.0 main,数据集来自公开的 All The News 2.1(https://www.dropbox.com/s/cn2utnr5ipathhh/all-the-news-2-1.zip?dl=0),共包含 2,688,878 篇新闻与文章,来自 27 家美国出版物。检索字段:date, year, month, day, author, title, article, url, section, publication

表结构如下:

复制代码
CREATE TABLE news (
  id bigserial PRIMARY KEY,
  pub_date timestamp,
  pub_year integer,
  pub_month char(5),
  pub_day integer,
  author text,
  title text,
  article text,
  url text,
  section text,
  publication text
) DISTRIBUTED BY (id);

postgres=# select count(*) from news;
  count  
---------
 2688878
(1 row)


---

1. ParadeDB BM25 索引

ParadeDB BM25 是 ParadeDB 推出的全文搜索插件,底层基于向量化 BM25 排序算法,能够高效支持大规模文本的相关度检索。在 Cloudberry 中可通过 pg_search 进行集成,具有查询性能高、内存占用低等特点,但当前版本暂不支持 JOIN 查询。

复制代码
CREATE INDEX news_article_bm25_idx ON news USING bm25 (id, article)
WITH (key_field = 'id', text_fields = '{"article": {"fast": true}}');

2. GIN 索引(trigram)

Postgres GIN(trigram) 是 Apache Cloudberry 数据库的内置全文检索插件,基于 PostgreSQL 核心模块 pg_trgm 实现。它通过三元组(trigram)索引支持相似度匹配与文本搜索,无需外部依赖,集成度高、部署简便,是 Cloudberry 默认可用的全文检索方式之一。

复制代码
CREATE INDEX gin_idx ON news USING gin (article gin_trgm_ops);

3. ZomboDB 索引

ZomboDB 则是一个将 PostgreSQL 与 Elasticsearch 无缝集成的扩展,它允许用户在 SQL 中直接使用 Elasticsearch 的搜索能力。ZomboDB 既能利用 PostgreSQL 的事务一致性,又能获得 Elasticsearch 的全文检索与布尔查询性能,适合需要复杂搜索逻辑或外部检索接口的场景。目前,ZomboDB for Apache Cloudberry 尚未正式开源,仍处于计划阶段。本次测试使用的是兼容版本,仅用于评估其在 Cloudberry 环境下的潜在性能表现。

复制代码
CREATE INDEX news_zdb_idx ON news USING zombodb ((news.*))
WITH (url='http://localhost:9200/');

索引构建时间对比

图片

性能对比结果

单词语义搜索

1

复合查询

详细分析

高频词搜索 ('the')
  • ParadeDB BM25: 71.07秒(最快)
  • ZomboDB: 78.37秒
  • GIN: 99.15秒(最慢)
中频词搜索 ('table')
  • ParadeDB BM25: 23.55秒(最快)
  • ZomboDB: 27.50秒
  • GIN: 92.80秒(最慢)
低频词搜索 ('abcd')
  • 所有索引表现都很好,差异不大
  • GIN索引略快(0.11秒)
复合查询表现
  • AND查询: ParadeDB BM25领先(4.08秒)
  • OR查询: ParadeDB BM25最快(25.66秒)
  • GIN索引在OR查询中表现最差
内存使用情况
  • ParadeDB BM25: 查询时内存使用约120MB
  • GIN索引: 内存使用较高,可达1.4GB
  • ZomboDB: 内存使用适中,约120MB

结语

综合来看,三种全文检索方案各有特点:

  • ZomboDB:索引构建最快,对需要频繁重建或快速上线的场景友好;查询表现稳定、支持复杂布尔检索,适合对索引部署速度和扩展能力有要求的应用。
  • GIN (trigram):构建时间居中,但查询(尤其高频与复合 OR)性能较差且内存开销大,优点是实现简单、与 PostgreSQL 集成度高,适合轻量或对部署依赖原生扩展的场景。
  • ParadeDB BM25:查询性能总体最佳(特别是相关度/高频检索与复合查询),且内存使用低,但索引构建时间略长,并且当前功能限制(例如暂不支持 JOIN)需要在应用设计时考虑。

总体来看,ParadeDB BM25 更适合以文本相关度与查询性能为核心的全文检索场景;ZomboDB 适合需要复杂布尔逻辑与搜索功能扩展的应用;而 GIN (trigram) 更适用于轻量级、低频次的文本匹配任务。

本次测试结果可为 Cloudberry 用户与数据库开发者在选择 PostgreSQL 生态下的全文检索方案时提供有价值的参考。

相关推荐
摇滚侠34 分钟前
Apache Skywalking 实战 阅读笔记 第二章
笔记·apache·skywalking
摇滚侠1 天前
Apache Skywalking 实战 阅读笔记 第一章
笔记·apache·skywalking
小小龙学IT19 天前
Apache Airflow 2.x 深度指南:用 Python 编排一切的现代化工作流引擎
开发语言·python·apache
Shepherd061919 天前
【IT 运维】Apache 使用 mod_remoteip 恢复 Cloudflare 后的真实访客 IP
运维·tcp/ip·apache
isyangli_blog19 天前
SDN 基本应用实践 —— 使用命令行实现简易防火墙功能实验报告
服务器·php·apache
小小龙学IT20 天前
Apache Pulsar 深度解析:从架构设计到生产落地
apache
Full Stack Developme21 天前
Apache Tika 教程
java·开发语言·python·apache
laplaya21 天前
C++大型项目组件通信与依赖管理实践
c++·log4j·apache
万岳科技22 天前
教育培训小程序如何构建线上线下一体化教学体系
小程序·apache
yyuuuzz22 天前
云服务器软件部署的几个常见问题
运维·服务器·开发语言·网络·云计算·php·apache