Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

ความรู้พื้นฐานเรื่อง Database sharding

$
0
0

วิธีการสำหรับการ scale database
ให้รองรับข้อมูล และ traffic ที่มากขึ้นนั้น มีหลายวิธี
ยกตัวอย่างเช่น

  • การขยายเครื่องให้ใหญ่ขึ้น
  • การเพิ่มเรื่องให้มากขึ้น
  • การจัดทำ index แต่ถ้ามีข้อมูลในแต่ละ table มากขึ้น ก็ใหญ่ ดังนั้นต้องทำ partition เพื่อให้ table เล็กลง และ index มีขนาดเล็กลง
  • การทำ replication เช่น master-slave, multi-master เป็นต้น เพื่อแยกระหว่างการ read กับ write data ออกจากกัน
  • การทำ house keeping ของข้อมูล ให้มีใช้และเก็บเท่าที่จำเป็น

แต่ก็ยังมีวิธีการอื่น ๆ เช่น การทำ Database Sharding

เพื่อทำการกระจายข้อมูลไปยัง database server ที่อยู่ต่างที่กัน
นั่นคือการกระจายข้อมูลไปจัดเก็บในแต่ละที่
จะช่วย share เรื่องของ data และ load ที่เข้ามาได้
แต่ความยากคือ จะแยกข้อมูลด้วยอะไร ?
เพื่อให้เกิดประโยชน์สูงสุด
โดยตรงนี้ต้องดูตาม use case ไป ว่าเป็นอย่างไรด้วย

ยกตัวอย่างเช่น

  • Hash-based
  • Range-based
  • Location-based
  • Key/Directory-based

แน่นอนว่า แนวทางนี้มีทั้งข้อดีและข้อเสียเช่นกัน

ถ้าแบ่งข้อมูลผิด อาจจะทำให้ข้อมูลกระจุกอยู่ในบาง shard มากจนเกินไป
หรือในการดึงข้อมูลนั้น อาจจะต้องไปดึงจากหลาย ๆ shard ก็จะส่งผลเสียมาก ๆ
ยิ่งถ้ามีการ re-shard ก็ยิ่งใช้เวลามาก หรือ หนักกว่านั้นต้องปิดระบบเพื่อจัดการอีก
รวมไปถึงเรื่องของการ monitoring และ backup

ดังนั้นจึงมีเครื่องมือเข้ามาช่วยบ้าง
ยกตัวอย่างเช่น Vitess สำหรับ RDBMS
หรือจะเป็นพวก MonogDB และ Redis ก็มีเช่นกัน

กลับมาดูก่อนว่า ปัญหาของเราคืออะไร
แล้วจะมาดูว่า มีวิธีการอะไรช่วยแก้ไขหรือบรรเทาได้บ้าง

Reference Websites


Viewing all articles
Browse latest Browse all 1997

Trending Articles