ความสอดคล้องเชิงสาเหตุใน Nosql คืออะไร
เผยแพร่แล้ว: 2022-12-13ฐานข้อมูล NoSQL ได้รับความนิยมเพิ่มมากขึ้นในช่วงไม่กี่ปีที่ผ่านมา เนื่องจากองค์กรมองหาทางเลือกอื่นแทนฐานข้อมูลเชิงสัมพันธ์แบบดั้งเดิม ข้อได้เปรียบที่สำคัญอย่างหนึ่งของฐานข้อมูล NoSQL คือสามารถให้ความยืดหยุ่นในระดับสูงในแง่ของวิธีการจัดเก็บและเข้าถึงข้อมูล อย่างไรก็ตาม ความยืดหยุ่นนี้มาพร้อมกับค่าใช้จ่าย และหนึ่งในข้อเสียคือความสอดคล้องเชิงสาเหตุมักไม่รับประกัน ความสอดคล้องเชิงสาเหตุเป็นแบบจำลองความสอดคล้องที่แข็งแกร่งซึ่งมักใช้ในระบบแบบกระจาย ในระบบที่สอดคล้องเชิงสาเหตุ การเขียนทั้งหมดที่เกี่ยวข้องเชิงสาเหตุจะต้องเห็นในลำดับเดียวกันโดยไคลเอ็นต์ทั้งหมด ซึ่งหมายความว่าหากไคลเอ็นต์สองเครื่องดำเนินการเขียนที่เกี่ยวข้องกัน ไคลเอ็นต์อื่นทั้งหมดจะเห็นการเขียนเหล่านั้นในลำดับเดียวกัน ข้อเสียสำหรับความยืดหยุ่นนี้คือความสอดคล้องเชิงสาเหตุมักไม่รับประกันในฐานข้อมูล NoSQL ซึ่งหมายความว่าหากไคลเอนต์สองเครื่องดำเนินการเขียนที่เกี่ยวข้องเชิงสาเหตุ จะไม่มีการรับประกันว่าไคลเอนต์อื่นทั้งหมดจะเห็นการเขียนเหล่านั้นในลำดับเดียวกัน สิ่งนี้สามารถนำไปสู่ความไม่สอดคล้องกันในข้อมูลที่จัดเก็บไว้ในฐานข้อมูล มีหลายปัจจัยที่สามารถนำไปสู่ความไม่สอดคล้องเชิงสาเหตุในฐานข้อมูล NoSQL หนึ่งคือการใช้ความสอดคล้องในท้ายที่สุด ซึ่งเป็นรูปแบบความสอดคล้องที่มักใช้ในฐานข้อมูล NoSQL ในระบบที่สอดคล้องกันในที่สุด ไคลเอนต์ทั้งหมดอาจไม่สามารถมองเห็นการเขียนในทันที แต่จะถูกเผยแพร่ไปยังแบบจำลองทั้งหมดในที่สุด ซึ่งหมายความว่ามีกรอบเวลาที่ไคลเอนต์ต่างๆ เห็นว่าการเขียนไม่เป็นไปตามลำดับ อีกปัจจัยหนึ่งที่สามารถนำไปสู่ความไม่สอดคล้องเชิงสาเหตุคือการใช้วิธีแก้ปัญหาข้อขัดแย้งแบบคนเขียนคนสุดท้าย ในระบบ Last-writer-wins เมื่อไคลเอนต์สองเครื่องดำเนินการเขียนที่ขัดแย้งกัน การเขียนจากไคลเอนต์ที่ดำเนินการล่าสุดจะมีความสำคัญกว่า ซึ่งอาจนำไปสู่ความไม่สอดคล้องกันหากลำดับในการดำเนินการเขียนไม่เหมือนกันในไคลเอนต์ทั้งหมด การแก้ไขข้อขัดแย้งแบบ Last-writer-wins มักใช้ในระบบที่สอดคล้องกันในที่สุด เนื่องจากสามารถช่วยให้แน่ใจว่าการเขียนครั้งล่าสุดจะเป็นการเขียนที่ลูกค้าทุกคนมองเห็นได้ อย่างไรก็ตาม ยังอาจนำไปสู่ความไม่สอดคล้องกันได้หากลำดับในการดำเนินการเขียนไม่เหมือนกันในไคลเอ็นต์ทั้งหมด โดยทั่วไป ข้อแลกเปลี่ยนสำหรับความยืดหยุ่นของฐานข้อมูล NoSQL คือไม่รับประกันความสอดคล้องเชิงสาเหตุ ซึ่งหมายความว่ามีความเสี่ยงที่จะไม่สอดคล้องกันในข้อมูลที่จัดเก็บ
ในบทความนี้ ผมจะแสดงให้เห็นว่า MongoDB's Causal Consoundency Guarantees ถูกทำลายแบบเรียลไทม์ได้อย่างไร เสียงข้างมากยังใช้เพื่อแก้ไขปัญหานั้นด้วย ความพยายามครั้งแรกคือการใช้การอ่านและเขียนเสียงข้างมาก ต่อไปนี้ เราจะดูช่วงเวลาของสัญญาณนาฬิกาแบบลอจิคัลและเซสชันที่วุ่นวายใน Mongo ฉันจะใช้ไดรเวอร์ Mongo C# สำหรับการเข้ารหัสในกรณีนี้ แต่ขึ้นอยู่กับฉันทั้งหมด สมาชิกชุดแบบจำลองส่วนใหญ่ยอมรับข้อมูลที่ส่งคืนจากแบบสอบถามในการอ่านส่วนใหญ่ ความคิดของการใช้การเขียนส่วนใหญ่ตามด้วยการอ่านส่วนใหญ่อาจเป็นวิธีแก้ปัญหาที่น่าสนใจสำหรับปัญหาการเขียนของคุณ เมื่อเข้าใจการเขียนส่วนใหญ่แล้ว เซิร์ฟเวอร์รองทุกเซิร์ฟเวอร์จะเก็บสแน็ปช็อตในหน่วยความจำของการเขียนส่วนใหญ่ล่าสุด
แต่ละออบเจ็กต์ได้รับการประทับเวลาแบบหลายส่วนใน โมเดลความสอดคล้องเชิงสาเหตุ ซึ่งดำเนินการโดยใช้วัตถุนั้น การประทับเวลาเหล่านี้ถูกจัดเก็บไว้ในเวกเตอร์ที่มีหมายเลขเวอร์ชันของออบเจกต์ในแต่ละเรพลิเคชัน
มีคำจำกัดความ ความสอดคล้องทำให้มั่นใจได้ว่ากระบวนการทั้งหมดสังเกตการดำเนินการสลับที่ในลำดับเดียวกัน โดยจับความสัมพันธ์เชิงสาเหตุที่อาจเกิดขึ้นระหว่างการดำเนินการ กล่าวอีกนัยหนึ่ง กระบวนการทั้งหมดในระบบมีความเข้าใจร่วมกันเกี่ยวกับวิธีการดำเนินการที่เกี่ยวข้องกับสาเหตุ
ต่อไปนี้เป็นขั้นตอนสู่ความสอดคล้องตามลำดับ: a) ลำดับที่สอดคล้องกัน ของการเขียนตามลำดับ; b) ลำดับที่สอดคล้องกันของการเขียนตามลำดับ; และ c) ลำดับที่สอดคล้องกันของการเขียนตามลำดับ เมื่อเขียนตามความสอดคล้องเชิงสาเหตุ จำเป็นต้องให้การอ่านที่เกี่ยวข้องเชิงสาเหตุอยู่ในลำดับเดียวกัน
ความสอดคล้องใน Nosql คืออะไร?
ด้วยเหตุนี้ ฐานข้อมูล NoSQL จึงต้องการความสม่ำเสมอจำนวนมากเพื่อรักษาความพร้อมใช้งานสูง พวกเขาไม่ได้รับความสม่ำเสมอที่แข็งแกร่ง ค่อนข้างจะนำไปสู่ความสม่ำเสมอในระยะยาว ความล้มเหลวในการส่งคืนผลลัพธ์ของการเขียนล่าสุดอาจเกิดขึ้นได้ในบางครั้ง เนื่องจากที่เก็บข้อมูลที่รับประกันการทำงานของฐานอาจไม่สามารถทำได้
การนำที่เก็บข้อมูลเอกสารไปใช้งานจะแก้ไขได้ยากกว่าการนำแบบจำลองเชิงสัมพันธ์ไปใช้มาก นอกจากนี้ ความซับซ้อนของการปรับโครงสร้างข้อมูลในที่จัดเก็บบนเครื่องบินนั้นสูงกว่าการแปลง ETL แบบธรรมดาของ RDBMS อย่างมาก นักพัฒนาและสถาปนิกที่ไม่รู้หรือไม่เข้าใจหรือกลัวว่าจะตกงานหากทำพลาดจะพลาดโอกาสนี้ไป พวกเขาจะแบ่งธุรกรรมปรมาณูออกเป็นชิ้นๆ แทนที่จะจดจำว่าการจำลองแบบและเวลาแฝงเป็นกระบวนการ และที่แย่กว่านั้นคือการลากระบบของบุคคลที่สามเข้ามาในกระบวนการ ในที่สุดมันจะถูกว่าจ้างจากภายนอกและคนอื่นจะบริหารแผนกต่อไป
ความไม่สอดคล้องกันในฐานข้อมูลเกิดจากหลายปัจจัย รวมถึงข้อมูลที่ไม่ถูกต้องหรือไม่สมบูรณ์ ขาดข้อจำกัด ทริกเกอร์ไม่ถูกต้อง หรือกำหนดค่าเรียงซ้อนไม่ถูกต้อง เนื่องจากปัญหาเหล่านี้ ข้อมูลที่ไม่ถูกต้องอาจถูกจัดเก็บในฐานข้อมูล ผลที่ตามมา อาจมีผลกระทบอย่างมากต่อความถูกต้องและประสิทธิผลของการวิเคราะห์และการตัดสินใจ โครงสร้างฐานข้อมูลที่สมบูรณ์และสอดคล้องกัน เป็นขั้นตอนที่สำคัญที่สุดในการรับรองความถูกต้องและความสอดคล้องของข้อมูล นอกจากนี้ สคีมาที่กำหนดไว้อย่างดีจะช่วยให้แน่ใจว่าข้อมูลถูกป้อนลงในฐานข้อมูลอย่างถูกต้อง และกฎที่ควบคุมข้อมูลนั้นได้รับการตีความอย่างถูกต้อง ซึ่งช่วยให้การวิเคราะห์สะท้อนข้อมูลในฐานข้อมูลได้อย่างแม่นยำโดยป้องกันความไม่สอดคล้องกัน
ฐานข้อมูล Nosql ไม่เหมาะสำหรับการทำธุรกรรมทางธนาคารและตู้เอทีเอ็ม
ความเชื่อถือได้ของฐานข้อมูลไม่ราบรื่นเท่ากับ nosql เช่นเดียวกับ SQL เนื่องจากส่วนใหญ่ใช้รูปแบบความสอดคล้องกันในภายหลัง ด้วยเหตุนี้ จึงไม่เหมาะสำหรับการทำธุรกรรมต่างๆ เช่น การถอนเงินผ่านธนาคารและการถอนเงินจากตู้ ATM เนื่องจากข้อมูลอาจไม่สอดคล้องกันในบางครั้ง
ความสม่ำเสมอที่เกี่ยวข้องกันและเชิงสาเหตุคืออะไร?
ความสอดคล้องที่เกิดขึ้นพร้อมกันและสัมพันธ์เชิงสาเหตุคือความสอดคล้องประเภทหนึ่งที่มีอยู่เมื่อเหตุการณ์สองเหตุการณ์ขึ้นไปเกิดขึ้นพร้อมกันและเกี่ยวข้องกัน ความสอดคล้องประเภทนี้มีความสำคัญในหลายสาขา เช่น ฟิสิกส์และวิศวกรรม ซึ่งจำเป็นเพื่อให้แน่ใจว่าเหตุการณ์ต่างๆ เกิดขึ้นในลักษณะที่สอดคล้องกัน
ระบบแบบกระจายประกอบด้วยโหนดคอมพิวเตอร์จำนวนมากที่มีการแบ่งปันและจำลองข้อมูล ความสอดคล้องเป็นคุณสมบัติของระบบแบบกระจายที่ทำให้แน่ใจว่าโหนดและตัวจำลองมีมุมมองข้อมูลเดียวกันในเวลาเดียวกัน เป็นวิธีการทดลองเพื่อรักษาความสงบเรียบร้อยในการดำเนินงานที่เกี่ยวข้องเชิงสาเหตุโดยใช้รูปแบบความสม่ำเสมอที่อ่อนแอ ความแตกต่างที่สำคัญระหว่างความสอดคล้องเชิงสาเหตุและความสอดคล้องตามลำดับคือ ความสอดคล้องเชิงสาเหตุไม่จำเป็นต้องมีลำดับความสำคัญทั้งหมด ความรู้สึกสอดคล้องกันโดยสัญชาตญาณบ่งบอกเป็นนัยว่าการอ่านจะสดใหม่ก็ต่อเมื่อการเขียนนั้นขึ้นอยู่กับสาเหตุ ตัวอย่างของระบบแบบกระจายมีดังต่อไปนี้ ซึ่งประกอบด้วยสี่กระบวนการ: P1, P2, P3 และ P4
เป็นคุณสมบัติที่สามารถคำนวณได้โดยใช้จำนวนของกระบวนการที่เห็นด้วยกับลำดับของการดำเนินการที่ดำเนินงานในการกำหนดสาเหตุ กระบวนการใดก็ตามที่เป็นไปตามข้อกำหนดต่อไปนี้ถือว่าสอดคล้องกัน: สำหรับสองกระบวนการใดๆ P และ Q ถ้า P ทำให้เกิด Q และ Q ทำให้เกิด R ดังนั้น P จะทำให้เกิด R ในกระบวนการอื่นๆ เป็นการวัดจำนวนของกระบวนการที่เห็นด้วยกับคำสั่งในการดำเนินการที่เกี่ยวข้องกับสาเหตุทั้งหมด กระบวนการหนึ่งจะสอดคล้องกันหากเป็นไปตามข้อกำหนดต่อไปนี้: P ทำให้เกิด Q และ Q ทำให้เกิด R จากนั้น P ทำให้เกิด R ข้อกำหนดความสอดคล้องเป็นหนึ่งในข้อกำหนด กระบวนการที่สอดคล้องกันมีแนวโน้มที่จะสร้างข้อสรุปที่ถูกต้องเมื่อใช้ในลักษณะที่สอดคล้องกัน สามารถวัดความสอดคล้องของกระบวนการได้หลายวิธี วิธีหนึ่งในการดูคือการพิจารณาว่ามีกี่กระบวนการที่ตกลงในลำดับที่การดำเนินการที่เกี่ยวข้องกับสาเหตุเกิดขึ้น เป็นผลให้มี ดัชนีความสอดคล้อง ดัชนีความสอดคล้องคือการวัดความสม่ำเสมอของกระบวนการ เพื่อให้สอดคล้องกัน กระบวนการต้องเป็นไปตามข้อกำหนดต่อไปนี้: สำหรับสองกระบวนการใดๆ P ทำให้เกิด Q และ Q ทำให้เกิด R ดังนั้น P ทำให้เกิด R เช่นเดียวกับ Q และ Q ดัชนีความสอดคล้องของกระบวนการคือการวัดความเสถียรของกระบวนการ หากกระบวนการเป็นไปตามข้อกำหนดเหล่านี้ กล่าวกันว่าสอดคล้องกับสิ่งต่อไปนี้: ถ้า P ทำให้เกิด Q และ Q ทำให้เกิด R P ทำให้เกิด R สำหรับสองกระบวนการใดๆ P และ Q หากกระบวนการไม่เป็นไปตามข้อกำหนดความสอดคล้อง จะถือว่า ไม่สอดคล้องกัน กระบวนการที่ไม่สอดคล้องกันมีแนวโน้มที่จะส่งผลให้เกิดข้อสรุปที่ไม่ถูกต้อง สามารถใช้ดัชนีความสอดคล้องเพื่อประเมินความสอดคล้องของกระบวนการ เป็นวิธีการวัดความสอดคล้องของกระบวนการและระบุกระบวนการที่ให้ข้อสรุปเชิงสาเหตุที่ถูกต้องมากขึ้น
ความสอดคล้องเชิงสาเหตุ Vs ความสอดคล้องในท้ายที่สุด
มีความสอดคล้องกันสองประเภทหลักในระบบแบบกระจาย: ความสอดคล้องเชิงสาเหตุและความสอดคล้องในท้ายที่สุด ความสอดคล้องเชิงสาเหตุรับประกันได้ว่าหากสองเหตุการณ์เกี่ยวข้องกัน กระบวนการทั้งหมดจะเห็นเหตุการณ์เหล่านั้นในลำดับเดียวกัน ความสม่ำเสมอในท้ายที่สุดรับประกันว่า หากมีเวลาเพียงพอ กระบวนการทั้งหมดจะเห็นสถานะสุดท้ายของระบบเหมือนกัน แม้ว่าจะไม่เห็นสถานะขั้นกลางเดียวกันก็ตาม
ความสอดคล้องเชิงสาเหตุในระบบกระจาย
เกณฑ์ความสอดคล้อง ของความสอดคล้องสามารถนำมาใช้เพื่อกำหนดสาเหตุ [1] ในฐานข้อมูลแบบกระจาย หากการดำเนินการเกี่ยวข้องกันเชิงสาเหตุ ทุกโหนดของระบบแบบกระจายจะแสดงข้อมูลเดียวกันในลำดับเดียวกันกับที่มันถูกอ่านและเขียน
แบบจำลองความสอดคล้องอื่นๆ เช่น ในที่สุดและเชิงสาเหตุก็เป็นที่รู้จักกันดีเช่นกัน ในระบบแบบกระจาย สิ่งเหล่านี้พบได้ทั่วไปมากกว่าในฐานข้อมูลแบบดั้งเดิม แบบจำลองที่สอดคล้องกันเป็นวิธีแฟนซีในการบอกว่าระบบและผู้ใช้มีข้อตกลงที่สอดคล้องกัน เมื่อเกิดการโต้ตอบ คุณลักษณะเหล่านี้จะอธิบายว่าระบบจะทำงานอย่างไร หากระบบของเราอ้างว่าสามารถทำซีเรียลได้ ระบบจะต้องปรากฏเป็นตำแหน่งที่ตั้งส่วนกลางแห่งเดียวโดยมีการดำเนินการทั้งหมดปรากฏต่อกระบวนการทั้งหมดตามลำดับส่วนกลาง โดยไม่คำนึงถึงตำแหน่งที่ตั้ง อนุญาตให้ดำเนินการแทรกสอดได้ตามที่ระบบเห็นสมควร แม้ว่าจะไม่มีการรับประกันลำดับที่แท้จริงของกระบวนการ (ตามคำจำกัดความ) แต่จะรับประกันได้เมื่อลำดับการดำเนินการถูกรักษาไว้
เป็นไปได้ว่าการดำเนินการบางอย่างจะดูเหมือนเกิดขึ้นเมื่อหลายปีก่อนด้วยซ้ำ ข้อเท็จจริงที่ว่าการดำเนินการ (เขียน/เขียน) นั้นสัมพันธ์กันเชิงสาเหตุ หมายความว่าลำดับที่ดำเนินการควรเหมือนกันสำหรับกระบวนการทั้งหมด ไม่มีการรับประกันคำสั่งซื้อเนื่องจากทั้งสองกระบวนการเขียนค่าที่แตกต่างกันสำหรับ x ดังที่แสดงในภาพด้านล่าง เมื่อเราหยุดการเขียนใหม่ ระบบจะรวมเข้าสู่สถานะที่สอดคล้องกันในที่สุด การรับประกันความสอดคล้องในขั้นสุดท้าย ระบุว่าจะไม่มีการอัปเดต (เขียน) ลงในระบบ และไคลเอนต์ทั้งหมดจะสามารถเห็นได้อย่างชัดเจนว่ามันทำงานอย่างไร หากคุณเขียนอักขระโมโนโทนิกลงในบัญชี $100 คุณจะถูกเรียกเก็บเงิน $165 เมื่อไคลเอนต์อัพเดตรายการในการอ่านการเขียนของคุณ (RYW) ค่าของรายการนั้นจะถูกส่งคืนหลังจากการอัพเดตเสร็จสิ้น PRAM เป็นหน่วยความจำไปป์ไลน์ประเภทหนึ่งที่อนุญาตให้กระบวนการดูการดำเนินการทั้งหมดจากกระบวนการเดียวในลักษณะเดียวกัน
Mongodb ความสม่ำเสมอในที่สุด
หมายความว่าข้อมูลที่คุณกำลังอ่านอาจไม่สอดคล้องกันในขณะนี้ แต่ในที่สุดก็จะเป็นเช่นนั้น สิ่งนี้ได้มาจากการใช้ readPreferences ใดๆ ที่สามารถอ่านได้จากค่ารอง
ใน MongoDB ข้อมูลหลักจะถูกจำลองแบบอะซิงโครนัสเสมอ ในขณะที่ข้อมูลรองจะถูกจำลองแบบพร้อมกัน MongoDB มีค่าเริ่มต้นเป็น w1: (เขียนไปยังหลักสำเร็จ) และ j:false สำหรับการทำเจอร์นัล เนื่องจาก การจำลองแบบอะซิงโครนัส เมื่อพาร์ติชันถูกแบ่งพาร์ติชันในฝั่งส่วนน้อยหรือสูญเสียหลักไป มักจะสูญเสียความสอดคล้องกัน ระหว่างการแบ่งพาร์ติชั่น เราสามารถปรับค่า w และ j เพื่อให้ได้ระดับความหน่วงที่แตกต่างกันและการรับประกันที่สอดคล้องกันทั่วทั้งกระดาน เมื่อไม่มีพาร์ติชัน ความเร็วในการเขียนจะลดลง และเมื่อมีการเขียน การเขียนจะไม่รอการจำลองแบบ หากคุณใช้ w &j ร่วมกัน การอ่าน/ไม่อ่านจากข้อมูลรองอาจมีผลกระทบอย่างมากต่อระดับความสอดคล้อง MongoDB มีความสอดคล้องกันสี่ระดับ
เวลาที่ดีที่สุดในการเขียนคือเมื่อไม่มีพาร์ติชันและโหนดทั้งหมดทำงานอยู่ MongoDB มีความสอดคล้องและมีเวลาแฝงต่ำ เมื่อตัวหลักที่ทำหน้าที่หายไปและพาร์ติชันถูกเติมเต็ม จะเป็นประเภทการเขียนที่ล้มเหลวที่พบได้บ่อยที่สุด (writeTimeout ผิดพลาด) เรามีความพยายามอย่างดีที่สุดใน MongoDB เพราะไม่ว่าเราจะแบ่งพาร์ติชันคลัสเตอร์อย่างไร เราจะสูญเสียส่วนหนึ่งของคลัสเตอร์เสมอ อย่างน้อยก็เป็นเปอร์เซ็นต์ ใน CAP และ CP/EC ของทฤษฎีบท PACELC w:majority, j:true และ READ จากprimary เท่านั้นสามารถใช้จัดหมวดหมู่ MongoDB เป็น CP
Mongodb รักษาความสม่ำเสมอได้อย่างไร?
ลูกค้าหลายรายสามารถอ่านและเขียนข้อมูล MongoDB เดียวกันได้ในเวลาเดียวกัน MongoDB ใช้การล็อกและการจัดการพร้อมกันเพื่อป้องกันไม่ให้ไคลเอ็นต์แก้ไขข้อมูลเดียวกันในเวลาเดียวกัน เมื่อเราเขียนลงในเอกสารฉบับเดียว เราอาจเขียนทั้งหมดหรือไม่เขียนเลยก็ได้ และลูกค้าจะเห็นผลลัพธ์ที่สอดคล้องกันเสมอ
ความสอดคล้องในที่สุดใน Nosql คืออะไร?
แนวคิดของความสอดคล้องในท้ายที่สุดในการสร้างแบบจำลองข้อมูลคือเพื่อให้แน่ใจว่าการเปลี่ยนแปลงที่ทำกับฐานข้อมูล NoSQL ที่กระจายไปยังหลาย ๆ โหนดจะสะท้อนให้เห็นในการเปลี่ยนแปลงทั้งหมด ด้วยเหตุนี้ การสืบค้นฐานข้อมูลเดียวกันจะส่งผลลัพธ์เดียวกันเมื่อเวลาผ่านไป