การใช้วิธีการสอดคล้องใน NoSQL

การใช้วิธีการสอดคล้องกันใน NoSQL - Dummies

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

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

  • ACID Consistency (ACID ย่อมาจาก Atomicity, Consistency, Isolation, Durability): ACID หมายความว่าเมื่อมีการเขียนข้อมูลแล้วคุณจะมีความสอดคล้องกันอย่างเต็มที่ อ่าน

  • ความสอดคล้องกันในเวลา (BASE): BASE หมายความว่าเมื่อมีการเขียนข้อมูลแล้วในที่สุดจะปรากฏขึ้นสำหรับการอ่าน

    >

การต่อสู้เกิดขึ้นระหว่างผู้ที่เชื่อว่าความสอดคล้องกันที่แข็งแกร่งในฐานข้อมูลไม่จำเป็นต้องใช้และผู้ที่เชื่อว่าจำเป็นต้องมีอย่างแน่นอน (แปล คน ถึง บริษัท NoSQL 'ฝ่ายการตลาด! )

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

ACID หมายถึงโดยทั่วไป "

ฐานข้อมูลนี้มีสิ่งอำนวยความสะดวกเพื่อป้องกันไม่ให้ข้อมูลที่เสียหายหรือสูญหาย " ซึ่งไม่ใช่ฐานข้อมูลทั้งหมด ในความเป็นจริงส่วนใหญ่ของฐานข้อมูล NoSQL ไม่ได้ให้การค้ำประกันกรด DB Foundation, MarkLogic และ Neo4j เป็นข้อยกเว้นที่โดดเด่น ฐานข้อมูล NoSQL บางแห่งมีการรับประกันที่มีเกรดต่ำกว่าที่เรียกว่า

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

BASE

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

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

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

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

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

วิธีอื่นในแบบจำลองแบบอ่านอย่างเดียวคือการมี

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

กลุ่ม Shared-nothing มีข้อได้เปรียบของรูปแบบความสอดคล้องที่เรียบง่าย แต่ต้องใช้การทำแบบจำลองสองเฟส ความจริงข้อนี้หมายถึงการทำธุรกรรมล็อกในขณะที่จำลองทั้งหมดได้รับการปรับปรุง (ล็อคภายในและการล็อกสำหรับโหนดอื่น ๆ จะช่วยให้คุณมีสองขั้นตอน)

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

การเลือกกรดหรือเบส?

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

บางฐานข้อมูล NoSQL มีการปฏิบัติตาม ACID บนแผนงานแม้ว่าจะเป็นผู้สนับสนุน BASE ซึ่งแสดงถึงการรับประกัน ACID ที่เกี่ยวข้องกับระบบ

enterprise, mission - critical หลาย บริษัท ใช้ผลิตภัณฑ์ BASE-consistency เมื่อทดสอบไอเดียเนื่องจากไม่มีค่าใช้จ่าย แต่จะย้ายไปเป็นฐานข้อมูลแบบชำระเงินตามเกณฑ์ ACID เมื่อพวกเขาต้องการใช้งานระบบที่มีความสำคัญต่อภารกิจ

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

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

กรณีที่คล้ายกันสามารถสร้างขึ้นสำหรับ ACID เหนือ BASE ในการดูแลสุขภาพการป้องกันสติปัญญาและภาคอื่น ๆ มันทั้งหมดเดือดลงไปที่ข้อมูลแม้ว่าและความสำคัญของทั้งสองทันเวลาและความปลอดภัยของข้อมูล