เรื่องการทำ SSIS แบบเมื่อ Data Source ต้นทางเปลี่ยน Data Destination ปลายทางเปลี่นนตาม

ผมทำการดึงข้อมูลจาก 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 ทางครับ

  1. ทำ read replica ออกมา เพื่อไม่ให้กระทบกับ app ที่มาใช้งาน database ตัวหลัก ซึ่งเราจะสามารถทำอะไรกับตัว replica นี้ได้เลย แต่ก็จะแลกมาด้วยค่าใช้จ่ายที่เพิ่มขึ้น
  2. Offload ข้อมูลออกมาที่อื่นครับ ตรงนี้ข้อดีคือเราก็จะไม่เสียเรื่อง connection มาก แต่ก็แลกมากับเรื่องที่เราเช็คทุก ๆ 5 วิ แทนครับ
  3. ทำ real-time sync ประมาณที่บทความนี้เขียนไว้ครับ ลองสร้าง Change Data Capture pipeline ด้วย Debezium และ Apache Kafka | by Nuipin Decimo | Medium

ถ้า 3 ทางนี้เป็นไปได้ยาก ก็ต้องมาจัดการ connection pool ดี ๆ ครับ คอย monitor อยู่ตลอดว่าควรเป็นเท่าไหร่ดีเพื่อที่จะเหมาะสบกับคนที่มาใช้งาน database