SurrealDB 3.x 与 Postgres、Mongo、Neo4j、Redis 基准测试对比
速览
本文对 SurrealDB 3.x 版本与 Postgres、MongoDB、Neo4j 和 Redis 进行了基准测试对比,测试场景包含 Fsync 操作。该评测旨在评估 SurrealDB 在多种数据库类型中的性能表现,为开发者选型提供参考。
AI 深度解读
Benchmarking SurrealDB 3.x vs. Postgres, Mongo, Neo4j and Redis (With Fsync) 深度解读
背景
数据库基准测试(Benchmarking)长期以来是一个充满争议且难以标准化的领域。由于硬件配置、持久化设置、客户端库以及工作负载与特定引擎索引策略的匹配度等因素的差异,测试结果极易被“操纵”或产生误导。为了提供一份诚实且具有生产环境参考价值的对比报告,SurrealDB 团队重新设计了测试方法论,旨在消除因默认配置保守或测试条件不公导致的数据偏差。
本次测试的核心背景在于纠正上一轮基准测试中因禁用 fsync(强制同步写入磁盘)而导致的结果失真。上一轮测试虽然保证了各数据库在相同设置下运行,但反映的是缓存友好型(cache-friendly)而非生产环境常见的持久化场景。本轮测试强制所有引擎开启全磁盘持久化,确保每一笔已提交的事务在返回客户端确认前已落盘,从而更真实地反映数据库在应对断电等故障时的表现及实际生产性能。
测试环境统一为:AMD Ryzen Threadripper 9970X (32核/64线程),128 GiB DDR5 内存,NVMe 存储,Ubuntu 24.04 操作系统。所有数据库均使用开源测试工具 crud-bench,并将工作负载转换为各引擎的原生查询语言,以避免因方言不熟悉造成的惩罚。配置上,所有引擎均经过生产级调优,包括调整连接池、缓冲区、并行查询执行、WAL(预写日志)间隔等,确保没有引擎因保守的默认配置而处于劣势。
核心内容
1. SurrealDB 3.x 的内部重大升级
SurrealDB 在 2.x 到 3.x 版本间进行了底层重构,彻底重写了查询、解析器和存储层。主要性能提升数据如下:
- CRUD 吞吐量:平均提升 31%。
- 批量操作:速度提升 58%。
- 非索引全表扫描:速度惊人地提升了 11,894%。这是因为 3.x 版本消除了早期版本中主导性能瓶颈的逐行解码开销,使原本需数分钟的任务在数秒内完成。
- 索引查询:速度提升 136%。
- 尾部延迟(Tail Latency):CRUD 改善 27%,批量操作改善 32%,索引查询改善 59%,扫描改善 99%。
2. 与关系型数据库(PostgreSQL 和 MySQL)的对比
SurrealDB 在写入操作上全面领先:
- 写入性能:SurrealDB 的创建(Create)操作比 Postgres 快约 1.5 倍,更新(Update)快 1.3 倍,删除(Delete)快 1.8 倍。与 MySQL 相比,写入速度快 5-7 倍。
- 读取性能:在单记录原始读取方面,Postgres 仍略占优势。
- 聚合与扫描:SurrealDB 在平均写入吞吐量上约为 Postgres 的 1.5 倍,在全表计数(Full-table counts)上也以约 1.5 倍的差距领先。
- 差距分析:Postgres 拥有 30 年历史的查询规划器,在索引谓词过滤(Indexed predicate filtering)方面仍保持领先。SurrealDB 团队承认这一差距,并计划在 3.1 版本中通过成本优化查询规划器来缩小这一差距。
3. 与文档型数据库(MongoDB 和 ArangoDB)的对比
这是竞争最激烈的领域,但在特定场景下 SurrealDB 表现优异:
- 单记录操作:MongoDB 在单记录写入上仍领先,但 SurrealDB 在读取上快约 1.3 倍。
- 谓词过滤扫描:在未索引表上进行谓词过滤扫描(文档类别的主要衡量指标)时,SurrealDB 比 MongoDB 快约 2.7 倍,且平均延迟和 P99 延迟更低。
- 与 ArangoDB 对比:在文档引擎的写入性能上,SurrealDB 比 ArangoDB 快 100-150 倍。
4. 与图数据库(Neo4j 和 ArangoDB)的对比
SurrealDB 作为多模型数据库,在同一引擎下处理图遍历、文档和表格:
- CRUD 性能:SurrealDB 在所有 CRUD 操作上均优于 Neo4j,写入快 2-3.5 倍,读取快 1.5 倍。
- 图查询性能:在索引谓词过滤查询(图类别的主要衡量指标)中,SurrealDB 比 Neo4j 快约 35 倍。
- 架构优势:无需单独的数据库、单独的查询语言或单独的操作故事,SurrealDB 通过统一引擎实现了高性能。
5. 与键值存储(Redis 和 KeyDB)的对比
针对原始键值吞吐量,测试了 SurrealDB 的内存引擎(带追加持久性):
- 写入性能:SurrealDB 在写入、更新和删除操作上比 Redis 快约 3 倍,同时提供 Redis 不具备的持久化、快照隔离事务和完整查询语言。
- 读取与批量:Redis 在大容量(1,000 条记录)批量操作上仍占优势,并在单记录读取上略胜一筹。
6. 嵌入式模式(vs. SQLite)
SurrealDB 的嵌入式引擎使用与服务器相同的 SurrealQL 和磁盘格式:
- 写入性能:相比 SQLite,SurrealDB 在创建操作上快约 85 倍,更新快 110 倍,删除快 75 倍。
- 读取与扫描:单记录读取处于同一量级。在未索引表的谓词过滤扫描中快约 6.5 倍,在索引过滤扫描中快约 3 倍。
关键要点
- 测试标准升级:本次基准测试强制所有数据库开启
fsync和全磁盘持久化,消除了上一轮测试中因依赖 OS 页面缓存而导致的性能虚高,结果更符合生产环境真实场景。 - 配置公平性:所有数据库均经过生产级调优(连接池、缓冲区、WAL 设置等),而非使用出厂默认值,确保比较的是引擎本身的极限能力而非配置管理的差异。
- SurrealDB 3.x 性能飞跃:通过重构查询规划器和存储引擎,SurrealDB 在非索引全表扫描上实现了近 119 倍的性能提升,整体 CRUD 吞吐量提升 31%。
- 多模型优势:SurrealDB 在单一引擎下同时击败了关系型(Postgres)、文档型(MongoDB)、图数据库(Neo4j)和键值存储(Redis)的特定工作负载,尤其在写入和复杂扫描场景下表现突出。
- 诚实面对差距:SurrealDB 承认在单记录读取(vs. Redis/Postgres)、大批量操作(vs. Redis)和索引谓词过滤(vs. Postgres)方面仍存在差距,并已在 3.1 版本开发计划中针对性解决。
- 统一架构价值:SurrealDB 证明了无需为不同数据模型维护不同的数据库、查询语言或运维体系,即可在性能上匹敌甚至超越专用数据库。
意义与影响
这份基准测试报告对数据库选型和架构设计具有显著的指导意义。首先,它打破了“单一用途数据库在特定指标上必然最优”的传统认知。SurrealDB 3.x 的数据表明,现代化的多模型数据库可以通过统一的底层架构,在保持数据一致性和持久性的前提下,提供媲美甚至超越专用数据库的性能。
其次,测试强调了“生产就绪”配置的重要性。许多基准测试因使用默认配置
