การติดต่อผ่าน MySQL ทำได้หลายวิธี แต่สำหรับการติดต่อแบบ Multi Used เป็นการติดต่อฐานข้อมูลเพียงครั้งเดียวแล้วสามารถเรียกใช้งานได้หลายครั้งไม่ต้องติดต่อฐานข้อมูลบ่อยๆ
ตัวอย่าง
var mysql = require('mysql'); var pool = mysql.createPool({ host : “hostName”, user : “username”, password: “password” });
การเรียกใช้งาน:
pool.getConnection(function(err, connection){ connection.query( “select * from table1”, function(err, rows){ if(err) { throw err; }else{ console.log( rows ); } }); connection.release(); });
ปัญหา:
เมื่อใช้ไปสักพักแล้วเกิดอาการหน้าจอค้าง เหมือนกำลังทำงานอยู่ เมื่อตรวจสอบไปที่ MySQL แล้วพบว่ามี process ค้างอยู่เป็นจำนวนมาก ตามที่ส่งเขาไป
แก้ไขปัญหา:
ปัญหาข้างต้นยังแก้ไม่ได้ แต่ลองเปลี่ยนวิธีการใช้งาน pool ผ่าน mysql-pool
ติดตั้ง:
npm install mysql-pool
npm install mysql@0.9.6 (แก้ไข Error ในเวอร์ชันใหม่)
เรียกใช้งาน:
var MySQLPool = require("mysql-pool").MySQLPool; var pool = new MySQLPool({ poolSize: 4, user: 'root', password: 'root', database: 'test' });
pool.query("SELECT 'Hello, World!' AS hello", function(err, rows, fields) { if(err) throw err; console.log(rows[0].hello); });
ตอนนี้ลองใช้งานดูแล้วยังไม่พบปัญหาของหน้าจอค้าง แต่ยังไม่มีเวลาลงลึกว่าเป็นเพราะเหตุใด โดยแบบหลังจะกำหนด poolSize = 4 ซึ่งอาจจะมีส่วนเกี่ยวข้อง เพราะแบบแรกก็มีออฟชันกำหนดตัวหนึ่งคือ
var connection = mysql.createConnection( { multipleStatements: true } );อีกสักพักจะได้ลองกลับมาทดสอบอีกครั้งหนึ่ง ตอนนี้ขอเดินหน้าไปก่อนครับ...
ข้อมูล:
https://github.com/Kijewski/node-mysql-pool
http://stackoverflow.com/questions/14070188/getting-error-while-running-node-mysql-tutorial
http://www.thegeekstuff.com/2014/01/mysql-nodejs-intro/
ขอบคุณครับ
ReplyDelete