使用Vert.x优化关系数据库PostgreSQL访问 | foojay

21-06-29 banq

HTTP/2 引入多路复用以大幅提高性能花了 25 年的时间。大多数数据库协议还没有遵循相同的路径,仍处于连接池的石器时代(至少具有公开记录协议的数据库)。多路复用数据库协议可以提高性能,并使连接池成为过去。它还将为从数据库中高效传输数据提供基础。
该文使用PostgreSQL异步客户端Vert.x PostgreSQL Client为 PostgreSQL 实现了流水线管道操作。使用此客户端,您可以通过将多个语句排入与数据库的单个交换中来增加并发性。
PostgreSQL 是否支持消息流水线是一个合理的问题。PostgreSQL 客户端协议使用长度前缀成帧技术。因此,它准确地知道要读取多少字节来处理消息。当 PostgreSQL 处理一条消息时,它会读取这条消息的确切字节数。然后它写入响应消息并恢复消息处理。当客户端管道传输多条消息时,PostgreSQL 只读取第一条消息,然后在写入响应消息后读取后面的消息;唯一的区别在于客户端没有等待响应发送消息。
Vert.x PostgreSQL Client 支持连接级流水线和池级流水线:
  • 连接级流水线允许在同一连接上流水线查询。
  • 池级流水线公开了由连接池支持的客户端 API。它可以在池的任何连接上管道多个查询。池可以应用优化,例如选择最合适的连接(例如,具有较少飞行命令的连接)

该文开发了一个基准测试,测量在单个 PostgreSQL 连接上执行 5000 个查询;每个执行都被配置为使用不同级别的流水线,详细点击标题