Skip to main content

DynamoDB Write Sharding

สมมติว่ามีกรณีการใช้งาน แอปพลิเคชันโหวต ที่ผู้ใช้สามารถโหวตให้ผู้สมัครสองคน: ผู้สมัคร A และผู้สมัคร B

  • หากเราใช้ candidate ID เป็น partition key ข้อมูลทั้งหมดจะถูกแบ่งไปเพียง สองพาร์ติชัน คือของผู้สมัคร A และผู้สมัคร B
  • การตั้งค่านี้จะทำให้เกิด hot partition ซึ่งส่งผลกระทบต่อทั้งการเขียน (write) และการอ่าน (read)

An image

การแก้ปัญหา Hot Partition

วิธีแก้คือ กระจาย candidate ID ให้หลากหลายมากขึ้น โดยเพิ่ม suffix หรือ prefix เข้าไปในค่า partition key

  • ตัวอย่าง: แทนที่จะใช้ "candidateA" หรือ "candidateB" เพียงอย่างเดียว
  • สามารถใช้ "candidateA11", "candidateB17", "candidateB18", "candidateA20"

การทำแบบนี้จะทำให้ partition key มีความเป็นเอกลักษณ์มากขึ้น และกระจายข้อมูลไปยังหลายพาร์ติชันอย่างสม่ำเสมอ

  • ส่งผลให้ข้อมูลสามารถเขียนและอ่านได้เต็มประสิทธิภาพโดยไม่เกิด hot partition

วิธีการสร้าง Suffix หรือ Prefix

มี 2 วิธีที่นิยมใช้:

  1. ใช้ suffix แบบสุ่ม (random suffix)
  2. ใช้ suffix จากการคำนวณด้วย hashing algorithm

ทั้งสองวิธีช่วยให้ partition key ถูกกระจายอย่างดี

สรุป

  • การใช้ candidate ID เพียงอย่างเดียว เป็น partition key อาจทำให้เกิด hot partition เพราะพาร์ติชันมีจำกัด
  • การเพิ่ม suffix หรือ prefix ช่วยกระจายข้อมูลให้พาร์ติชันสมดุล
  • Suffix หรือ prefix สามารถสร้างแบบ สุ่ม หรือ hashing เพื่อให้ได้การกระจายที่ดีขึ้น
  • การออกแบบ partition key ที่ดี เป็นสิ่งสำคัญสำหรับการปรับปรุงประสิทธิภาพการเขียนและอ่านใน DynamoDB