1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- const { Client, Pool } = require( 'pg' ).native;
- const cpus = require( 'os' ).cpus().length
- let clientOpts = {
- host: process.env.DB_HOST || 'localhost',
- user: 'benchmarkdbuser',
- password: 'benchmarkdbpass',
- database: 'hello_world'
- };
- let pool
- const query = async ( text, values ) => ( await pool.query( text, values || undefined ) ).rows;
- module.exports = {
- async init() {
- const client = new Client( clientOpts )
- await client.connect()
- const res = await client.query( 'SHOW max_connections' )
- let maxConnections = Math.floor( res.rows[0].max_connections * 0.9 / cpus )
- //1 worker per cpu, each worker pool gets a fraction of the max connections
- //only use 90% to avoid too many clients errors
- pool = new Pool( Object.assign( { ...clientOpts }, { max: maxConnections } ) )
- pool.on( 'error', ( err ) => {
- console.error( 'Unexpected client error', err )
- } )
- await client.end()
- },
- allFortunes: async () =>
- query( 'SELECT * FROM fortune' ),
- worldById: async ( id ) =>
- query( 'SELECT * FROM world WHERE id = $1', [id] )
- .then( arr => arr[0] ),
- allWorlds: async () =>
- query( 'SELECT * FROM world' ),
- bulkUpdateWorld: async worlds => Promise.all(
- worlds.map( world =>
- query( 'UPDATE world SET randomnumber = $1 WHERE id = $2',
- [world.randomnumber, world.id] ) )
- ).then( () => worlds )
- }
|