ไพรเมอร์เพื่อทำความเข้าใจกับการแบ่งฐานข้อมูล

เผยแพร่แล้ว: 2022-11-05

การสร้างเว็บไซต์เป็นขั้นตอนแรกในการตั้งค่าสถานะของคุณบนอินเทอร์เน็ต หากต้องการเติบโตในระยะยาว คุณต้องแน่ใจว่าไซต์ของคุณสามารถปรับขนาดเพื่อรองรับการเติบโตได้ และหนึ่งในขั้นตอนแรกคือการใช้ฐานข้อมูลที่สามารถปรับขนาดกับคุณได้ มิฉะนั้น คุณเสี่ยงประสบกับประสิทธิภาพของคิวรีที่ช้าและการหยุดทำงานของฐานข้อมูล

โพสต์นี้จะกล่าวถึงวิธีการใช้ชาร์ดฐานข้อมูลเพื่อให้มีความสามารถในการปรับขนาดและความพร้อมใช้งานสูงสำหรับข้อมูลของคุณ นอกจากนี้เรายังจะกล่าวถึงข้อเสียของการแบ่งกลุ่มย่อยและสถาปัตยกรรมการแบ่งกลุ่มย่อยต่างๆ ที่คุณสามารถใช้ได้

การแบ่งฐานข้อมูลคืออะไร?

Sharding เป็นเทคนิคการเพิ่มประสิทธิภาพที่กระจายตารางไปยังเซิร์ฟเวอร์ฐานข้อมูลอื่นๆ มันเหมือนกับการแบ่งพาร์ติชั่นในแง่ที่ว่าทั้งคู่เกี่ยวข้องกับการแบ่งข้อมูลออกเป็นเซ็ตย่อยที่เล็กกว่า ความแตกต่างคือการแบ่งกลุ่มย่อยจะกระจายชุดย่อยเหล่านี้ไปยังเซิร์ฟเวอร์ต่างๆ ในขณะที่แบ่งพาร์ติชั่นเก็บไว้ ) ไว้ในฐานข้อมูลเดียว เซิร์ฟเวอร์เหล่านี้ใช้กลไกฐานข้อมูลและประเภทฮาร์ดแวร์เดียวกันเพื่อให้ได้ระดับประสิทธิภาพที่ใกล้เคียงกันสำหรับชาร์ดทั้งหมด

การแบ่งกลุ่มมีเป้าหมายเพื่อให้บรรลุสถาปัตยกรรมที่ไม่มีการแบ่งปัน ขจัดปัญหาคอขวดในการประมวลผลและจุดล้มเหลวเพียงจุดเดียว

ภาพประกอบเพื่ออธิบายการแบ่งกลุ่มฐานข้อมูล
ตัวอย่างของการแบ่งส่วน (ที่มาของภาพ: Analytics Vidhya)

คุณสามารถใช้การแบ่งกลุ่มได้สองวิธี — แนวนอนและแนวตั้ง การแบ่งกลุ่มตามแนวนอนจะแบ่งตารางตามแถว ขณะที่กลุ่มย่อยในแนวตั้งจะแบ่งตารางตามคอลัมน์

ในเรื่องนี้ การแบ่งกลุ่มเหมือนการแบ่งพาร์ติชั่น ซึ่งแบ่งตารางขนาดใหญ่ออกเป็นตารางที่เล็กกว่า

การแบ่งกลุ่มตามแนวนอนมีผลกับฐานข้อมูลที่คิวรีส่วนใหญ่ส่งคืนชุดย่อยของแถว เช่น ฐานข้อมูลลูกค้าที่ส่งคืนข้อมูล (เช่น ชื่อ ที่อยู่ อีเมล และอื่นๆ) ในครั้งเดียว

การแบ่งกลุ่มตามแนวตั้งมีผลกับฐานข้อมูลที่คิวรีส่งคืนคอลัมน์เดียว ตัวอย่างเช่น หากฐานข้อมูลลูกค้าส่งคืนชื่อหรืออีเมลของลูกค้าแยกกัน คุณสามารถแยกชื่อและอีเมลออกเป็นคลัสเตอร์ต่างๆ ได้

ประโยชน์ของการแชร์ฐานข้อมูล

ด้านล่างนี้คือข้อดีบางประการของการแบ่งกลุ่มฐานข้อมูล

ปรับปรุงการปรับขนาดแนวนอน

คุณสามารถปรับขนาดฐานข้อมูลของคุณในแนวตั้งหรือแนวนอน การปรับขนาดแนวตั้งหมายถึงการเพิ่มหน่วยประมวลผลกลาง (CPU) และหน่วยความจำเข้าถึงโดยสุ่ม (RAM) ให้กับเซิร์ฟเวอร์เพื่อปรับปรุงประสิทธิภาพ การปรับขนาดแนวตั้งเป็นโซลูชันที่เป็นประโยชน์สำหรับฐานข้อมูลขนาดเล็กถึงขนาดกลาง อย่างไรก็ตาม เมื่อข้อมูลของคุณเติบโตขึ้น การปรับขนาดในแนวตั้งจะเป็นไปไม่ได้ มีพลังมากมายที่คุณสามารถเพิ่มไปยังเซิร์ฟเวอร์เดียวได้

การปรับขนาดแนวนอนมีความยืดหยุ่นมากขึ้น ช่วยให้คุณสามารถปรับขนาดฐานข้อมูลของคุณได้ตามต้องการโดยการเพิ่มเซิร์ฟเวอร์ให้กับระบบของคุณ แต่ละเซิร์ฟเวอร์เหล่านี้จัดเตรียมทรัพยากรให้กับชาร์ดฐานข้อมูลที่แตกต่างกัน สิ่งนี้จะกระจายปริมาณงานและปรับปรุงความสามารถของระบบในการจัดการคำขอเพิ่มเติม

เวลาตอบแบบสอบถามเร็วขึ้น

ชาร์ดมีเพียงไม่กี่แถวและคอลัมน์เท่านั้น ด้วยเหตุนี้ จึงใช้เวลาน้อยลงในการประมวลผลการสืบค้นฐานข้อมูล ในทางตรงกันข้าม คิวรีของฐานข้อมูลที่ไม่มีการแบ่งส่วนข้อมูลอาจต้องการการค้นหาผ่านแถวหลายร้อยหรือหลายพันแถว

เพิ่มความน่าเชื่อถือในสถานการณ์ไฟดับ

การหยุดชะงักของฐานข้อมูลเกิดขึ้นได้จากหลายสาเหตุ รวมถึงการลบข้อมูลโดยไม่ได้ตั้งใจ ข้อผิดพลาดในการเชื่อมต่อ และการโจมตีความปลอดภัยทางไซเบอร์ Sharding ช่วยลดผลกระทบของไฟดับ เนื่องจากชาร์ดแต่ละชาร์ดเป็นอิสระ มีเพียงชาร์ดที่ได้รับผลกระทบเท่านั้นที่ต้องหยุดทำงาน ตัวอย่างเช่น หากคุณมีส่วนแบ่งข้อมูลสี่ส่วนและประสบกับความล้มเหลวในหนึ่งในนั้น จะมีการดำเนินการเพียง 25 เปอร์เซ็นต์เท่านั้นที่จะได้รับผลกระทบ

ข้อเสียของ Sharding

แม้ว่าการแบ่งกลุ่มจะช่วยเพิ่มความน่าเชื่อถือและความพร้อมใช้งานของฐานข้อมูล การใช้งานฐานข้อมูลนั้นซับซ้อน การใช้สถาปัตยกรรมการแบ่งส่วนข้อมูลที่ไม่ถูกต้องอาจทำให้ประสิทธิภาพการทำงานช้าลงและทำให้ข้อมูลสูญหายได้

อย่าลืมเลือกเทคนิคการแบ่งส่วนข้อมูลที่ช่วยให้มีการกระจายข้อมูลที่สมดุลในทุกส่วนแบ่งข้อมูล หากไม่มีความสมดุลนี้ คุณเสี่ยงที่จะสร้างฮอตสปอตฐานข้อมูล ซึ่งเกิดขึ้นเมื่อชาร์ดหนึ่งเก็บข้อมูลส่วนใหญ่ในขณะที่ชาร์ดอื่นๆ ยังคงว่างเปล่า ซึ่งจะช่วยลดปริมาณงานการเขียนลงในชาร์ดเดี่ยว

ในการแก้ปัญหานี้ คุณสามารถแบ่งพาร์ติชั่นชาร์ดที่ไม่สมดุลออกไปได้อีก แต่กระบวนการนั้นท้าทายและอาจทำลายฐานข้อมูลของคุณในขณะที่คุณย้ายข้อมูล

ข้อเสียอีกประการหนึ่งของการแบ่งกลุ่มย่อยคือการรวม SQL ที่เกี่ยวข้องกับตารางหลายตารางในส่วนแบ่งข้อมูลที่แตกต่างกันอาจทำงานช้าเกินไปและทำให้ประสิทธิภาพลดลง อย่างไรก็ตาม ด้วยสถาปัตยกรรมที่เหมาะสม คุณสามารถหลีกเลี่ยงปัญหานี้ได้

การแบ่งสถาปัตยกรรม

คุณสามารถใช้ชาร์ดดิ้งได้โดยใช้สถาปัตยกรรมสามแบบ:

  • การแบ่งกลุ่มตามคีย์
  • การแบ่งกลุ่มตามช่วง
  • การแบ่งกลุ่มตามไดเรกทอรี

สถาปัตยกรรมที่คุณเลือกขึ้นอยู่กับกรณีการใช้งานของคุณ

การแบ่งส่วนตามคีย์

ในสถาปัตยกรรมการแบ่งกลุ่มตามคีย์หรือแฮช แอปพลิเคชันฐานข้อมูลใช้คีย์ชาร์ดเพื่อค้นหาชาร์ด ฟังก์ชันการแฮชจะแฮชค่าคีย์การแบ่งส่วน และผลลัพธ์จะจับคู่ข้อมูลกับชาร์ดเฉพาะ ฟังก์ชันแฮชอย่างง่ายอาจเป็นโมดูลัสของคีย์และจำนวนชาร์ด

ฟังก์ชันแฮชสามารถใช้คีย์ชาร์ดได้มากกว่าหนึ่งคีย์ ด้วยเหตุนี้ การแบ่งกลุ่มตามคีย์จึงเหมาะสำหรับการบันทึกข้อมูลที่อาจมีคีย์ที่ใช้ร่วมกัน การกระจายข้อมูลตามอัลกอริทึมช่วยลดความเป็นไปได้ในการสร้างฮอตสปอตฐานข้อมูลโดยที่กลุ่มข้อมูลหนึ่งมีข้อมูลมากกว่าอีกแหล่งหนึ่ง

อย่างไรก็ตาม เนื่องจากการกระจายอาศัยเฉพาะฟังก์ชันการแฮช จึงเป็นไปไม่ได้ที่จะจัดกลุ่มข้อมูลตามหลักตรรกะ ดังนั้น การดำเนินการฐานข้อมูลที่ต้องใช้ข้อมูลจากหลายชาร์ดอาจไม่มีประสิทธิภาพ เนื่องจากต้องอ่านข้อมูลจากแต่ละชาร์ด

การแบ่งกลุ่มตามช่วง

การแบ่งกลุ่มตามช่วงเกี่ยวข้องกับการแบ่งกลุ่มฐานข้อมูลโดยขึ้นอยู่กับช่วงของค่าที่ระบุ

ใช้คีย์การแบ่งส่วนเพื่อกำหนดชาร์ดที่จะกำหนดค่าให้ แอปพลิเคชันฐานข้อมูลจะตรวจสอบชาร์ดที่สอดคล้องกับคีย์ชาร์ดในตารางค้นหาและจัดเก็บข้อมูล ด้วยเหตุนี้ การแบ่งกลุ่มตามช่วงจึงง่ายต่อการออกแบบและใช้งาน

ตัวอย่างเช่น คุณสามารถใช้ค่า ID ผู้ใช้ในฐานข้อมูลผู้ใช้เป็นคีย์การแบ่งส่วน คุณสามารถจัดเก็บผู้ใช้ที่มี ID ตั้งแต่ 0-2, 000 ในชาร์ดหนึ่ง ผู้ใช้ระหว่าง 2,000 ถึง 4,000 บนชาร์ดอื่น และอื่นๆ

การแบ่งกลุ่มตามช่วงอาจทำให้เกิดฮอตสปอตฐานข้อมูล พิจารณาฐานข้อมูลผู้ใช้ซึ่ง ID ผู้ใช้ของคุณส่วนใหญ่อยู่ระหว่าง 2,001 ถึง 4,000 กระบวนการกำหนดให้ชาร์ดเดียว ทำให้เกิดความไม่สมดุลเมื่อเวลาผ่านไป การแบ่งกลุ่มตามช่วงจึงทำงานได้ดีที่สุดสำหรับข้อมูลที่กระจายอย่างสม่ำเสมอ

การแบ่งกลุ่มตามไดเรกทอรี

กลุ่มชาร์ดดิ้งตามไดเร็กทอรีที่เกี่ยวข้องกับข้อมูลเชิงตรรกะในชาร์ดเดียวกัน ใช้ตารางค้นหาที่มีรายการการแมปสำหรับแต่ละเอนทิตีในฐานข้อมูล การแมปแต่ละรายการสอดคล้องกับชาร์ดฐานข้อมูล

การแบ่งกลุ่มตามไดเรกทอรีมีความยืดหยุ่นมากกว่าการแบ่งกลุ่มตามช่วงหรือตามคีย์ เนื่องจากคุณสามารถเพิ่มข้อมูลไปยังกลุ่มย่อยแบบไดนามิกได้ ไม่มีฟังก์ชันการแบ่งส่วนที่จะติดตามหรือช่วงค่าที่จะอยู่ภายใน ความยืดหยุ่นนี้ช่วยเพิ่มประสิทธิภาพของฐานข้อมูล: คุณสามารถจัดเก็บข้อมูลที่เกี่ยวข้องไว้ในชาร์ดเดียว ซึ่งหมายความว่าการดำเนินการค้นหาทั่วไปจะใช้เวลาน้อยลง

ตัวอย่างเช่น หากคุณใช้การแบ่งกลุ่มตามไดเรกทอรีและจัดกลุ่มผู้ใช้ตามตำแหน่ง โดยเรียกผู้ใช้จากที่ใดที่หนึ่ง คุณจะค้นหาส่วนย่อยเดียวเท่านั้น

การแบ่งฐานข้อมูลด้วย Kinsta

เอ็นจิ้นฐานข้อมูลที่ทันสมัยส่วนใหญ่ให้การสนับสนุนการแบ่งส่วนฐานข้อมูล หนึ่งในเครื่องมือฐานข้อมูลเหล่านี้คือ MariaDB ซึ่งเป็นส้อม MySQL ที่ได้รับการสนับสนุนในเชิงพาณิชย์ เป็นระบบฐานข้อมูลโอเพ่นซอร์สที่มีประสิทธิภาพสูงที่บริษัทต่างๆ เช่น IBM, GitHub และ Wikimedia ใช้ นอกจากนี้ยังเป็นส่วนหนึ่งของสแต็กเซิร์ฟเวอร์ประสิทธิภาพสูงที่ Kinsta

MariaDB นำเสนอฟีเจอร์การแบ่งส่วนข้อมูลในตัวผ่านเอ็นจิ้นการจัดเก็บสไปเดอร์ เอ็นจิ้นการจัดเก็บสไปเดอร์เป็นเครื่องมือสร้างคลัสเตอร์ที่สนับสนุนธุรกรรมการแบ่งพาร์ติชันและสถาปัตยกรรมแบบขยาย (XA) ช่วยให้คุณสามารถจัดการตารางระยะไกลจากอินสแตนซ์ต่างๆ ราวกับว่าอยู่ในอินสแตนซ์เดียวกัน เมื่อคุณสร้างตารางในเอ็นจิ้นการจัดเก็บสไปเดอร์แล้ว ตารางจะลิงก์ไปยังตารางอื่นในเซิร์ฟเวอร์ MariaDB ระยะไกล เมื่อสร้างการเชื่อมต่อแล้ว เครื่องมือจัดเก็บข้อมูลจะแชร์ลิงก์กับตารางทั้งหมดที่เป็นส่วนหนึ่งของธุรกรรมเดียวกัน

สรุป

การแบ่งส่วนฐานข้อมูลเป็นเทคนิคการปรับขนาดที่แบ่งพาร์ติชั่นตารางออกเป็นเซ็ตย่อยที่เล็กกว่าและกระจายไปยังเซิร์ฟเวอร์ต่างๆ ที่เรียกว่าชาร์ด คุณสามารถใช้การแบ่งกลุ่มย่อยได้หลายวิธี เช่น การแบ่งกลุ่มตามคีย์ การแบ่งกลุ่มตามช่วง และการแบ่งกลุ่มตามไดเรกทอรี

แม้ว่าการแบ่งกลุ่มย่อยจะปรับปรุงความสามารถในการปรับขนาด ความน่าเชื่อถือ และความพร้อมใช้งานของฐานข้อมูล การใช้งานนั้นซับซ้อนมาก นอกจากนี้ เมื่อคุณสร้างชาร์ดแล้ว การเปลี่ยนฐานข้อมูลกลับเป็นสถานะ unsharded ไม่ใช่เรื่องง่าย ด้วยเหตุนี้ ใช้การแบ่งส่วนข้อมูลเพื่อการเพิ่มประสิทธิภาพเฉพาะเมื่อคุณแน่ใจว่าตัวเลือกการปรับขนาดอื่นๆ จะไม่ทำงาน

ไม่ว่าธุรกิจของคุณจะเป็นองค์กรไม่แสวงหากำไรหรือองค์กรระดับองค์กร โซลูชันจากผู้เชี่ยวชาญของ Kinsta สามารถขจัดความกังวลเกี่ยวกับการโฮสต์ไซต์ของคุณ ช่วยให้คุณมุ่งความสนใจไปที่สิ่งที่สำคัญที่สุดได้