探索SPQR:PostgreSQL的水平可扩展性解决方案

发表时间: 2024-03-26 05:04

一如既往,锋哥爱学习,带大家一起学技术。今天介绍一款开源的PostgreSQL 数据库分片方案。

在处理大规模数据库时,如何有效地管理拥有数TB数据和每秒超过10万次查询的单一数据库一直是一个挑战。现有的分片解决方案主要针对分析型和混合型工作负载(OLAP、HTAP),而且大多数解决方案并没有为从单体架构向分片架构过渡提供一个平滑的路径。因此,Yandex Cloud的数据平台团队开发了SPQR。



SPQR是一个用于通过分片水平扩展PostgreSQL的生产就绪系统。我们欢迎任何形式的反馈和对项目的贡献。

SPQR在大多数查询可以在一个分片上执行时表现良好。

  • 分片:如果可能,路由器会尝试在第一个事务语句上确定此事务应发送到哪个分片。但您也可以在请求注释中明确指定分片或分片键。
  • 事务和会话池:就像您最喜欢的连接池(Odyssey或PgBouncer)一样。
  • 路由器故障转移:路由器仅为缓存目的存储分片规则。整个安装的信息存储在QDB服务中,因此同时运行的路由器数量不受限制。
  • 流动数据迁移:数据迁移旨在平衡跨分片的工作负载。主要目标是在迁移期间最小化任何锁定影响,这是通过减少正在传输的数据范围的大小来实现的。
  • 有限的跨分片查询:SPQR路由器支持有限的跨分片查询子集。这主要用于测试目的,不建议在生产中使用,因为跨分片快照将不一致。

SPQR优化了单分片OLTP查询。我们有长期计划支持为2个或更多分片路由查询。

SPQR的源代码在PostgreSQL全球开发组许可下分发。

SPQR主要是用Golang写的,主作者 reshke 应该是俄罗斯人,最早好像是为yandex工作的。