feat(pg-native): pipeline mode by nigrosimone · Pull Request #3596 · brianc/node-postgres

same as #3591 but for pg-native (complete #3592)

const Client = require('pg-native')

const client = new Client({
  pipelineMode: true,
  pipelineMaxQueries: 100  // default: 1000
})

client.connectSync() // or: client.connect(callback)

client.query('SELECT $1::int as num', [1], (err, rows) => {
  console.log(rows)
}) // or: await client.query('SELECT 1 as num')

Benchmark

node index.js
============================================================
pg-native Benchmark
============================================================
Pipeline mode supported: true

Warming up...
Warmup complete.

--- Iteration 1/3 ---

Simple query (SELECT 1):
  pg.native:         5263 qps (26314 queries in 5000ms)
  Native:            6858 qps (34290 queries in 5000ms)
  Native+Pipeline:   5866 qps (29328 queries in 5000ms)

Complex query (generate_series):
  pg.native:         1074 qps (5368 queries in 5000ms)
  Native:            1035 qps (5174 queries in 5000ms)
  Native+Pipeline:   1117 qps (5586 queries in 5000ms)

Concurrent queries (10 queries in parallel):
  pg.native:         6873 qps (34370 queries in 5001ms)
  Native:            N/A (concurrent queries not supported without pipeline)
  Native+Pipeline:   20363 qps (101820 queries in 5000ms)

--- Iteration 2/3 ---

Simple query (SELECT 1):
  pg.native:         6538 qps (32693 queries in 5000ms)
  Native:            6990 qps (34952 queries in 5000ms)
  Native+Pipeline:   6255 qps (31277 queries in 5000ms)

Complex query (generate_series):
  pg.native:         928 qps (4642 queries in 5001ms)
  Native:            771 qps (3858 queries in 5001ms)
  Native+Pipeline:   687 qps (3435 queries in 5000ms)

Concurrent queries (10 queries in parallel):
  pg.native:         6582 qps (32920 queries in 5001ms)
  Native:            N/A (concurrent queries not supported without pipeline)
  Native+Pipeline:   19832 qps (99160 queries in 5000ms)

--- Iteration 3/3 ---

Simple query (SELECT 1):
  pg.native:         6560 qps (32799 queries in 5000ms)
  Native:            6891 qps (34458 queries in 5000ms)
  Native+Pipeline:   6447 qps (32234 queries in 5000ms)

Complex query (generate_series):
  pg.native:         1050 qps (5248 queries in 5000ms)
  Native:            1043 qps (5217 queries in 5000ms)
  Native+Pipeline:   1014 qps (5073 queries in 5001ms)

Concurrent queries (10 queries in parallel):
  pg.native:         6664 qps (33320 queries in 5000ms)
  Native:            N/A (concurrent queries not supported without pipeline)
  Native+Pipeline:   19603 qps (98020 queries in 5000ms)

============================================================
SUMMARY (average QPS over 3 iterations)
============================================================

Simple query (SELECT 1):
  pg.native          6120 qps
  Native             6913 qps (13.0% vs pg.native)
  Native+Pipeline    6189 qps (1.1% vs pg.native)

Complex query (generate_series):
  pg.native          1017 qps
  Native             950 qps (-6.6% vs pg.native)
  Native+Pipeline    939 qps (-7.7% vs pg.native)

Concurrent queries (10 in parallel):
  pg.native          6706 qps
  Native+Pipeline    19933 qps (197.2% vs pg.native)
  Native             N/A (not supported)

Pipeline mode impact (vs Native without pipeline):
  Simple query:       -10.5%
  Complex query:      -1.2%
  Concurrent queries: 197.2% (vs pg.native, Native N/A)