Hasty Briefsbeta

双语

Replacing Protobuf with Rust to go 5 times faster

4 months ago
  • #Rust
  • #PostgreSQL
  • #Performance
  • PgDog(一个PostgreSQL代理)用直接的C到Rust绑定替代了Protobuf,以获得更好的性能。
  • 这一变更使得查询解析速度提升了5倍,反解析速度提升了10倍。
  • 使用samply进行性能分析后,发现pg_query_parse_protobuf函数中的Protobuf是性能瓶颈。
  • 最初尝试缓存已解析查询虽然有效,但在处理独特语句和旧驱动时存在局限性。
  • 团队使用LLM(Claude)生成直接将C类型映射到Rust结构体的代码,绕过了Protobuf。
  • 新实现使用unsafe Rust进行C到Rust的转换,并采用递归算法处理AST。
  • 选择递归算法是因为其速度更快、缓存局部性更好,且比迭代方法更具可读性。
  • 这一变更降低了CPU使用率和工作负载,使PgDog运行更快且成本更低。
  • 团队正在寻找创始软件工程师来进一步开发PostgreSQL水平扩展解决方案。