ผมทำการดึงข้อมูลจาก Data Source ต้นทางโดยทำเป็นแบบ Application web ใน Visual Studio Code โดยดึงข้อมูลจาก ใน Sql Server จากอีกที่ นึงไปยัง Sql Server อีกที่นึง โดยใช้ javaScript โดยตอนนี้ตั้งว่าให้มันเช็ค เวลาล่าสุดจากทั้งใน Data Destination กับ Data Source ทุกๆ 5 วินาที ถ้า Data Source มีเวลาล่าสุดมากกว่าใน Data Destination ก็จะให้มันไปใช้ฟังก์ชั่นดึงข้อมูลหลัก ที่ทำเอาไว้ โดยตอนนี้ทำเป็นแบบ เปิด connection ใหม่ทุกครั้งที่ใช้งาน และ ปิด connection ทุกครั้งหลังใช้งานเสร็จ คืออยากสอบถามว่าแบบนี้มันดีไหมครับ หรือใช้แบบ ใช้แบบ Connection Pool คือเชื่อมต่อตลอดยาวๆ อาจจะ 1 ชั่วโมงและปิดเชื่อมต่อใหม่ หรือมีวิธีการที่ดีกว่านี้ไหมครับ ***คือกลัวว่าวิธีนี้จะเป็นการทำให้ใช้ทรัพยากรของ Sql Server ต้นทางมากเกินไป มีวิธีที่กินทรัพยากรน้อยๆ ไหมครับ
การเปิด connection ค้างไว้ ไม่ค่อยดีเท่าไหร่ครับ จะกินทรัพยากรอย่างที่ว่ามาเลย แล้วก็อาจจะไปกระทบกับ app ที่มาใช้งานตัว database นี้
ผมลองคิดไว ๆ เป็นไปได้ประมาณ 3 ทางครับ
- ทำ read replica ออกมา เพื่อไม่ให้กระทบกับ app ที่มาใช้งาน database ตัวหลัก ซึ่งเราจะสามารถทำอะไรกับตัว replica นี้ได้เลย แต่ก็จะแลกมาด้วยค่าใช้จ่ายที่เพิ่มขึ้น
- Offload ข้อมูลออกมาที่อื่นครับ ตรงนี้ข้อดีคือเราก็จะไม่เสียเรื่อง connection มาก แต่ก็แลกมากับเรื่องที่เราเช็คทุก ๆ 5 วิ แทนครับ
- ทำ real-time sync ประมาณที่บทความนี้เขียนไว้ครับ ลองสร้าง Change Data Capture pipeline ด้วย Debezium และ Apache Kafka | by Nuipin Decimo | Medium
ถ้า 3 ทางนี้เป็นไปได้ยาก ก็ต้องมาจัดการ connection pool ดี ๆ ครับ คอย monitor อยู่ตลอดว่าควรเป็นเท่าไหร่ดีเพื่อที่จะเหมาะสบกับคนที่มาใช้งาน database