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)