2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
DuckDB 对比 PostgreSQL 对比 Meilisearch:大规模全文搜索
当处理一亿份文档时,选择全文搜索引擎不仅仅关乎功能——更关乎原始性能、资源效率以及工具与工作负载的契合程度。最近一项对比 DuckDB、PostgreSQL 和 Meilisearch 的基准测试揭示了在构建时间、查询延迟和内存使用方面令人惊讶的权衡,这可能会重塑你构建搜索基础设施的方式。
测试设置:真实工作负载,真实硬件
该基准测试在 Hetzner AX-52 服务器(AMD Ryzen 7 7700 处理器,64GB 内存,2块 1TB NVMe 固态硬盘)上使用了包含一亿条 Reddit 评论的数据集(约 50GB 原始文本,14.8GB 压缩 Parquet 格式)。这并非合成测试——查询源自生产环境的搜索日志,涵盖四类:简单匹配、多词短语、模糊匹配和布尔查询。每个引擎均使用其最新稳定版本(DuckDB 1.1、PostgreSQL 17.4、Meilisearch 1.10)进行测试,并进行了性能优化。
关键发现 1:索引构建时间——DuckDB 带来惊喜
DuckDB 的全文搜索扩展在冷启动构建中占据主导地位,耗时仅38 分钟——比 PostgreSQL 的 91 分钟快 2.4 倍,与 Meilisearch 的 44 分钟大致相当。关键优势在于何处?列式输入/输出和流水线分词。DuckDB 仅从 Parquet 文件中读取被索引的列(body),避免了不必要的数据移动。相比之下,PostgreSQL 在构建通用倒排索引之前先将行摄入堆页面,使输入/输出开销加倍。
Meilisearch 虽然速度快,但非常消耗内存,在索引期间峰值达到29GB 内存——这对于小型部署来说是不可接受的。PostgreSQL 得益于其通用倒排索引,在增量更新方面胜出(100 万篇新文档仅需 14 秒),但 DuckDB 的列式架构使得部分更新比完全重建成本更低。
关键发现 2:查询延迟——专业化至关重要
查询性能因工作负载不同而有显著差异:
- PostgreSQL 通用倒排索引 在简单的布尔“与”查询中表现出色(P50 延迟:4 毫秒),得益于其成熟的查询计划器和索引优化。
- DuckDB 在模糊查询和分析型查询(例如莱文斯坦距离匹配)中占据主导地位,性能比 PostgreSQL 高出 4 倍。其列式设计允许快速扫描和聚合,使其成为将搜索作为分析原语的理想选择。
- Meilisearch 提供了最佳的容错排名,但在大规模下表现吃力——在一亿篇文档时,P99 延迟高达800 毫秒以上,这可能是由于其单分片设计所致。
关键发现 3:资源效率——DuckDB 的磁盘优势
得益于压缩列式存储,DuckDB 的索引比 Meilisearch 小3 倍。PostgreSQL 的通用倒排索引比 DuckDB 大,但比 Meilisearch 更紧凑。对于磁盘空间受限的环境,仅这一点就可能决定胜负。
结论:没有通用的赢家
- 选择 PostgreSQL,如果你需要集成在线事务处理的搜索,具备快速的布尔查询和增量更新能力。
- 选择 DuckDB,如果你优先考虑快速的分析型查询、低磁盘占用和批量索引。
- 选择 Meilisearch,如果容错能力和开发者体验至关重要——但仅适用于较小的数据集或配合水平扩展使用。
请访问 novvista.com 阅读完整文章,获取包含更多示例和基准测试的完整分析。