Connection Pool

มันคืออะไร?

เป็นเทคนิคที่ช่วยให้ Client สามารถเชื่อมต่อกับ Database โดยการใช้ Connection ที่เตรียมไว้ให้แล้วใน Pool (Cache ของ connection) ทำให้ Client ไม่ต้องออกแรงสร้าง Connection ใหม่ทุกครั้งที่มีการเชื่อมต่อกับ Database

ทำไมต้องใช้?

เนื่องจากการสร้าง Connection ระหว่างโปรแกรมของเรากับ Database นั้นเรียกได้ว่าต้องจ่ายแพงมาก ทั้งเรื่อง Overhead ทั้งเรื่อง Memory ซึ่งโปรแกรมระดับ Enterprise ส่วนมากจะมีการติดต่อกับ Database อยู่บ่อยๆ การสร้าง Connection ใหม่ทุกครั้งคงไม่ใช่เรื่องสนุกแน่นอน ดังนั้นน่าจะดีถ้าเราสามารถหยิบ Connection ที่ได้เตรียมไว้แล้วมาใช้ได้ทันที ช่วยลด Overhead ในการสร้าง Connection ใหม่ด้วยวิธีการ Reuse โดยหยิบ Connection จาก Pool และยังลดการใช้ Memory จากการสร้าง Memory ใหม่ทุกครั้งด้วย

หลักการทำงาน

ทุกครั้งที่มีการร้องขอที่จะเชื่อมต่อกับ Database ตัว Connection Pool จะทำการค้นหา Connection ที่ว่างขึ้นมาให้ หากมี Connection เข้ามาเยอะ (อย่างกรณี High concurrent) ตัว Pool ก็จะทำการเข้าคิว (จำนวนคิวและจำนวน Connection ขึ้นกับเราตั้งค่า) รอจนกว่าจะมี Connection ว่างจึงจะหยิบ connection นั้นมาให้คนที่ต่อคิวทำงาน (วิธีการเลือกคนในคิวขึ้นมาทำงานขึ้นกับ Algorithm ของ Pool นั้นๆ) เมื่อ Client จบการทำงานที่ต้องใช้ Connection นั้นแล้ว ตัว Pool ก็จะนำ connection นั้นคืนกับเข้า Pool เพื่อให้คนอื่นเอาไปใช้ต่อไป

วิธีการนำมาใช้

หากเป็น Web Application จะเป็นหน้าที่ของ Web Application Server ที่จะต้องเตรียม Pool ไว้ให้ ซึ่งการสร้าง Pool ก็ขึ้นอยู่กับตัว Server นั้นๆ หากไม่พอใจที่จะใช้ Pool ของ Server เนื่องจากกลัวเรื่องการย้ายไปใช้ Server ตัวอื่น เราก็สามารถใช้ Third-Party Connection Pool ได้ เช่น Commons DBCP, c3p0 หรือ BoneCP เป็นต้น

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s