使用Vert.x最佳化關聯式資料庫PostgreSQL訪問 | foojay

banq發表於2021-06-29

HTTP/2 引入多路複用以大幅提高效能花了 25 年的時間。大多數資料庫協議還沒有遵循相同的路徑,仍處於連線池的石器時代(至少具有公開記錄協議的資料庫)。多路複用資料庫協議可以提高效能,並使連線池成為過去。它還將為從資料庫中高效傳輸資料提供基礎。
該文使用PostgreSQL非同步客戶端Vert.x PostgreSQL Client為 PostgreSQL 實現了流水線管道操作。使用此客戶端,您可以透過將多個語句排入與資料庫的單個交換中來增加併發性。
PostgreSQL 是否支援訊息流水線是一個合理的問題。PostgreSQL 客戶端協議使用長度字首成幀技術。因此,它準確地知道要讀取多少位元組來處理訊息。當 PostgreSQL 處理一條訊息時,它會讀取這條訊息的確切位元組數。然後它寫入響應訊息並恢復訊息處理。當客戶端管道傳輸多條訊息時,PostgreSQL 只讀取第一條訊息,然後在寫入響應訊息後讀取後面的訊息;唯一的區別在於客戶端沒有等待響應傳送訊息。
Vert.x PostgreSQL Client 支援連線級流水線和池級流水線:
  • 連線級流水線允許在同一連線上流水線查詢。
  • 池級流水線公開了由連線池支援的客戶端 API。它可以在池的任何連線上管道多個查詢。池可以應用最佳化,例如選擇最合適的連線(例如,具有較少飛行命令的連線)

該文開發了一個基準測試,測量在單個 PostgreSQL 連線上執行 5000 個查詢;每個執行都被配置為使用不同級別的流水線,詳細點選標題
 

相關文章