ระบบฐานข้อมูลแบบกระจาย 101
หรือฐานข้อมูลแบบกระจาย - FK หมายถึง ' ขนาดของเว็บ ' จริงๆหรือไม่
ระบบฐานข้อมูลแบบกระจายเป็นระบบที่ซับซ้อนและมีหลายรสชาติที่แตกต่างกัน ถ้าฉันขุดลึกลงไปในการศึกษาที่ฉันจำได้เล็กน้อยเกี่ยวกับเรื่องนี้ที่มหาวิทยาลัยฉันจะพยายามอธิบายปัญหาทางวิศวกรรมที่สำคัญบางอย่างเพื่อสร้างระบบฐานข้อมูลแบบกระจาย
ก่อนอื่นคำศัพท์บางคำ
คุณสมบัติกรด (Atomicity, Consistency, Isolation and Durability): สิ่งเหล่านี้เป็นค่าคงที่ที่สำคัญที่จะต้องมีการบังคับใช้สำหรับธุรกรรมที่จะต้องดำเนินการอย่างน่าเชื่อถือโดยไม่ก่อให้เกิดผลข้างเคียงที่ไม่พึงประสงค์
Atomicityต้องการให้ธุรกรรมเสร็จสมบูรณ์หรือย้อนกลับอย่างสมบูรณ์ ธุรกรรมที่เสร็จสิ้นแล้วบางส่วนไม่ควรมองเห็นได้และระบบจะต้องสร้างขึ้นในลักษณะที่ป้องกันไม่ให้สิ่งนี้เกิดขึ้น
ความสอดคล้องต้องการให้ธุรกรรมไม่ควรละเมิดค่าคงที่ใด ๆ (เช่นการอ้างอิงความสมบูรณ์ของการประกาศ) ที่รับรองโดยคีมาฐานข้อมูล ตัวอย่างเช่นถ้ามีคีย์ต่างประเทศมันเป็นไปไม่ได้ที่จะแทรกบันทึกลูกด้วยความเคารพไปยังผู้ปกครองที่ไม่มีอยู่จริง
การแยกต้องมีการทำธุรกรรมที่ไม่ควรแทรกแซงซึ่งกันและกัน ระบบควรรับประกันผลลัพธ์เดียวกันหากทำธุรกรรมแบบขนานหรือต่อเนื่อง ในทางปฏิบัติผลิตภัณฑ์ RDBMS ส่วนใหญ่อนุญาตโหมดที่แลกกับการแยกจากประสิทธิภาพ
ความคงทนนั้นต้องใช้เมื่อทำรายการธุรกรรมนั้นยังคงอยู่ในที่จัดเก็บข้อมูลถาวรในลักษณะที่ทนทานต่อความล้มเหลวของฮาร์ดแวร์หรือซอฟต์แวร์
ฉันจะอธิบายถึงอุปสรรค์ทางเทคนิคบางประการข้อกำหนดเหล่านี้มีอยู่ในระบบแบบกระจายด้านล่าง
Shared Disk Architecture:สถาปัตยกรรมที่โหนดการประมวลผลทั้งหมดในคลัสเตอร์สามารถเข้าถึงที่เก็บข้อมูลทั้งหมด สิ่งนี้สามารถแสดงคอขวดกลางสำหรับการเข้าถึงข้อมูล ตัวอย่างของระบบที่ใช้ร่วมกันดิสก์ Oracle RACหรือExadata
Shared Nothing Architecture:สถาปัตยกรรมที่การประมวลผลโหนดในคลัสเตอร์มีที่จัดเก็บในตัวเครื่องซึ่งไม่สามารถมองเห็นได้ด้วยโหนดคลัสเตอร์อื่น ตัวอย่างของระบบที่ใช้ร่วมกันไม่มีอะไรเป็น TeradataและNetezza
Shared Memory Architecture:สถาปัตยกรรมที่ CPU หลายตัว (หรือโหนด) สามารถเข้าถึงพูลหน่วยความจำที่ใช้ร่วมกัน เซิร์ฟเวอร์ที่ทันสมัยส่วนใหญ่เป็นประเภทหน่วยความจำที่ใช้ร่วมกัน หน่วยความจำที่ใช้ร่วมกันช่วยให้การดำเนินการบางอย่างเช่นแคชหรือการซิงโครไนซ์แบบพื้นฐานของอะตอมที่ยากต่อการทำบนระบบแบบกระจาย
การซิงโครไนซ์:คำทั่วไปที่อธิบายวิธีการต่าง ๆ เพื่อให้มั่นใจถึงการเข้าถึงทรัพยากรที่ใช้ร่วมกันอย่างสม่ำเสมอโดยกระบวนการหรือเธรดจำนวนมาก นี่เป็นเรื่องยากที่จะทำบนระบบกระจายมากกว่าในระบบหน่วยความจำที่ใช้ร่วมกันถึงแม้ว่าสถาปัตยกรรมเครือข่ายบางอย่าง (เช่น BYNET ของ Teradata) มีการซิงโครไนซ์แบบดั้งเดิมในโปรโตคอลเครือข่าย การซิงโครไนซ์สามารถมาพร้อมกับค่าใช้จ่ายจำนวนมาก
Semi-Join:แบบดั้งเดิมที่ใช้ในการเข้าร่วมข้อมูลที่เก็บไว้ในสองโหนดที่แตกต่างกันของระบบกระจาย โดยพื้นฐานแล้วมันประกอบด้วยข้อมูลที่เพียงพอเกี่ยวกับแถวที่จะเข้าร่วมซึ่งถูกรวมและส่งผ่านโดยโหนดหนึ่งไปยังอีกโหนดหนึ่งเพื่อแก้ไขการเข้าร่วม ในแบบสอบถามขนาดใหญ่นี้อาจเกี่ยวข้องกับการรับส่งข้อมูลเครือข่ายที่สำคัญ
ความสอดคล้องในที่สุด:คำที่ใช้เพื่ออธิบายความหมายของธุรกรรมที่แลกเปลี่ยนการปรับปรุงทันที (ความสอดคล้องในการอ่าน) บนโหนดทั้งหมดของระบบกระจายเพื่อประสิทธิภาพ (และทำให้ปริมาณธุรกรรมสูงขึ้น) เมื่อเขียน ความสอดคล้องในที่สุดคือผลข้างเคียงของการใช้ Quorum Replicationเป็นการเพิ่มประสิทธิภาพเพื่อเพิ่มความเร็วในการทำธุรกรรมในฐานข้อมูลแบบกระจายที่มีหลายสำเนาของข้อมูลจะถูกเก็บไว้ในโหนดที่แยกต่างหาก
อัลกอริทึมของ Lamport:อัลกอริทึมสำหรับการใช้งานการแยกกัน (ซิงโครไนซ์) ข้ามระบบที่ไม่มีหน่วยความจำที่แชร์ การยกเว้นซึ่งกันและกันในระบบต้องใช้อะตอมมิกอ่าน - เปรียบเทียบ - เขียนหรือคำสั่งที่คล้ายกันของประเภทปกติปฏิบัติเฉพาะในระบบหน่วยความจำที่ใช้ร่วมกัน อัลกอริธึมการซิงโครไนซ์แบบกระจายอื่น ๆ มีอยู่ แต่ Lamport เป็นหนึ่งในรายแรกและเป็นที่รู้จักกันดีที่สุด เช่นเดียวกับกลไกการซิงโครไนซ์แบบกระจายส่วนใหญ่อัลกอริธึมของ Lamport นั้นขึ้นอยู่กับเวลาที่แม่นยำและโหนดคลัสเตอร์
Two Phase Commit (2PC):ตระกูลของโปรโตคอลที่ช่วยให้มั่นใจว่าการอัพเดทฐานข้อมูลที่เกี่ยวข้องกับระบบฟิสิคัลหลาย ๆ การกระทำหรือย้อนกลับอย่างสม่ำเสมอ ไม่ว่าจะใช้ 2PC ภายในระบบหรือข้ามหลายระบบผ่านตัวจัดการธุรกรรมที่มีค่าใช้จ่ายสูง
ในโพรโทคอลการส่งแบบสองเฟสผู้จัดการธุรกรรมขอให้โหนดที่เข้าร่วมมีส่วนร่วมในการทำธุรกรรมในลักษณะที่พวกเขาสามารถรับประกันได้ว่ามันจะส่งมอบแล้วส่งสัญญาณสถานะนี้ เมื่อโหนดทั้งหมดได้คืนสถานะ 'ความสุข' มันจะส่งสัญญาณให้โหนดยอมรับ การทำธุรกรรมนั้นยังคงเปิดอยู่จนกระทั่งโหนดทั้งหมดส่งการตอบกลับที่ระบุว่าการกระทำเสร็จสมบูรณ์ หากโหนดหยุดทำงานก่อนที่จะส่งสัญญาณการกระทำเสร็จสิ้นตัวจัดการธุรกรรมจะทำการค้นหาโหนดอีกครั้งเมื่อมันกลับมาจนกว่าจะได้รับการตอบกลับในเชิงบวกซึ่งบ่งชี้ว่าการทำธุรกรรมได้กระทำ
การควบคุมภาวะพร้อมกันหลายรุ่น (MVCC): การจัดการการโต้แย้งโดยการเขียนข้อมูลเวอร์ชั่นใหม่ไปยังตำแหน่งอื่นและอนุญาตให้การทำธุรกรรมอื่น ๆ ดูข้อมูลรุ่นเก่าได้จนกว่าจะมีการสร้างเวอร์ชั่นใหม่ สิ่งนี้จะช่วยลดความขัดแย้งของฐานข้อมูลด้วยค่าใช้จ่ายของทราฟฟิกการเขียนเพิ่มเติมเพื่อเขียนเวอร์ชันใหม่จากนั้นทำเครื่องหมายเวอร์ชันเก่าว่าล้าสมัย
Election Algorithm:ระบบกระจายที่เกี่ยวข้องกับหลาย ๆ โหนดนั้นมีความน่าเชื่อถือน้อยกว่าระบบเดียวเนื่องจากมีโหมดความล้มเหลวมากกว่า ในหลายกรณีกลไกบางอย่างจำเป็นสำหรับระบบคลัสเตอร์เพื่อจัดการกับความล้มเหลวของโหนด อัลกอริทึมการเลือกตั้งเป็นคลาสของอัลกอริทึมที่ใช้ในการเลือกผู้นำเพื่อประสานการคำนวณแบบกระจายในสถานการณ์ที่โหนด 'ผู้นำ' ไม่ได้กำหนดหรือเชื่อถือได้ 100%
การแบ่งพาร์ติชันแนวนอน:ตารางอาจถูกแบ่งข้ามหลายโหนดหรือไดรฟ์ข้อมูลที่เก็บข้อมูลด้วยคีย์ สิ่งนี้ทำให้ปริมาณข้อมูลขนาดใหญ่ถูกแบ่งออกเป็นชิ้นเล็ก ๆ และกระจายข้ามโหนดเก็บข้อมูล
Sharding:ชุดข้อมูลอาจแบ่งพาร์ติชันตามแนวนอนข้ามหลายโหนดจริงในสถาปัตยกรรมแบบไม่มีอะไรที่แชร์ โดยที่การแบ่งพาร์ติชั่นนี้ไม่โปร่งใส (เช่นลูกค้าจะต้องทราบถึงรูปแบบของพาร์ติชั่นและหาว่าโหนดใดที่จะสอบถามอย่างชัดเจน) สิ่งนี้เรียกว่าการแบ่งส่วน ระบบบางระบบ (เช่น Teradata) ทำการแยกข้อมูลข้ามโหนด แต่ตำแหน่งนั้นโปร่งใสสำหรับลูกค้า คำที่ไม่ปกติใช้ร่วมกับระบบประเภทนี้
Hashing ที่สอดคล้องกัน:อัลกอริทึมที่ใช้ในการจัดสรรข้อมูลให้กับพาร์ติชันตามคีย์ มันมีเอกลักษณ์เฉพาะด้วยการกระจายตัวของปุ่มแฮชและความสามารถในการขยายหรือลดจำนวนของที่เก็บข้อมูลได้อย่างมีประสิทธิภาพ แอ็ตทริบิวต์เหล่านี้ทำให้มีประโยชน์สำหรับการแบ่งพาร์ติชันข้อมูลหรือโหลดข้ามคลัสเตอร์ของโหนดที่ขนาดสามารถเปลี่ยนแปลงได้แบบไดนามิกเมื่อมีการเพิ่มหรือลดขนาดของคลัสเตอร์ (อาจเกิดจากความล้มเหลว)
การจำลองแบบ Multi-Master:เทคนิคที่อนุญาตให้เขียนข้ามหลายโหนดในคลัสเตอร์เพื่อทำซ้ำไปยังโหนดอื่น เทคนิคนี้ช่วยให้ปรับขนาดได้ง่ายขึ้นโดยอนุญาตให้บางพาร์ติชันหรือแบ่งพาร์ทิชันบนเซิร์ฟเวอร์ การเขียนต้องถูกทำซ้ำไปยังโหนดทั้งหมดเมื่อเทียบกับองค์ประชุมดังนั้นการทำธุรกรรมจึงมีราคาแพงกว่าในสถาปัตยกรรมที่จำลองแบบหลายต้นแบบมากกว่าบนระบบที่ทำซ้ำองค์ประชุม
Non-Blocking Switch:สวิตช์เครือข่ายที่ใช้ความขนานของฮาร์ดแวร์ภายในเพื่อให้ได้ปริมาณงานที่เป็นสัดส่วนกับจำนวนพอร์ตโดยไม่มีคอขวดภายใน การใช้งานแบบไร้เดียงสาสามารถใช้กลไก crossbar แต่สิ่งนี้มีความซับซ้อน O (N ^ 2) สำหรับพอร์ต N ซึ่ง จำกัด ให้สวิตช์ขนาดเล็ก สวิตช์ที่ใหญ่กว่าสามารถใช้โทโพโลยีภายในที่ซับซ้อนมากขึ้นที่เรียกว่าสวิตช์การขยายแบบไม่ปิดกั้นขนาดเล็กเพื่อให้ได้อัตราการรับส่งข้อมูลแบบตรงโดยไม่ต้องใช้ฮาร์ดแวร์ O (N ^ 2)
การสร้าง DBMS แบบกระจาย - มันยากขนาดไหน?
ความท้าทายทางเทคนิคหลายประการทำให้การปฏิบัติในทางปฏิบัติค่อนข้างยาก นอกเหนือจากความซับซ้อนที่เพิ่มขึ้นของการสร้างระบบกระจายแล้วสถาปนิกของ DBMS แบบกระจายยังต้องเอาชนะปัญหาทางวิศวกรรมที่ยุ่งยาก
Atomicity บนระบบแบบกระจาย:ถ้าข้อมูลถูกอัพเดตโดยทรานแซคชันจะถูกกระจายข้ามหลายโหนดการคอมมิท / การย้อนกลับของโหนดจะต้องมีการประสานงาน สิ่งนี้จะเพิ่มค่าใช้จ่ายที่สำคัญในระบบที่ไม่มีการแบ่งปัน บนระบบดิสก์ที่ใช้ร่วมกันปัญหานี้น้อยกว่าเนื่องจากทุกโหนดสามารถมองเห็นที่เก็บข้อมูลทั้งหมดดังนั้นโหนดเดียวจึงสามารถประสานงานการส่งข้อมูลได้
ความสอดคล้องกับระบบแบบกระจาย:ในการรับตัวอย่างคีย์ต่างประเทศที่อ้างถึงด้านบนระบบจะต้องสามารถประเมินสถานะที่สอดคล้องกันได้ ตัวอย่างเช่นหากผู้ปกครองและลูกของความสัมพันธ์ต่างประเทศสำคัญสามารถอยู่ในโหนดที่แตกต่างกันกลไกการล็อคแบบกระจายบางประเภทเป็นสิ่งจำเป็นเพื่อให้แน่ใจว่าข้อมูลที่ล้าสมัยจะไม่ถูกใช้ในการตรวจสอบการทำธุรกรรม หากสิ่งนี้ไม่ได้บังคับใช้คุณอาจมี (ตัวอย่าง) สภาพการแย่งชิงที่ผู้ปกครองถูกลบหลังจากที่มีการตรวจสอบการมีอยู่ของมันก่อนที่จะอนุญาตให้มีการแทรกของเด็ก
การบังคับใช้ข้อ จำกัด ล่าช้า (เช่นรอจนกระทั่งส่งมอบเพื่อตรวจสอบ DRI) ต้องมีการล็อคเพื่อเก็บไว้ในช่วงเวลาของการทำธุรกรรม การล็อคแบบกระจายนี้มาพร้อมกับค่าใช้จ่ายที่สำคัญ
หากมีการเก็บข้อมูลหลายชุด (อาจจำเป็นสำหรับระบบที่ไม่มีการแบ่งใช้เพื่อหลีกเลี่ยงทราฟฟิกเครือข่ายที่ไม่จำเป็นจากการรวมแบบกึ่ง) ดังนั้นข้อมูลทั้งหมดจะต้องได้รับการอัพเดต
การแยกบนระบบแบบกระจาย: ในกรณีที่ข้อมูลที่ได้รับผลกระทบจากการทำธุรกรรมอยู่บนหลายโหนดของระบบการล็อคและเวอร์ชั่น (หากใช้งาน MVCC) จะต้องทำข้อมูลให้ตรงกันข้ามโหนด การรับประกันความต่อเนื่องของการดำเนินงานโดยเฉพาะอย่างยิ่งในสถาปัตยกรรมที่ไม่มีการแบ่งใช้ซึ่งสำเนาของข้อมูลที่ซ้ำซ้อนอาจถูกจัดเก็บต้องการกลไกการซิงโครไนซ์แบบกระจายเช่นอัลกอริทึมของ Lamport ซึ่งมาพร้อมกับค่าใช้จ่ายจำนวนมาก
ความทนทานของระบบแบบกระจาย:ในระบบดิสก์ที่ใช้ร่วมกันปัญหาด้านความทนทานเป็นหลักเหมือนกับระบบหน่วยความจำที่ใช้ร่วมกันโดยมีข้อยกเว้นว่ายังจำเป็นต้องใช้โปรโตคอลการซิงโครไนซ์แบบกระจายแบบกระจายข้ามโหนด DBMS จะต้องเขียนเจอร์นัลลงในบันทึกและเขียนข้อมูลออกมาอย่างสม่ำเสมอ บนระบบที่ไม่มีการแบ่งใช้อาจมีสำเนาของข้อมูลหรือส่วนต่าง ๆ ของข้อมูลที่จัดเก็บในโหนดที่แตกต่างกันหลายชุด จำเป็นต้องมีโปรโตคอลการยอมรับแบบสองเฟสเพื่อให้แน่ใจว่าการส่งข้อมูลเกิดขึ้นอย่างถูกต้องข้ามโหนด สิ่งนี้ยังมีค่าใช้จ่ายที่สำคัญ
บนระบบที่ไม่มีการแบ่งใช้การสูญเสียโหนดอาจหมายถึงข้อมูลไม่พร้อมใช้งานสำหรับระบบ เพื่อบรรเทาข้อมูลนี้อาจถูกจำลองแบบข้ามโหนดมากกว่าหนึ่งโหนด ความสอดคล้องในสถานการณ์นี้หมายความว่าข้อมูลจะต้องถูกจำลองแบบไปยังโหนดทั้งหมดที่อยู่ตามปกติ สิ่งนี้อาจทำให้เกิดค่าใช้จ่ายมากในการเขียน
การปรับให้เหมาะสมทั่วไปอย่างหนึ่งที่ทำในระบบ NoSQL คือการใช้การจำลองแบบองค์ประชุมและความสอดคล้องในที่สุดเพื่อให้ข้อมูลสามารถทำซ้ำอย่างเกียจคร้านในขณะที่รับประกันระดับความยืดหยุ่นของข้อมูลโดยการเขียนลงในองค์ประชุมก่อนรายงานธุรกรรม จากนั้นข้อมูลจะถูกจำลองแบบอย่างเกียจคร้านไปยังโหนดอื่น ๆ ที่สำเนาของข้อมูลอยู่
โปรดทราบว่า 'ความสอดคล้องในที่สุด' เป็นการแลกเปลี่ยนที่สำคัญในความสอดคล้องซึ่งอาจไม่เป็นที่ยอมรับหากข้อมูลต้องดูอย่างสม่ำเสมอทันทีที่มีการทำธุรกรรม ตัวอย่างเช่นในแอปพลิเคชันทางการเงินยอดคงเหลือที่อัปเดตควรพร้อมใช้งานทันที
ระบบแชร์ดิสก์
ระบบดิสก์ที่ใช้ร่วมกันเป็นระบบที่ทุกโหนดสามารถเข้าถึงที่เก็บข้อมูลทั้งหมดได้ ดังนั้นการคำนวณจึงขึ้นอยู่กับตำแหน่ง แพลตฟอร์ม DBMS จำนวนมากสามารถทำงานในโหมดนี้ได้ - Oracle RAC เป็นตัวอย่างของสถาปัตยกรรมดังกล่าว
ระบบดิสก์ที่ใช้ร่วมกันสามารถปรับขนาดได้อย่างมากเนื่องจากสามารถรองรับความสัมพันธ์ M: M ระหว่างโหนดที่เก็บข้อมูลและโหนดการประมวลผล SAN สามารถมีคอนโทรลเลอร์หลายตัวและเซิร์ฟเวอร์หลายตัวสามารถเรียกใช้ฐานข้อมูลได้ สถาปัตยกรรมเหล่านี้มีสวิตช์เป็นคอขวดกลาง แต่สวิตช์คานอนุญาตให้สวิตช์นี้มีแบนด์วิดท์จำนวนมาก การประมวลผลบางอย่างสามารถลดลงในโหนดจัดเก็บข้อมูล (เช่นในกรณีของ Exadata ของ Oracle) ซึ่งสามารถลดปริมาณการใช้งานบนแบนด์วิดธ์หน่วยเก็บข้อมูล
แม้ว่าสวิตช์ในทางทฤษฎีจะเป็นคอขวดของแบนด์วิดท์ที่มีอยู่หมายความว่าสถาปัตยกรรมดิสก์ที่ใช้ร่วมกันจะปรับขนาดได้อย่างมีประสิทธิภาพไปยังปริมาณธุรกรรมขนาดใหญ่ สถาปัตยกรรม DBMS ที่เป็นกระแสหลักส่วนใหญ่ใช้แนวทางนี้เพราะมีความสามารถในการปรับขยายได้ 'ดีพอ' และมีความน่าเชื่อถือสูง ด้วยสถาปัตยกรรมหน่วยเก็บข้อมูลที่ซ้ำซ้อนเช่นแชนเนลไฟเบอร์ไม่มีจุดของความล้มเหลวเดียวเนื่องจากมีอย่างน้อยสองเส้นทางระหว่างโหนดการประมวลผลใด ๆ และโหนดหน่วยเก็บข้อมูลใด ๆ
ระบบที่ใช้ร่วมกันไม่มีอะไร
Shared-nothing systems คือระบบที่มีข้อมูลอย่างน้อยบางส่วนถูกจัดเก็บไว้ในโหนดและไม่สามารถมองเห็นโหนดอื่น ๆ ได้โดยตรง สิ่งนี้จะลบคอขวดของสวิตช์ส่วนกลางทำให้ฐานข้อมูลสามารถปรับขนาด (อย่างน้อยก็ในทางทฤษฎี) ด้วยจำนวนโหนด การแบ่งพาร์ติชันในแนวนอนช่วยให้สามารถแยกข้อมูลข้ามโหนดได้ สิ่งนี้อาจโปร่งใสสำหรับลูกค้าหรือไม่ (ดูที่ Sharding ด้านบน)
เนื่องจากข้อมูลมีการกระจายโดยทั่วไปแบบสอบถามอาจต้องใช้ข้อมูลจากโหนดมากกว่าหนึ่งโหนด หากการเข้าร่วมต้องการข้อมูลจากโหนดที่แตกต่างกันการดำเนินการกึ่งเข้าร่วมจะใช้ในการถ่ายโอนข้อมูลเพียงพอที่จะรองรับการเข้าร่วมจากโหนดหนึ่งไปยังอีก สิ่งนี้อาจส่งผลให้ปริมาณการรับส่งข้อมูลเครือข่ายจำนวนมากดังนั้นการปรับการกระจายข้อมูลให้เหมาะสมอาจทำให้ประสิทธิภาพการสืบค้นแตกต่างกันอย่างมาก
บ่อยครั้งที่ข้อมูลถูกจำลองแบบข้ามโหนดของระบบที่ไม่มีการแบ่งใช้เพื่อลดความจำเป็นสำหรับการรวมแบบกึ่ง วิธีนี้ใช้ได้ผลดีกับอุปกรณ์คลังข้อมูลเนื่องจากขนาดโดยทั่วไปจะมีขนาดเล็กกว่าตารางข้อเท็จจริงและสามารถจำลองแบบข้ามโหนดได้อย่างง่ายดาย พวกเขามักจะโหลดเป็นแบทช์ดังนั้นค่าใช้จ่ายในการจำลองแบบจะมีปัญหาน้อยกว่าที่จะอยู่ในแอปพลิเคชันการทำธุรกรรม
ความขนานโดยธรรมชาติของสถาปัตยกรรมที่ไม่มีอะไรที่ใช้ร่วมกันทำให้พวกมันเหมาะสมกับลักษณะของการสืบค้นแบบตารางสแกน / การรวบรวมรวมของคลังข้อมูล การดำเนินการเรียงลำดับนี้สามารถปรับได้เกือบเป็นเส้นตรงกับจำนวนโหนดการประมวลผล การเชื่อมต่อจำนวนมากข้ามโหนดมักจะมีค่าใช้จ่ายมากขึ้นเนื่องจากการดำเนินการแบบกึ่งรวมสามารถสร้างการรับส่งข้อมูลเครือข่ายจำนวนมาก
การย้ายไดรฟ์ข้อมูลขนาดใหญ่มีประโยชน์น้อยกว่าสำหรับแอปพลิเคชันการประมวลผลธุรกรรมซึ่งค่าใช้จ่ายในการอัปเดตจำนวนมากทำให้สถาปัตยกรรมประเภทนี้น่าดึงดูดน้อยกว่าดิสก์ที่ใช้ร่วมกัน ดังนั้นสถาปัตยกรรมประเภทนี้จึงไม่ควรใช้กับแอพพลิเคชั่นคลังข้อมูลอย่างแพร่หลาย
การคัดลอกควอรัมและความสอดคล้องท้ายที่สุด
การจำลองแบบ Quorum เป็นสิ่งอำนวยความสะดวกที่ DBMS จำลองข้อมูลเพื่อความพร้อมใช้งานสูง สิ่งนี้มีประโยชน์สำหรับระบบที่ตั้งใจทำงานกับฮาร์ดแวร์สินค้าราคาถูกที่ไม่มีคุณสมบัติความพร้อมใช้งานสูงเช่น SAN ในระบบประเภทนี้ข้อมูลจะถูกเรพลิเคตข้ามโหนดหน่วยเก็บข้อมูลหลายโหนดสำหรับประสิทธิภาพการอ่านและหน่วยเก็บข้อมูลสำรองเพื่อทำให้ระบบยืดหยุ่นต่อความล้มเหลวของฮาร์ดแวร์ของโหนด
อย่างไรก็ตามการจำลองแบบของการเขียนไปยังโหนดทั้งหมดคือ O (M x N) สำหรับโหนด M และ N เขียน สิ่งนี้ทำให้การเขียนมีราคาแพงหากการเขียนต้องถูกจำลองแบบไปยังโหนดทั้งหมดก่อนที่จะอนุญาตให้ทำธุรกรรม การจำลองแบบองค์รวมเป็นการประนีประนอมที่ช่วยให้การเขียนจะถูกจำลองแบบไปยังส่วนย่อยของโหนดทันทีและจากนั้นเขียนไปยังโหนดอื่นอย่างเกียจคร้านโดยงานพื้นหลัง การเขียนสามารถกระทำได้เร็วขึ้นในขณะเดียวกันก็ให้ความซ้ำซ้อนในระดับหนึ่งด้วยการทำให้แน่ใจว่าพวกมันถูกจำลองแบบไปยังส่วนย่อยขั้นต่ำสุด (องค์ประชุม) ของโหนดก่อนที่จะรายงานการทำธุรกรรมตามที่ได้ทำไว้กับลูกค้า
ซึ่งหมายความว่าการอ่านโหนดภายนอกโควรัมสามารถดูข้อมูลรุ่นล้าสมัยได้จนกว่ากระบวนการพื้นหลังจะเสร็จสิ้นการเขียนข้อมูลไปยังโหนดที่เหลือ ความหมายเรียกว่า 'ความสอดคล้องท้ายที่สุด' และอาจหรืออาจไม่เป็นที่ยอมรับทั้งนี้ขึ้นอยู่กับข้อกำหนดของแอปพลิเคชันของคุณ แต่หมายความว่าธุรกรรมที่กระทำนั้นใกล้เคียงกับ O (1) มากกว่า O (n) ในการใช้ทรัพยากร
Sharding กำหนดให้ไคลเอ็นต์ต้องระวังการแบ่งพาร์ติชันของข้อมูลภายในฐานข้อมูลซึ่งมักจะใช้อัลกอริธึมชนิดที่รู้จักกันในชื่อ 'hashing ที่สอดคล้อง' ในฐานข้อมูลเศษลูกค้าที่แฮชคีย์เพื่อตรวจสอบว่าเซิร์ฟเวอร์ในคลัสเตอร์ที่จะออกแบบสอบถามไป เนื่องจากคำร้องขอถูกกระจายข้ามโหนดในคลัสเตอร์จึงไม่มีปัญหาคอขวดที่มีโหนดผู้ประสานงานแบบสอบถามเดียว
เทคนิคเหล่านี้อนุญาตให้ฐานข้อมูลขยายในอัตราใกล้เชิงเส้นโดยการเพิ่มโหนดเข้ากับคลัสเตอร์ ในทางทฤษฎีการจำลองแบบองค์ประชุมเป็นสิ่งจำเป็นเฉพาะถ้าสื่อจัดเก็บข้อมูลพื้นฐานจะได้รับการพิจารณาไม่น่าเชื่อถือ สิ่งนี้มีประโยชน์หากต้องใช้เซิร์ฟเวอร์สินค้าโภคภัณฑ์ แต่มีค่าน้อยกว่าหากกลไกหน่วยเก็บข้อมูลพื้นฐานมีรูปแบบความพร้อมใช้งานสูงของตนเอง (เช่น SAN ที่มีตัวควบคุมแบบมิเรอร์และการเชื่อมต่อหลายเส้นทางไปยังโฮสต์)
ตัวอย่างเช่น BigTable ของ Google ไม่ได้ใช้การจำลองแบบ Quorum ด้วยตัวเองแม้ว่าจะใช้ระบบ GFS ซึ่งเป็นระบบไฟล์คลัสเตอร์ที่ใช้การจำลองแบบควอรัมก็ตาม BigTable (หรือระบบที่ไม่มีการแบ่งใช้ใด ๆ ) สามารถใช้ระบบจัดเก็บข้อมูลที่เชื่อถือได้ซึ่งมีตัวควบคุมหลายตัวและแบ่งพาร์ติชันข้อมูลระหว่างตัวควบคุม การเข้าถึงแบบขนานนั้นจะทำได้โดยการแบ่งพาร์ติชันของข้อมูล
กลับไปที่แพลตฟอร์ม RDBMS
ไม่มีเหตุผลโดยธรรมชาติที่ไม่สามารถใช้เทคนิคเหล่านี้กับ RDBMS อย่างไรก็ตามการจัดการล็อคและรุ่นจะค่อนข้างซับซ้อนในระบบดังกล่าวและตลาดใด ๆ สำหรับระบบดังกล่าวมีแนวโน้มที่จะค่อนข้างพิเศษ ไม่มีแพลตฟอร์ม RDBMS หลักใดที่ใช้การจำลองแบบองค์ประชุมและฉันไม่ได้รับรู้ถึงผลิตภัณฑ์ RDBMS ใด ๆ (อย่างน้อยก็ไม่ได้เป็นหนึ่งเดียวกับการดูดซับอย่างมีนัยสำคัญ)
Shared-disk และ shared-nothing systems สามารถเพิ่มปริมาณงานได้มาก ตัวอย่างเช่น Oracle RAC สามารถรองรับ 63 โหนดการประมวลผล (ซึ่งอาจเป็นเครื่อง SMP ขนาดใหญ่ที่อยู่ด้านขวาของตัวเอง) และตัวควบคุมพื้นที่เก็บข้อมูลจำนวนหนึ่งบน SAN IBM Sysplex (คลัสเตอร์ของเมนเฟรม zSeries) สามารถรองรับเมนเฟรมจำนวนมาก (แต่ละอันมีกำลังการประมวลผลที่สำคัญและแบนด์วิดธ์ I / O ของตนเอง) และตัวควบคุม SAN หลายตัว สถาปัตยกรรมเหล่านี้สามารถรองรับปริมาณการทำธุรกรรมที่มีขนาดใหญ่มากด้วยความหมายของ ACID แม้ว่าพวกเขาจะถือว่าการจัดเก็บที่เชื่อถือได้ Teradata, Netezza และผู้ขายรายอื่นสร้างแพลตฟอร์มการวิเคราะห์ที่มีประสิทธิภาพสูงโดยอิงจากการออกแบบที่ไม่มีอะไรที่ใช้ร่วมกันซึ่งปรับขนาดเป็นปริมาณข้อมูลขนาดใหญ่มาก
จนถึงขณะนี้ตลาดสำหรับแพลตฟอร์ม ACID RDBMS ที่มีปริมาณมาก แต่ราคาถูกมากเป็นพิเศษถูกครอบงำโดย MySQL ซึ่งรองรับการคัดลอกและการจำลองแบบหลายต้นแบบ MySQL ไม่ได้ใช้การจำลองแบบองค์ประชุมเพื่อเพิ่มประสิทธิภาพ throughput การเขียนดังนั้นการทำธุรกรรมมีราคาแพงกว่าในระบบ NoSQL Sharding อนุญาตให้ปริมาณการอ่านสูงมาก (ตัวอย่างเช่น Facebook ใช้ MySQL อย่างกว้างขวาง) ดังนั้นสถาปัตยกรรมประเภทนี้จึงปรับขนาดได้ตามปริมาณงานที่อ่านมาก
การอภิปรายที่น่าสนใจ
BigTableเป็นสถาปัตยกรรมที่ใช้ร่วมกันไม่มีอะไร (หลักกระจายค่าคีย์คู่) เป็นแหลมออกโดยไมเคิล Hausenblas ด้านล่าง การประเมินดั้งเดิมของฉันนั้นรวมถึงโปรแกรม MapReduce ซึ่งไม่ได้เป็นส่วนหนึ่งของ BigTable แต่โดยปกติจะใช้ร่วมกับมันในการใช้งานทั่วไป (เช่น Hadoop / HBase และกรอบการทำงาน MapReduce ของ Google)
การเปรียบเทียบสถาปัตยกรรมนี้กับ Teradata ซึ่งมีความสัมพันธ์แบบฟิสิคัลระหว่างหน่วยเก็บและการประมวลผล (เช่นโหนดมีหน่วยเก็บข้อมูลโลคัลมากกว่า SAN ที่ใช้ร่วมกัน) คุณสามารถยืนยันว่า BigTable / MapReduce เป็นสถาปัตยกรรมดิสก์ที่ใช้ร่วมกันผ่านระบบจัดเก็บข้อมูลแบบขนานทั่วโลก
ปริมาณการประมวลผลของระบบสไตล์ MapReduce เช่น Hadoop ถูก จำกัด ด้วยแบนด์วิดท์ของสวิตช์เครือข่ายที่ไม่บล็อก 1 สวิทช์ที่ไม่บล็อกสามารถจัดการกับการรวมแบนด์วิดท์ขนาดใหญ่เนื่องจากความขนานในการออกแบบดังนั้นจึงไม่ค่อยมีข้อ จำกัด ในทางปฏิบัติที่สำคัญเกี่ยวกับประสิทธิภาพ ซึ่งหมายความว่าสถาปัตยกรรมดิสก์ที่ใช้ร่วมกัน (อาจเรียกว่าระบบจัดเก็บข้อมูลที่ใช้ร่วมกันได้ดีกว่า) สามารถปรับขนาดเป็นปริมาณงานขนาดใหญ่ได้แม้ว่าสวิตช์เครือข่ายจะเป็นคอขวดกลางในทางทฤษฎี
จุดเริ่มต้นคือการสังเกตว่าถึงแม้ว่าคอขวดกลางนี้จะมีอยู่ในระบบดิสก์ที่ใช้ร่วมกัน แต่ระบบย่อยหน่วยเก็บข้อมูลที่แบ่งพาร์ติชั่นด้วยโหนดจัดเก็บข้อมูลหลายโหนด (เช่นเซิร์ฟเวอร์แท็บเล็ต BigTable หรือตัวควบคุม SAN) สถาปัตยกรรมสวิตช์แบบไม่มีการปิดกั้นสามารถ (ในทางทฤษฎี) จัดการการเชื่อมต่อปัจจุบันได้มากเท่าที่มีพอร์ต
1แน่นอนว่าการประมวลผลและปริมาณงานของ I / O ที่มีอยู่นั้นยังมีข้อ จำกัด ด้านประสิทธิภาพ แต่สวิตช์เครือข่ายเป็นจุดศูนย์กลางในการรับส่งข้อมูลทั้งหมด