Reference: Connection Pooling
https://www.youtube.com/watch?v=2DuwaysT-nM
Introduction to database connection pooling.
- Connection can do one thing at a time
 
Problem
Creating and destroying is expensive.
var mysql = require('mysql')
var connection = mysql.createConnection({
  host: 'localhost',
  user: 'me',
  password: 'secret',
  database: 'my_db'
  debug: false
})
connection.connect()
Solution
Use a pool of reusable connections
// mysql_connector.js
var mysql = require('mysql')
var pool = mysql.createPool({
  connectionLimit: 10,
  host: 'localhost',
  user: 'root',
  password: 'secret',
  database: 'db_name',
  debug: false
})
module.exports = pool
// manageDB.js
const executeQuery = function( query, callback ) {
   pool.getConnection( function(err, connection ) {
      if (err) {
          connection.release();
          throw err
      }
      connection.query( query, function( err, rows ) {
          connection.release();
          if (!err) {
              callback( null, {rows: rows} )
          }
      }
       connection.on('error', function(err) {
          throw err;
          return;
       }
   }
}
module.exports = executeQuery
Cursor is a pointer that travels through a resultSet
A tuple is a row of data in a resultSet.