ฐานข้อมูล NoSQL: ข้อดีและข้อเสียของประสิทธิภาพสูงและความไม่สอดคล้องกัน
เผยแพร่แล้ว: 2022-11-22ระบบ NoSQL มักจะเร็วกว่า ฐานข้อมูลเชิงสัมพันธ์แบบดั้งเดิม เนื่องจากไม่ต้องการค่าใช้จ่ายในการบำรุงรักษาการรวมที่ซับซ้อน อย่างไรก็ตามสิ่งนี้อาจมาจากความสม่ำเสมอในการอ่าน ในฐานข้อมูล NoSQL เป็นไปได้ที่การดำเนินการอ่านจะส่งคืนข้อมูลที่ยังไม่ได้คอมมิท หรือคอมมิทบางส่วน สิ่งนี้อาจนำไปสู่ปัญหาความไม่สอดคล้องกันหากแอปพลิเคชันไม่ได้รับการออกแบบให้รองรับ ตัวอย่างเช่น หากผู้ใช้อ่านข้อมูลที่มีการคอมมิตบางส่วน พวกเขาอาจเห็นข้อมูลที่ไม่ถูกต้อง หรือหากผู้ใช้อ่านข้อมูลที่ยังไม่ได้คอมมิต พวกเขาอาจเห็นข้อมูลที่ย้อนกลับในภายหลัง มีสองสามวิธีในการจัดการกับสิ่งนี้ หนึ่งคือการออกแบบแอปพลิเคชันให้ทนต่อความไม่สอดคล้องกัน ซึ่งอาจหมายความว่าแอปพลิเคชันไม่ได้ดำเนินการบางอย่าง หรือดำเนินการตามลำดับที่แตกต่างกัน หากตรวจพบว่าข้อมูลไม่สอดคล้องกัน อีกวิธีหนึ่งในการจัดการกับความไม่ลงรอยกันคือการใช้เทคนิคที่เรียกว่า “ความสม่ำเสมอในท้ายที่สุด” ด้วยความสอดคล้องกันในที่สุด แอปพลิเคชันจะทำงานต่อไป แม้ว่าข้อมูลจะไม่สอดคล้องกันก็ตาม ข้อเสียคือแอปพลิเคชันอาจไม่สามารถรับประกันได้ว่าข้อมูลทั้งหมดเป็นปัจจุบัน ในที่สุด ข้อมูลจะสอดคล้องกัน แต่ไม่มีการรับประกันว่าจะใช้เวลานานแค่ไหน ฐานข้อมูล NoSQL สามารถเป็นตัวเลือกที่ยอดเยี่ยมสำหรับแอปพลิเคชันที่ต้องการประสิทธิภาพสูงและสามารถทนต่อความไม่สอดคล้องกันได้ อย่างไรก็ตาม สิ่งสำคัญคือต้องเข้าใจการแลกเปลี่ยนที่เกี่ยวข้องก่อนที่จะเลือกฐานข้อมูล NoSQL
Oracle NoSQL Database API ช่วยให้โปรแกรมเมอร์สามารถระบุความสอดคล้องที่แต่ละคอลัมน์ต้องมีในแต่ละคำขอ มีค่าที่เป็นไปได้สี่ค่าตั้งแต่แบบหลวมที่สุดไปจนถึงเข้มงวดที่สุด หากคุณอ่านจากต้นแบบการจำลอง คุณจะส่งคืนค่าล่าสุดเสมอ ตามเวลา แบบจำลองใด ๆ ภายในระยะเวลาหนึ่ง Delta ของต้นแบบสามารถส่งคืนค่าได้ นี่ไม่ได้หมายความว่าสามารถใช้แบบจำลองใด ๆ ได้ (กล่าวคือไม่สามารถรับประกันได้) แอปพลิเคชัน MongoDB สามารถระบุระดับความสอดคล้องในการอ่านได้โดยใช้คุณลักษณะข้อกังวลเกี่ยวกับการเขียน โดยการบล็อกแอปพลิเคชันจนกว่าจะตรงตามเงื่อนไขที่กำหนด คุณสามารถจำกัดความสามารถของแอปพลิเคชันของคุณในการประมวลผลการเขียนเฉพาะ การเขียนที่สำเร็จตราบเท่าที่มีการสื่อสารไปยังเซิร์ฟเวอร์หลักจะถือว่าสำเร็จ คุณสามารถบล็อกการเขียนได้อย่างไม่มีกำหนด หากไม่ได้เผยแพร่ไปยังโหนดส่วนใหญ่ในชุดแบบจำลองของคุณ
เมื่อสำเนาของข้อมูลเดียวกันสองสำเนาอยู่ในระบบฐานข้อมูลที่จำลองแบบเดียวกัน ความสอดคล้องของสำเนาจะถูกกำหนดโดยระดับของสำเนาที่แตกต่างกัน เมื่อการอ่านวัตถุข้อมูลที่กำหนดไม่สอดคล้องกับการอัปเดตล่าสุดของวัตถุข้อมูลนั้น ถือเป็นความผิดปกติที่สอดคล้องกัน
ความสอดคล้องในท้ายที่สุดใน NoSQL คืออะไร ข้อดีหลักอย่างหนึ่งของ ฐานข้อมูลที่สอดคล้องกัน ในที่สุดคือการรองรับโมเดล NoSQL ที่มีความพร้อมใช้งานสูง จนกว่าฐานข้อมูลจะสอดคล้องกัน ความสำคัญของความพร้อมใช้งานจะเปลี่ยนไปสู่ความสอดคล้องกัน
ฐานข้อมูล NoSQL ซึ่งแตกต่างจากฐานข้อมูล SQL คือไม่มีความสอดคล้องของข้อมูลในระดับเดียวกันตาม โมเดลความสอดคล้องในท้ายที่สุด อาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับการทำธุรกรรมที่ต้องการความสมบูรณ์ทันที เช่น การดำเนินการที่ธนาคารและตู้เอทีเอ็ม เนื่องจากข้อมูลอาจไม่สอดคล้องกันในบางครั้ง
โดยปกติจะได้รับสำเนาข้อมูลที่สอดคล้องกันภายในไม่กี่วินาทีหลังจากคัดลอก นี่คือการ อ่านที่สอดคล้องกัน มาก และฉันพบว่ามันง่ายมากที่จะอ่านใน Amazon DynamoDB ส่งคืนผลลัพธ์ที่แสดงถึงการตอบกลับที่เป็นลายลักษณ์อักษรทั้งหมดซึ่งได้รับการตอบกลับในเชิงบวกก่อนที่จะอ่าน เมื่อระบุพารามิเตอร์ทางเลือกในคำขอ คุณสามารถตรวจสอบให้แน่ใจว่าผลลัพธ์การอ่านของคุณสอดคล้องกัน
Nosql รักษาความสม่ำเสมอได้อย่างไร
ฐานข้อมูล Nosql รักษาความสอดคล้องผ่านกระบวนการที่เรียกว่าการเขียนองค์ประชุม การเขียนแบบองค์รวมต้องใช้โหนดส่วนใหญ่ในฐานข้อมูลเพื่อยอมรับข้อมูลที่กำลังเขียน สิ่งนี้ทำให้มั่นใจได้ว่าข้อมูลทั้งหมดสอดคล้องกันทั่วทั้งฐานข้อมูล
เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการอัปเดตเฉพาะกิจที่รวดเร็วและการอัปโหลดข้อมูลที่รวดเร็ว อย่างไรก็ตาม หากคุณต้องการดำเนินการค้นหาและรายงานที่ซับซ้อน SQL เป็นตัวเลือกที่ดีกว่า เนื่องจาก MongoDB มี ความสอดคล้องของข้อมูลที่ยอดเยี่ยม จึงเหมาะสำหรับสภาพแวดล้อมการสืบค้นที่ต้องการ
Nosql เทียบกับ Rdbms: ทางเลือกไหนดีกว่ากัน?
MongoDB เหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการผลลัพธ์ที่สอดคล้องกัน ในขณะที่ไม่ต้องการประสิทธิภาพของ RDBMS แบบดั้งเดิม เมื่อ MongoDB ใช้การล็อกและการควบคุมการทำงานพร้อมกัน ไคลเอ็นต์จะไม่สามารถแก้ไขข้อมูลเดียวกันได้ในเวลาเดียวกัน และเมื่อ MongoDB เขียนไปยังเอกสารหนึ่งฉบับ การดำเนินการทั้งหมดหรือบางส่วนจะเกิดขึ้น ลูกค้าสามารถมั่นใจได้ว่าจะเห็นข้อมูลที่สอดคล้องกันเสมอ เป็นความจริงที่ NoSQL ไม่มีการรับประกันความสมบูรณ์ของข้อมูลเหมือน RDBMS แบบดั้งเดิม แต่ให้ความยืดหยุ่นและประสิทธิภาพที่สำคัญ นอกจากนี้ NoSQL ช่วยให้ปรับขนาดได้ง่ายเนื่องจากสามารถเพิ่มหรือลบข้อมูลได้โดยไม่ส่งผลกระทบต่อความสอดคล้องของฐานข้อมูลโดยรวม
ความสอดคล้องในการอ่านใน Nosql คืออะไร
ความสอดคล้องในการอ่านเป็นแนวคิดฐานข้อมูลที่รับประกันว่าการอ่านทั้งหมดที่เกิดขึ้นภายในการทำธุรกรรมจะส่งคืนข้อมูลที่สอดคล้องกัน ซึ่งหมายความว่าหากมีการอ่านหลายครั้งจากส่วนต่างๆ ของฐานข้อมูล การอ่านทั้งหมดจะส่งคืนข้อมูลเดียวกัน
สแนปชอตของฐานข้อมูลจะแสดงต่อคิวรีในเวลาที่กำหนดโดยใช้หลายเวอร์ชัน ข้อความค้นหาจะแสดงการเปลี่ยนแปลงที่เกิดขึ้นจากธุรกรรมที่เกิดขึ้นก่อนช่วงเวลาที่ระบุ รวมถึงการเปลี่ยนแปลงที่เกิดขึ้นจากธุรกรรมในภายหลังหรือที่ไม่มีข้อผูกมัด เป้าหมายของการอ่านที่สม่ำเสมอคือการรักษาระดับความสอดคล้องนี้เมื่อเวลาผ่านไป เมื่อใช้การอ่านที่สอดคล้องกัน คุณต้องแน่ใจว่าโหนด Cassandra ทั้งหมดที่จะอ่านและเขียนข้อมูลได้รับการตั้งค่าให้ดำเนินการดังกล่าวทั้งหมด คีย์สเปซที่แตกต่างกันที่ Edge สามารถกำหนดระดับความสอดคล้องที่แตกต่างกันได้ การอ่านที่สอดคล้องกันใน Cassandra สามารถใช้เพื่อปรับปรุงประสิทธิภาพได้ เนื่องจากไม่จำเป็นต้องอ่านข้อมูลจากหลายแหล่ง นอกจากนี้ยังสามารถลดความไม่สอดคล้องกันของข้อมูลได้อีกด้วย
ความสม่ำเสมอในการอ่านคืออะไร?
ความสอดคล้องเป็นองค์ประกอบสำคัญของความสม่ำเสมอในการอ่านระดับธุรกรรม ธุรกรรมทั้งหมดภายในธุรกรรมจะมีข้อมูลเดียวกันสำหรับช่วงเวลาหนึ่งๆ ยกเว้นว่าการเปลี่ยนแปลงข้อมูลที่เกิดจากธุรกรรมที่ทำให้เป็นอนุกรมได้จะไม่ปรากฏในข้อมูลสำหรับช่วงเวลาหนึ่งๆ
Nosql ให้ความสอดคล้องหรือไม่?
ด้วยเหตุนี้ ฐานข้อมูล NoSQL จึงมีความสอดคล้องกันในระดับสูง ทำให้ยากต่อการบำรุงรักษา ผลที่ตามมา แทนที่จะให้ความสม่ำเสมอที่แข็งแกร่ง พวกเขาให้เส้นทางสู่ความสม่ำเสมอเมื่อเวลาผ่านไป หมายความว่าที่เก็บข้อมูลที่รับประกันความปลอดภัยพื้นฐานอาจไม่สามารถส่งคืน WYRITE ล่าสุดได้ในบางครั้ง
Nosql ดีกว่าสำหรับ Read Heavy หรือไม่
ความสามารถในการรองรับทั้งระบบการอ่านและการเขียนจำนวนมากในฐานข้อมูล NoSQL นั้นมีความยืดหยุ่น การใช้เทคนิคการแฮชและการแฮชที่สอดคล้องกันเป็นสิ่งสำคัญอย่างยิ่งสำหรับการพิจารณาว่าชาร์ด/เซิร์ฟเวอร์ใดจะกำหนดเส้นทางการสืบค้นแอปพลิเคชันผ่านข้อมูลจำนวนมากที่พวกเขาสามารถรับได้
เหตุใด Nosql จึงไม่สอดคล้องกัน
มีสาเหตุบางประการที่ทำให้ฐานข้อมูล NoSQL ไม่สอดคล้องกัน เหตุผลประการหนึ่งคือฐานข้อมูล NoSQL มักจะถูกแจกจ่าย ซึ่งหมายความว่าฐานข้อมูลเหล่านี้กระจายไปตามเซิร์ฟเวอร์หลายเครื่อง สิ่งนี้สามารถนำไปสู่การจัดเก็บข้อมูลในที่ต่างๆ ซึ่งทำให้ยากต่อการติดตาม อีกเหตุผลหนึ่งคือฐานข้อมูล NoSQL มักจะได้รับการออกแบบให้ปรับขนาดได้ ซึ่งหมายความว่าสามารถจัดการข้อมูลจำนวนมากได้ ซึ่งอาจทำให้ยากต่อการติดตามข้อมูลทั้งหมดที่ถูกจัดเก็บ
งานของการแก้ไขการ ใช้งานที่เก็บข้อมูลเอกสาร นั้นยากกว่าการแก้ไขโมเดลเชิงสัมพันธ์มาก การปรับโครงสร้างข้อมูลจากที่จัดเก็บบนเครื่องบิน นอกจากจะยากกว่าการแปลง RDBMS มากแล้ว ยังเป็นความท้าทายทั่วไปอีกด้วย หากนักพัฒนาและสถาปนิกไม่เข้าใจหรือกลัวว่าจะตกงานหากปฏิบัติตนไม่เหมาะสม พวกเขาจะไม่สามารถเข้าร่วมได้ พวกเขาจะแบ่งธุรกรรมปรมาณูออกเป็นส่วนๆ ตามกระบวนการทางตรรกะ แทนที่จะยอมรับว่าการจำลองแบบและเวลาแฝงนั้นมีอยู่จริง หรือแย่กว่านั้นคือพวกเขากำลังลากระบบของบุคคลที่สามเข้าสู่กิจกรรมการทำธุรกรรม ในที่สุด ระบบทั้งหมดจะถูกว่าจ้างจากภายนอก และบุคคลอื่นจะเข้ามาทำหน้าที่แทนแผนก
ความสอดคล้องใน Nosql คืออะไร
ไม่มีคำตอบที่ชัดเจนสำหรับคำถามนี้ เนื่องจากขึ้นอยู่กับ ฐานข้อมูล NoSQL เฉพาะ ที่เป็นปัญหา อย่างไรก็ตาม โดยทั่วไป ความสอดคล้องกันในฐานข้อมูล NoSQL หมายถึงการรับประกันว่าข้อมูลถูกต้องและเป็นปัจจุบันในทุกโหนดในระบบ ซึ่งมักจะหมายความว่าการอ่านและเขียนสอดคล้องกันเสมอ แต่รายละเอียดเฉพาะอาจแตกต่างกันไปขึ้นอยู่กับฐานข้อมูล
ชุดของค่าที่จุดข้อมูลทั้งหมดในระบบฐานข้อมูลต้องสอดคล้องกันเรียกว่าความสอดคล้องกัน C08846024 ซึ่งอ่านโดย C08846024 ส่งกลับโดยมีข้อผิดพลาดเนื่องจากค่าที่ป้อนคือตัวเลข Alpha 8 หนึ่งตัว ซึ่งโดยพื้นฐานแล้วคือรูปแบบข้อมูลที่ไม่สอดคล้องกัน รูปแบบของข้อมูล ไม่ใช่ความสอดคล้องของฐานข้อมูล เป็นตัวกำหนดวิธีการแสดงผล สร้างกฎ/ค่าที่ป้องกันไม่ให้ข้อมูลที่ไม่สอดคล้องกันเข้าสู่ฐานข้อมูลหลักและแบบจำลอง เพื่อให้การดำเนินงานเป็นไปอย่างราบรื่น ข้อมูลทั้งหมดที่เข้าสู่ฐานข้อมูลจะต้องสอดคล้องกันจึงจะมองเห็นได้ ความสอดคล้องของฐานข้อมูลที่แข็งแกร่งมีความสำคัญเนื่องจากทำให้มั่นใจได้ว่าไคลเอนต์ที่พยายามเข้าถึงข้อมูลจะเห็นข้อมูลที่อัปเดตล่าสุดซึ่งเป็นไปตามกฎของฐานข้อมูลเสมอ ระดับที่สอดคล้องกันถูกกำหนดเป็นค่าปรับสภาพล่วงหน้าที่กำหนดจำนวนเรพลิคาหรือโหนดที่ต้องตอบสนองก่อนที่จะได้รับการพิจารณาว่าเป็นธุรกรรมที่ถูกต้อง
คุณลักษณะอย่างหนึ่งของ ACID คือการแยกข้อมูลจากเครือข่ายฐานข้อมูลเฉพาะ ซึ่งจะแยกข้อมูลส่วนหนึ่งออกจากข้อมูลอื่นๆ ทั้งหมด ความสอดคล้องกันของกระบวนการอัปเดตจะส่งผลให้โหนดทั้งหมดที่จัดเก็บข้อมูลนั้นสอดคล้องกับข้อมูลที่ผ่านการอัปเดตในที่สุด ตารางในฐานข้อมูลสามารถป้องกันไม่ให้ข้อมูลของคุณยุ่งเหยิง แม้ว่า Active–Active GeoDistribution ของ Redis Enterprise จะมีความสอดคล้องกัน แต่ก็ขาดความสอดคล้องกันใน Redis แบบโอเพนซอร์ส
ความไม่สอดคล้องกันของฐานข้อมูล Nosql
เนื่องจากระบบ NoSQL โดยทั่วไปไม่รองรับการทำธุรกรรม จึงไม่น่าเชื่อถือเท่ากับการมีฐานข้อมูลที่สอดคล้องกัน ในความเป็นจริงแล้ว ฐานข้อมูล NoSQL มักจะยอมแลกกับความสอดคล้องในท้ายที่สุดเพื่อให้ได้ผลลัพธ์ที่ดีที่สุดสำหรับประสิทธิภาพและขนาด ด้วยเหตุนี้ จึงสันนิษฐานว่าการอัปเดตทั้งหมดจะถูกจำลองแบบไปยังแบบจำลองทั้งหมดในอนาคตอันใกล้นี้ แม้ว่าจะไม่มีการรับประกันว่าสิ่งนี้จะเกิดขึ้นอย่างรวดเร็วเท่าที่ควร นอกจากนี้ หากการป้อนข้อมูลไม่เป็นไปตามค่าที่กำหนดล่วงหน้า จะส่งผลให้เกิดความขัดแย้ง
Mongodb สอดคล้องในที่สุด
หากข้อมูลไม่สอดคล้องกันในขณะนี้ แต่จะมีการเปลี่ยนแปลงเมื่อเวลาผ่านไป แสดงว่าข้อมูลยังคงสอดคล้องกัน สิ่งนี้เกิดขึ้นเมื่อคุณใช้ readPreferences ใดๆ ที่สามารถอ่านแหล่งข้อมูลทุติยภูมิได้
โปรโตคอลการจำลองข้อมูล MongoDB เป็นแบบอะซิงโครนัสเสมอ โดยไม่คำนึงว่าเป็นข้อมูลหลักหรือรอง ข้อกังวลในการเขียนเริ่มต้นสำหรับ MongoDB คือ w1: (เขียนไปยังหลักสำเร็จ) และปิดการทำเจอร์นัลที่ j:false เนื่องจากการจำลองแบบอะซิงโครนัสทำให้เกิดความไม่สอดคล้องกันในพาร์ติชันโดยสูญเสียหลักหรือถูกแยกออกจากฝั่งส่วนน้อย จึงเป็นเรื่องปกติที่พาร์ติชันจะสูญเสียพาร์ติชันหลักหรือถูกแยกออกจากฝั่งส่วนน้อย การปรับค่า w และ j ช่วยให้เราบรรลุระดับเวลาแฝงที่แตกต่างกันระหว่างการรับประกันการไม่แบ่งพาร์ติชันและความไม่สอดคล้องกันระหว่างการแบ่งพาร์ติชัน เมื่อการเขียนเป็น *w:1, j:false* – การเขียนจะเร็วขึ้นเมื่อไม่มีพาร์ติชัน เนื่องจากการเขียนไม่ได้รอให้การจำลองแบบเสร็จสมบูรณ์ ต่อไปนี้คือตัวอย่างว่าการอ่าน/ไม่อ่านจากค่ารองส่งผลต่อระดับความสอดคล้องกันอย่างไรในชุดค่าผสม w อื่นๆ ทั้งหมด MongoDB มีระดับความสอดคล้องดังต่อไปนี้: เมื่อไม่มีพาร์ติชันหรือเมื่อโหนดทั้งหมดมีอยู่ MongoDB เป็นวิธีการที่เชื่อถือได้สำหรับการเขียนเมื่อไม่มีพาร์ติชัน และมีเวลาแฝงต่ำ
มีพาร์ติชันในแอปพลิเคชันและพาร์ติชันหลักที่ทำหน้าที่สูญหาย ส่งผลให้เกิดข้อความแสดงข้อผิดพลาด (ข้อผิดพลาด writeTimeout) เนื่องจาก MongoDB มอบความพร้อมใช้งานที่ดีที่สุด เราจะสูญเสียส่วนหนึ่งของคลัสเตอร์เสมอ – อย่างน้อยส่วนหนึ่ง – หากมีการแบ่งพาร์ติชัน เนื่องจาก *w:majority, *j:true* และ *read from primary only MongoDB สามารถจัดประเภทเป็น CP ใน CAP และ CP/EC ในทฤษฎีบท PACELC
อะไรคือความแตกต่างระหว่างในที่สุดและสม่ำเสมอ?
'เวลา' กับ 'เปอร์เซ็นต์' ของความสำเร็จต่างกันอย่างไร?
ระบบแบบกระจายสามารถบรรลุความสอดคล้องในขั้นสุดท้ายได้โดยการรับรองว่าโหนดทั้งหมดในระบบสามารถแสดงค่าเดียวกันสำหรับรายการข้อมูลได้ ค่าที่สอดคล้องกันในรายการข้อมูลบ่งชี้ว่าค่าคงที่ตลอดเวลาตั้งแต่ครั้งล่าสุดที่มีการอัปเดต