การปรับขนาดฐานข้อมูล NoSQL: เคล็ดลับและคำแนะนำ
เผยแพร่แล้ว: 2022-11-18ฐานข้อมูล NoSQL ได้รับความนิยมมากขึ้นเรื่อย ๆ เนื่องจากจำนวนข้อมูลที่สร้างขึ้นโดยบริษัทต่าง ๆ ยังคงเพิ่มขึ้นอย่างทวีคูณ อย่างไรก็ตาม หลายองค์กรลังเลที่จะเปลี่ยนไปใช้ NoSQL เพราะเกรงว่าจะปรับขนาดได้ยากขึ้น การปรับขนาดฐานข้อมูล NoSQL นั้นไม่แตกต่างจากการปรับขนาดฐานข้อมูลเชิงสัมพันธ์ ข้อแตกต่างหลักคือฐานข้อมูล NoSQL ได้รับการออกแบบให้ปรับขนาดได้ในแนวนอน หมายความว่าสามารถปรับขนาดได้โดยการเพิ่มโหนดเพิ่มเติมในระบบ สิ่งนี้ตรงกันข้ามกับ ฐานข้อมูลเชิงสัมพันธ์ ซึ่งสามารถปรับขนาดได้ในแนวตั้ง หมายความว่าสามารถปรับขนาดได้โดยการเพิ่มทรัพยากรให้มากขึ้นในเซิร์ฟเวอร์เครื่องเดียว มีบางสิ่งที่ควรคำนึงถึงเมื่อปรับขนาดฐานข้อมูล NoSQL: 1. ตรวจสอบให้แน่ใจว่าข้อมูลของคุณกระจายอย่างเท่าเทียมกันในทุกโหนด 2. เพิ่มโหนดทีละน้อยเพื่อหลีกเลี่ยงการโอเวอร์โหลดระบบ 3. ตรวจสอบประสิทธิภาพของระบบอย่างใกล้ชิดเพื่อระบุปัญหาคอขวด 4. ปรับแต่งระบบอย่างสม่ำเสมอเพื่อให้มั่นใจถึงประสิทธิภาพสูงสุด เมื่อคำนึงถึงเคล็ดลับเหล่านี้แล้ว การปรับขนาดฐานข้อมูล NoSQL จึงไม่น่าจะยากไปกว่าการปรับขนาดฐานข้อมูลเชิงสัมพันธ์
มีวิธีการและหลักการมากมายในการปรับขนาดฐานข้อมูล ขึ้นอยู่กับประเภทของฐานข้อมูล ขนาดของฐานข้อมูล NoSQL และ sql ขึ้นอยู่กับแนวคิดของการแบ่งส่วนของฐานข้อมูล ประโยชน์ของความสามารถในการจัดเก็บข้อมูลมากขึ้นเกิดขึ้นเมื่อมีการกระจายเซิร์ฟเวอร์ แต่เรายังสืบทอดปัญหาที่มาพร้อมกับการกระจาย ฐานข้อมูลแบบเสาหินไม่รองรับการแยกส่วนย่อยอัตโนมัติ และวิศวกรจะต้องเขียนตรรกะด้วยตนเองเพื่อจัดการ ในการแก้ปัญหานี้ สามารถติดตั้งพร็อกซี เช่น ตัวโหลดบาลานเซอร์ ไว้หน้าบริการคิวรีและฐานข้อมูลได้ เราสามารถรับการสืบค้นได้เร็วขึ้นเมื่อส่วนแบ่งข้อมูลมีขนาดใหญ่ เนื่องจากสามารถใช้พร็อกซีนั้นได้อีกครั้ง เนื่องจากไม่มีผู้ใช้ปลายทางรับทราบ การปรับขนาดฐานข้อมูล NoSQL จึงมองไม่เห็นเป็นส่วนใหญ่
ชิ้นส่วนแต่ละชิ้นมีเอกลักษณ์เฉพาะตัว ไม่เหมือนสถาปัตยกรรมแบบมาสเตอร์-สเลฟ หากมีการสืบค้นแบบอ่านใดๆ ในมาสเตอร์ชาร์ด คำขอจะถูกส่งไปยังชาร์ดรอง ในระดับศูนย์ข้อมูล เราสามารถจำลองฐานข้อมูลเพื่อให้แน่ใจว่าเรามีข้อมูลสำรอง Node คือโหนดที่สามารถสื่อสารและแลกเปลี่ยนข้อมูลกับโหนดอื่นๆ แต่ละโหนดจะสื่อสารกับโหนดอื่นในจำนวนที่แน่นอนผ่านโปรโตคอล เนื่องจากโหนดทั้งหมดมีค่าเท่ากันใน Cassandra โหนดจึงสามารถทำซ้ำข้อมูลจากที่หนึ่งไปอีกที่หนึ่งโดยไม่ต้องกังวลว่าข้อมูลจะสูญหาย โปรโตคอลการซุบซิบเป็นหนึ่งในหลาย ๆ วิธีที่โหนดสามารถแบ่งปันข้อมูลได้
ฐานข้อมูลแบบกระจายสามารถมีข้อดีหลายประการนอกเหนือจากการได้รับคุณสมบัติเพิ่มเติม องค์ประกอบที่สำคัญของการรับรองความพร้อมใช้งานคือการจำลองแบบข้อมูล เมื่อคุณใช้การจำลองแบบอะซิงโครนัสสำหรับฐานข้อมูลของคุณ การจำลองแบบแบบอะซิงโครนัสจะไม่สอดคล้องกันทั้งหมดในตอนแรก แต่จะเพิ่มมากขึ้นเมื่อเวลาผ่านไป ฐานข้อมูล SQL ใช้ในแอปพลิเคชันทางการเงินที่ต้องการข้อมูลที่มีความแม่นยำสูง ในขณะที่ฐานข้อมูล NoSQL ใช้ในแอปพลิเคชันที่มีความสำคัญน้อยกว่า เช่น จำนวนการดู
การปรับขนาดในแนวตั้งหมายถึงกระบวนการค่อยๆ เพิ่มปริมาณงานคอมพิวเตอร์ด้วยการใช้การอัปเกรดฮาร์ดแวร์ การย้ายไปยัง สถาปัตยกรรมแบบกระจาย และเพิ่มคอมพิวเตอร์ให้มากขึ้นเพื่อแก้ปัญหาของเราทำให้เกิดการขยายขนาดออก หรือที่เรียกว่าการปรับขยายแนวนอนหรือการปรับขนาดออก
NoSQL สามารถรองรับการปรับขนาดตามวิธีการแนวนอน
MongoDB ในฐานะฐานข้อมูล NoSQL สามารถปรับขนาดได้เนื่องจากข้อมูลไม่ได้จัดเก็บไว้ในฐานข้อมูลเชิงสัมพันธ์ ข้อมูลถูกจัดเก็บเป็นเอกสารคล้าย JSON ซึ่งเข้าถึงได้ง่ายผ่านคำขอ HTTP การกระจายเอกสารสามารถทำได้ในแนวนอนในหลาย ๆ โหนดโดยใช้วิธีนี้
คุณปรับขนาดฐานข้อมูล Nosql ได้อย่างไร

ในทางกลับกัน ฐานข้อมูล NoSQL สามารถปรับขนาดได้ในแนวนอน ซึ่งหมายความว่าสามารถจัดการกับการรับส่งข้อมูลที่เพิ่มขึ้นได้ตามต้องการ เพียงแค่เพิ่มเซิร์ฟเวอร์ลงในฐานข้อมูล เนื่องจากฐานข้อมูล NoSQL สามารถแปลงเป็นโครงสร้างที่ใหญ่ขึ้นและมีประสิทธิภาพมากขึ้น จึงเป็นตัวเลือกที่สมเหตุสมผลสำหรับ ชุดข้อมูลขนาดใหญ่ และฐานข้อมูลที่พัฒนาอย่างต่อเนื่อง
เพื่อให้บทช่วยสอนนี้ใช้งานได้ คุณต้องมีสภาพแวดล้อม Node.js ที่ใช้งานได้ ในโพสต์นี้ ฉันจะ คลายไฟล์ DynamoDB ในโฟลเดอร์ชื่อ nodejs-dynamodb-sample สำหรับเวอร์ชันโดยละเอียด โปรดไปที่หน้า GitHub ของฉัน: https://www.gofundme.com/adamfowleruk/nodesurvey.html แอปตัวอย่างสามารถค้นหาและดึงข้อมูลภาพยนตร์จาก DynamoDB เราจะจัดเก็บข้อมูลใน S3 บน Amazon Web Services และเข้าถึง DynamoDB ผ่านบริการ Identity and Access Management (IAM) ของ Amazon หากต้องการใช้บริการการวิเคราะห์ในแอปของ Amazon คุณต้องลงทะเบียนและสร้างบัญชีก่อน จดบันทึกของปีและชื่อภาพยนตร์แต่ละเรื่องที่คุณต้องการลงรายการบัญชี/ภาพยนตร์
คุณสามารถป้อนฟิลด์คีย์เพื่อค้นหาภาพยนตร์จากปีที่ต้องการ หลังจากนั้น คุณสามารถออกแบบแอปพลิเคชันของคุณเองได้ตั้งแต่เริ่มต้น คุณสามารถใช้ตารางของคุณได้จนกว่าจะเสร็จสิ้น แต่คุณควรลบออกเมื่อใช้งานเสร็จแล้ว ไปที่คอนโซล DynamoDB บน Amazon Web Services เพื่อดูว่าคุณใช้พื้นที่เก็บข้อมูลไปเท่าใดแล้ว แท็บ 'ภาพยนตร์' ช่วยให้คุณดูรายการในตารางและเมตริกจากแอปพลิเคชันของคุณ ตลอดจนค่าใช้จ่ายรายเดือนโดยประมาณต่อเดือนในแท็บความจุ รหัสนี้สามารถพบได้ในหน้า GitHub ของฉัน: https://github.com/adamfowleruk/nodejs-dynamodb-sample
MongoDB, Apache HBase และ Cassandra เป็นฐานข้อมูล NoSQL สามฐานข้อมูลที่เหมาะสำหรับการปรับขนาดในแนวนอน เนื่องจากโครงสร้างข้อมูลอยู่ในแนวระนาบ ทำให้เพิ่มเซิร์ฟเวอร์ในระบบได้ง่ายขึ้น ในขณะเดียวกันก็ไม่จำเป็นต้องเปลี่ยนแปลง นอกจากนี้ ฐานข้อมูลเหล่านี้ค่อนข้างใหม่ ดังนั้นจึงยังคงได้รับการพัฒนาและปรับปรุง ซึ่งหมายความว่ามีแนวโน้มที่จะปรับปรุงเมื่อเวลาผ่านไป
เหตุใดจึงปรับขนาด Nosql ได้ง่าย
Nosql ปรับขนาดได้ง่ายเนื่องจากได้รับการออกแบบมาให้ปรับขนาดได้ในแนวนอน ซึ่งหมายความว่าสามารถปรับขนาดได้โดยการเพิ่มโหนดเพิ่มเติมใน คลัสเตอร์ nosql Nosql ปรับขนาดได้ง่ายเนื่องจากสามารถจัดการข้อมูลจำนวนมากและข้อความค้นหาจำนวนมากต่อวินาที
แอปพลิเคชันต้องการความสามารถในการปรับขยายระดับสูงเพื่อให้ทำงานได้อย่างถูกต้อง การเลือก ที่เก็บข้อมูล ด้วยอินเทอร์เฟซผู้ใช้ที่เรียบง่ายและมีประสิทธิภาพก็มีความสำคัญไม่แพ้กัน ประเด็นหลักของความขัดแย้งคือการใช้ฐานข้อมูล 'ASL' หรือ 'Nosql' ดีกว่ากัน ฐานข้อมูล NoSQL ซึ่งแตกต่างจากฐานข้อมูล SQL เป็นที่นิยมเนื่องจากสร้างได้ง่าย การหยุดการดำเนินการทั้งหมดในฐานข้อมูล NoSQL ขึ้นอยู่กับการแบ่งส่วน โดยทั่วไปแล้ว การดำเนินการกับข้อมูลทุกครั้งจำเป็นต้องใช้ตัวดำเนินการที่มีคุณสมบัติเหมาะสม ซึ่งสามารถใช้ระบุโหนดด้วยข้อมูลได้ ข้อมูลถูกจัดเก็บไว้ในเครื่องหลายเครื่อง และทำให้ง่ายต่อการดำเนินการกับข้อมูลแม้ในเครื่องที่เล็กที่สุด

เป็นผลให้ร้านค้า NoSQL สามารถปรับขนาดเพื่อใช้เครื่องสินค้าโภคภัณฑ์ที่ค่อนข้างง่าย สันนิษฐานว่าผู้ใช้จะวางแผนและจัดโครงสร้างข้อมูลในลักษณะที่สามารถดึงข้อมูลจากโหนดเดียวกันได้ในครั้งเดียวเพื่อดำเนินการบางอย่างบนฐานข้อมูล NoSQL การทำให้ข้อมูลเป็นมาตรฐานในลักษณะนี้อาจบ่งบอกว่าโหนดพร้อมที่จะเรียกใช้ข้อมูลที่ปรุงสุกแล้ว การรวมใน NoSQL เป็นไปได้ แต่ไม่แข็งแกร่งเท่าการรวม SQL ในโลกที่ใช้งานได้จริงของ NoSQL นักออกแบบแอปพลิเคชันเชื่อว่าในที่สุดความสอดคล้องของข้อมูลจะเกิดขึ้น นอกเหนือจากการให้สวิตช์เพื่อปรับความสอดคล้องกันในระบบ NoSQL ต่างๆ แล้ว ระบบ NoSQL จำนวนมากยังมีรูทีนเพื่อให้ความสอดคล้องปรากฏเด่นชัดยิ่งขึ้น ส่วนสำคัญของการตัดสินใจเกี่ยวกับสถาปัตยกรรมคือการประเมินกรณีการใช้งานและเลือก ที่เก็บข้อมูลที่เหมาะสม ตามกรณีนั้น
ฐานข้อมูล Nosql ทั้งหมดสามารถปรับขนาดได้หรือไม่
อันเป็นผลมาจากยุคอินเทอร์เน็ตและคลาวด์คอมพิวติ้ง ฐานข้อมูล NoSQL จึงถูกสร้างขึ้นเพื่อให้ง่ายต่อการใช้งานสถาปัตยกรรมแบบขยายขนาด ความสามารถในการปรับขนาดทำได้โดยการรวมการจัดเก็บข้อมูลเข้ากับงานที่จำเป็นในการประมวลผลบนคอมพิวเตอร์จำนวนมากในสถาปัตยกรรมแบบขยายขนาด
ระบบควรสามารถจัดการฐานข้อมูลขนาดใหญ่มากในเวลาแฝงที่ต่ำมาก ในขณะที่ยังจัดการอัตราการร้องขอที่สูงมาก เมื่อพูดถึงเว็บไซต์ปริมาณมาก เช่น eBay, Amazon, Twitter และ Facebook ความสามารถในการปรับขนาดและ ความพร้อมใช้งานสูง เป็นสิ่งสำคัญ คุณสามารถเรียกใช้หลายอินสแตนซ์ของเซิร์ฟเวอร์ได้พร้อมกันด้วยการปรับขนาดในแนวนอน
ฐานข้อมูลของ MongoDB สามารถปรับขนาดได้ทั้งแนวนอนและแนวตั้งทั้งขนาดและจำนวนผู้ใช้ ใน MongoDB คุณสามารถปรับขนาดคลัสเตอร์ของคุณในแนวตั้งหรือแนวนอนได้โดยการเพิ่มทรัพยากรและแบ่งข้อมูลออกเป็นส่วนย่อยๆ ด้วยเหตุนี้ MongoDB จึงเป็นตัวเลือกยอดนิยมสำหรับ แอปพลิเคชันขนาดใหญ่ และที่เก็บข้อมูล
ฐานข้อมูล Nosql ที่ดีที่สุดสำหรับการปรับขนาดอย่างรวดเร็วและปริมาณข้อมูลสูง
ฐานข้อมูล NoSQL อื่นๆ สามารถปรับขนาดให้ตรงกับความต้องการเฉพาะของคุณ เช่นเดียวกับที่คุณทำได้กับฐานข้อมูลอื่นๆ ตัวอย่างเช่น MongoDB เป็นภาษาโปรแกรมที่ได้รับความนิยมเนื่องจากสามารถปรับขนาดได้อย่างรวดเร็วและจัดการกับข้อมูลจำนวนมาก ดาต้าสโตร์ที่ใช้ Redis ถูกใช้อย่างกว้างขวางเนื่องจากความสามารถและความเร็วในหน่วยความจำ
Nosql การปรับขนาดแนวตั้ง
ฐานข้อมูล Nosql สามารถปรับขนาดได้ในแนวนอน ซึ่งหมายความว่าสามารถจัดการกับทราฟฟิกที่เพิ่มขึ้นโดยการเพิ่มโหนดให้กับระบบ สิ่งนี้ตรงกันข้ามกับการปรับขนาดแนวตั้ง ซึ่งระบบถูกปรับขนาดโดยการเพิ่มทรัพยากรให้กับโหนดเดียว
ทุกฐานข้อมูลต้องได้รับการปรับขนาดเพื่อรองรับปริมาณข้อมูลที่สร้างขึ้นในแต่ละวัน คำว่า "มาตราส่วน" แบ่งออกเป็นสองประเภท: แนวตั้งและแนวนอน หากคุณต้องการจัดเก็บข้อมูลมากขึ้น คุณควรลงทุนในเซิร์ฟเวอร์ขนาด 2TB เซิร์ฟเวอร์เดียวมีราคาแพงและมีขนาดใหญ่ขึ้นเรื่อยๆ กระบวนการเพิ่มเครื่องไปยังเซิร์ฟเวอร์ส่งผลให้เกิดการปรับขนาดในแนวนอน ในกรณีนี้ ข้อมูลจะถูกแบ่งออกเป็นชุดและกระจายไปยังเซิร์ฟเวอร์หรือชาร์ดต่างๆ เนื่องจากเป็นไปตามรูปแบบ de-normalization จึงไม่จำเป็นต้องมีความจริงแม้แต่จุดเดียว วิธีการนี้อาจไม่ส่งผลให้เกิดการอัปเดตข้อมูลเมื่อต้นแบบล้มเหลวในการดำเนินการเขียน เนื่องจากไม่ได้อัปเดตข้อมูลบนแบบจำลองสลาฟเมื่อต้นแบบไม่สามารถดำเนินการเขียนได้
การปรับขนาดแนวตั้งใน SQL คืออะไร?
เป้าหมายของ วิธีการปรับขนาดแนวตั้ง คือการเพิ่มความจุของเครื่องเดียวโดยการเพิ่มทรัพยากรของเซิร์ฟเวอร์ลอจิคัลเดียวกัน ซอฟต์แวร์ที่มีอยู่ต้องได้รับการอัปเกรดด้วยทรัพยากรต่างๆ เช่น หน่วยความจำ ที่เก็บข้อมูล และพลังการประมวลผล เพื่อให้ทำงานได้อย่างเต็มประสิทธิภาพ
วิธีปรับขนาดฐานข้อมูลในแนวนอน
การปรับขนาดแนวนอนคืออะไรและทำงานอย่างไร วิธีการปรับขนาดแนวนอนเป็นวิธีที่จำเป็นต้องเพิ่มโหนดเพิ่มเติมเพื่อรองรับโหลด นี่เป็นเรื่องยากมากสำหรับฐานข้อมูลเชิงสัมพันธ์ เนื่องจากความยากในการกระจายข้อมูลที่เกี่ยวข้องข้ามโหนด
นอกจากการเพิ่มอินสแตนซ์เพื่อแชร์โหลดแล้ว การปรับขนาดในแนวนอน (หรือการขยายออก) ยังทำให้จำนวนอินสแตนซ์ของแอปพลิเคชันหรือบริการเพิ่มขึ้นอีกด้วย ในทางตรงกันข้าม การปรับขนาดในแนวตั้งจำเป็นต้องเพิ่มทรัพยากรให้กับอินสแตนซ์ เช่น พลังงานของ CPU และหน่วยความจำ เนื่องจากโปรโตคอลพื้นฐานของ HTTP, เว็บแอปส่วนใหญ่ และ APIs จึงสามารถปรับขนาดได้อย่างง่ายดายโดยอิสระจากกัน ขณะนี้บางฐานข้อมูลอนุญาตให้คุณซิงค์และแบ่งปันข้อมูลที่เขียนของคุณระหว่างหลายอินสแตนซ์ หากมีการกำหนดเส้นทางทราฟฟิกในลักษณะนี้ ทรัพยากรจำนวนมากขึ้นจะถูกจัดสรรให้กับรายการที่มีการร้องขอบ่อยที่สุด แม้ว่าโดยทั่วไปจะใช้พร็อกซีย้อนกลับเพื่อจัดการคำขอ HTTP แต่ฐานข้อมูลก็ไม่ได้ใช้เพื่อทำเช่นนั้นเสมอไป ฐานข้อมูลส่วนใหญ่สามารถส่งต่อได้ด้วยซอฟต์แวร์เช่น nginx หรือ HAproxy ซึ่งทั้งสองอย่างนี้สามารถทำได้ในระดับ TCP
หากพร็อกซีของคุณสามารถเข้าใจวิธีการทำงานของการเชื่อมต่อในระดับโปรโตคอล ก็จะสามารถระบุได้ว่าจำลองการอ่านไม่ซิงค์หรือไม่สามารถตอบสนองได้ แม้ว่าการเชื่อมต่อเครือข่ายจะทำงานอยู่ก็ตาม สามารถปรับเส้นทางได้ขึ้นอยู่กับโหลดของเรพพลิกาและจำนวนการเชื่อมต่อ มีพร็อกซีเซิร์ฟเวอร์บางตัวที่สามารถทำหน้าที่ได้หลากหลาย ความก้าวหน้าบางอย่างเกิดขึ้นในปริมาณและการอ้างสิทธิ์แบบต่อเนื่อง แต่ก็มีปัญหาโดยธรรมชาติเช่นกัน หากคุณไม่เลือกฐานข้อมูลที่ให้คุณค่ากับแต่ละอินสแตนซ์เท่าๆ กัน เนื่องจากมีการย้ายคอนเทนเนอร์ไปรอบ ๆ คลัสเตอร์ การรีสตาร์ทตัวจำลองการอ่านตัวใดตัวหนึ่งของคุณน่าจะไม่เป็นไร หากสิ่งนี้เกิดขึ้นกับ ฐานข้อมูลหลัก คุณไม่น่าจะตื่นเต้น