ฐานข้อมูล Nosql และความสามารถในการแบ่งส่วนข้อมูลโดยอัตโนมัติ

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

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

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

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

Nosql สามารถแจกจ่ายข้ามเซิร์ฟเวอร์หลายเครื่องได้หรือไม่?

ภาพโดย: ringcentral

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

นอกจากนี้ยังสามารถปรับปรุงความปลอดภัยของระบบด้วยการจัดเตรียมความซ้ำซ้อน

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

Mongodb รองรับ Auto Sharding หรือไม่?

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

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

ใน MongoDB 3.6 ทั้งชาร์ดและเซิร์ฟเวอร์การกำหนดค่าแต่ละรายการต้องได้รับการกำหนดค่าเป็นแบบจำลอง การมีชุดจำลองหลายชุดที่มีสมาชิกหลายคนจะเป็นประโยชน์ต่อการรักษาข้อมูลของคุณให้ปลอดภัยและพร้อมใช้งาน อย่างไรก็ตาม ความซับซ้อนของสถาปัตยกรรมแบบแยกส่วนนั้นเพิ่มขึ้นอย่างมาก บทความต่อไปนี้จะอธิบายวิธีการตั้งค่าและเรียกใช้คลัสเตอร์ที่ชาร์ดโดยเร็วที่สุด หากคุณเปิดใช้งานการรับรองความถูกต้องบนอินสแตนซ์ MongoDB คุณจะต้องตรวจสอบรหัสผ่านเท่านั้น เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดในบทช่วยสอนนี้ คุณควรปิดใช้งานบล็อกความปลอดภัยในไฟล์ mongod.conf ของคุณ จากนั้น เพิ่มค่า configsvr ให้กับคำสั่ง clusterRole

ด้วยเหตุนี้ MongoDB จะรับผิดชอบการโฮสต์เซิร์ฟเวอร์นี้บนคลัสเตอร์ที่แยกส่วน MongoDB จะอ่านชื่อชุดเรพลิกาและบทบาทของคลัสเตอร์ที่แยกส่วนเมื่อรันในการกำหนดค่าที่รันอยู่ แบบจำลองชุดแรกจะถูกสร้างขึ้นบนเซิร์ฟเวอร์การกำหนดค่าในคลัสเตอร์ที่แยกส่วน ในขั้นตอนนี้ คุณจะสามารถจำลองการกำหนดค่าสำหรับชาร์ดแต่ละส่วนได้ หากคุณใช้ MongoDB บน ​​MongoDB-shard1 ให้คัดลอกไฟล์คอนฟิกูเรชันไปยัง MongoDB-shard1 และ MongoDB-shard1 ผลลัพธ์คือแต่ละอินสแตนซ์ MongoDB จะมีชุดเซิร์ฟเวอร์ที่ทำหน้าที่เป็นชาร์ด ก่อนที่จะสามารถใช้เศษใดๆ ได้ จะต้องเริ่มต้นผ่านเปลือก Mongo

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

เมื่อดำเนินการคำสั่ง mongos แล้ว คุณสามารถเพิ่ม shards ให้กับคลัสเตอร์ sharded ได้โดยใช้ mongo_shardip: mongo_shardip คือที่อยู่ IP ของเซิร์ฟเวอร์ที่รัน mongo-shard1 เมื่อคุณใช้คำสั่งนี้ คุณจะเห็นรายการว่างของเศษที่เชื่อมต่อในคีย์เศษ เมื่อใช้เมธอด sh.status() คุณสามารถตรวจสอบว่าเคียวรีเราเตอร์อยู่ในไดเร็กทอรีเดียวกับเซิร์ฟเวอร์การกำหนดค่า เมื่อฐานข้อมูล MongoDB เปิดใช้งานการชาร์ดดิ้ง ฐานข้อมูลเหล่านั้นจะสามารถจัดเก็บข้อมูลในลักษณะเดียวกับที่ทำได้ในฐานข้อมูลอื่นเท่านั้น การรวบรวมเอกสารจากเมืองที่มีประชากรมากที่สุดในโลกสองสามแห่งจะเป็นพื้นฐานสำหรับคู่มือนี้ สามารถใช้เมธอดต่อไปนี้เพื่อเปิดใช้งาน Sharding สำหรับฐานข้อมูล: enableSharding() คำสั่งจะส่งกลับข้อความแสดงข้อผิดพลาด: ทันทีที่ดำเนินการ หากคุณกำหนดค่าฐานข้อมูลให้อนุญาต ตอนนี้คุณสามารถอนุญาตให้แบ่งพาร์ติชันการรวบรวมเมืองได้แล้ว

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

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

พื้นฐานของ Mongob Sharding

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

ฐานข้อมูล Nosql ต้องการ Sharding หรือไม่

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

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

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

การทำธุรกรรมของลูกค้าสามารถทำได้ในสถานที่ที่มีข้อกำหนดทางกฎหมายเช่นเดียวกับที่ตั้งของ Shards SQLite, Memcached, Zookeeper, Postgres-XC/XL และ Citrus ล้วนเป็นตัวเลือกที่ดี RDS เป็นบริการที่ช่วยให้คุณสามารถสร้างและปรับใช้ ฐานข้อมูล ที่แยกส่วนได้ สามารถดำเนินการทั้งการจำลองแบบและการย่อยย่อยในทวีปพร้อมกันได้ ด้วยการใช้ CPU และหน่วยความจำ รวมทั้งประสิทธิภาพการอ่าน/เขียน คุณสามารถกำหนดประสิทธิภาพของชิ้นส่วนทั้งหมดได้ หากมีพื้นที่ฮอตสปอต ควรพิจารณาการลับคมใหม่ คำว่า "เศษ" ดูเหมือนจะมาจากเกมออนไลน์ที่มีผู้เล่นหลายคนจำนวนมากอย่าง Ultima Online เนื่องจากมีการใช้บ่อยในบริบทของการคำนวณและการจัดเก็บ

วิศวกรของ Facebook กำลังพัฒนาฐานข้อมูล NoSQL ชื่อ Cassandra ด้วย Bigtable ของ Google ข้อมูลขนาดเพตะไบต์สามารถจัดเก็บในเซิร์ฟเวอร์สินค้าโภคภัณฑ์ Vitess สร้างขึ้นโดยทีมงานใน YouTube เพื่อแก้ปัญหาความสามารถในการปรับขนาดในฐานข้อมูล ลอจิกการกำหนดเส้นทางสามารถลบออกจากรหัสแอปพลิเคชันได้ด้วยความช่วยเหลือจาก Vitess

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

ประโยชน์ของการแบ่งส่วน

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

การแตกย่อยในฐานข้อมูล Nosql

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

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

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

การแบ่งกลุ่มอัตโนมัติใน Mongodb

ฟีเจอร์ auto-sharding ของ Mongodb ช่วยให้ฐานข้อมูลของคุณปรับขนาดตามแนวนอนได้โดยกระจายข้อมูลโดยอัตโนมัติไปยังหลาย ๆ ชาร์ด สิ่งนี้ทำให้ฐานข้อมูลของคุณขยายขนาดและปริมาณงานโดยไม่จำเป็นต้องกำหนดค่าและจัดการเศษด้วยตนเอง

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

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

ชาร์ดคีย์ที่ถือว่าไม่ดีอาจทำให้การกระจายข้อมูลไม่สม่ำเสมอ ทำลายประโยชน์บางอย่างของชาร์ดดิ้ง และทำให้ประสิทธิภาพการทำงานติดขัด เริ่มต้นด้วย MongoDB 4.0.3 และการกำหนดค่าโซนและช่วงโซน คุณสามารถสร้างโซนและช่วงโซนก่อนที่จะชาร์ดคอลเลกชันที่ว่างเปล่าหรือไม่มีอยู่ คำสั่งต่อไปนี้จะสร้างการเรียง: /jira/ เมื่อเลือก shard key สิ่งสำคัญคือต้องพิจารณาถึงความเป็นไปได้ของการใช้โซนในอนาคต ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของ Sharding กับ Aggregation ได้ใน e-book Practical MongoDB Aggregations

การจำลอง Vs การแบ่งส่วน

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

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

อะไรคือความแตกต่างระหว่างการแบ่งพาร์ติชั่นและการแบ่งส่วน?

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

ประโยชน์ของการแบ่งส่วน

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

อะไรคือความแตกต่างระหว่างการจำลอง Redis และ Sharding?

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

การทำดัชนีเทียบกับ Sharding: ข้อใดดีที่สุดสำหรับฐานข้อมูลของคุณ

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

ข้อใดคือข้อดีของการแบ่งส่วนย่อย

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

ความเสี่ยงด้านความปลอดภัยของ Sharding

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

ทรัพยากร Sharding ข้อมูลเพิ่มเติม การกระจาย Sql Sharding

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

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

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

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

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

สามประเภทของการแบ่งส่วน

การแบ่งส่วนย่อยสามประเภทมีดังนี้ (1) เป็นไปโดยสมัครใจ; (2) ต้องยั่งยืน; และ (3) ต้องใช้ ประถมศึกษา. ในชาร์ดประเภทนี้ แต่ละชาร์ดจะได้รับการกำหนดคีย์หลัก และแบบจำลองจะถูกสร้างขึ้นสำหรับแต่ละชาร์ดเพื่อเก็บข้อมูล วิธีการนี้มักใช้เมื่อชุดข้อมูลมีขนาดเล็กและไม่มีข้อมูลที่ละเอียดอ่อน
ข้อมูลถูกแบ่งออกเป็นเศษอันเป็นผลมาจากการแยกข้อมูลประเภทนี้ตามพิกัด สิ่งนี้ใช้เมื่อข้อมูลถูกกระจายไปตามพื้นที่ทางภูมิศาสตร์ และจำเป็นต้องเก็บเศษส่วนไว้ด้วยกันด้วยเหตุผลด้านประสิทธิภาพ
Compaction sharding เป็นการแบ่งกลุ่มประเภทหนึ่งที่ใช้เมื่อข้อมูลไม่มีความละเอียดอ่อนสูงและมีจำนวนการอัปเดตน้อย แทนที่จะแบ่งข้อมูลออกเป็นส่วนๆ ข้อมูลจะถูกแบ่งออกเป็นบล็อกแล้วแยกย่อย วิธีนี้มักใช้เมื่อขนาดชุดข้อมูลน้อยกว่าจำนวนของชาร์ด

มองก็อด ชาร์ดิง

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

กระบวนการกระจายข้อมูลระหว่างหลายโฮสต์ผ่าน DHCP เรียกว่าการแฮช การบันทึกฐานข้อมูล MongoDB สามารถทำได้โดยแยกออกเป็นชุดข้อมูลขนาดเล็ก อัตราการสืบค้นที่สูงอาจทำให้ CPU, RAM และกำลัง I/O ของดิสก์ไดรฟ์ทำงานหนัก การปรับขนาดมีสองประเภท: แนวนอนและแนวตั้ง เอกสารคอลเล็กชัน MongoDB ทั้งหมดจะถูกแจกจ่ายตามค่าเริ่มต้นในชาร์ดของคอลเล็กชัน MongoDB ทั้งหมด เอกสารทุกฉบับประกอบด้วยฟิลด์เดียวหรือหลายฟิลด์ ซึ่งเรียกว่าคีย์ ต้องใช้คีย์ชาร์ดคีย์เดียวเท่านั้นสำหรับแต่ละคอลเล็กชันในคอลเล็กชันที่แชร์

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