เหตุใดฐานข้อมูล NoSQL มักไม่รองรับธุรกรรม – และวิธีแก้ไขปัญหา
เผยแพร่แล้ว: 2022-11-21ธุรกรรมเป็นส่วนสำคัญของระบบฐานข้อมูลใดๆ ซึ่งทำให้มั่นใจได้ถึงความสมบูรณ์ของข้อมูลและความสอดคล้องกันเมื่อต้องเผชิญกับการอัปเดตพร้อมกัน อย่างไรก็ตาม ไม่ใช่ฐานข้อมูลทั้งหมดที่รองรับการทำธุรกรรม โดยเฉพาะอย่างยิ่ง ฐานข้อมูล NoSQL มักไม่มีวิธีในการทำธุรกรรมใดๆ นี่อาจเป็นปัญหาหลักสำหรับแอปพลิเคชันที่ต้องการ การสนับสนุนด้านธุรกรรม เนื่องจากอาจทำให้ข้อมูลเสียหายและความไม่สอดคล้องกันได้ อย่างไรก็ตาม มีวิธีแก้ปัญหาบางอย่างที่สามารถใช้เพื่อให้การสนับสนุนการทำธุรกรรมสำหรับฐานข้อมูล NoSQL ในบทความนี้ เราจะมาดูกันว่าธุรกรรมคืออะไร เหตุใดฐานข้อมูล NoSQL จึงไม่รองรับธุรกรรมเหล่านี้ และคุณจะหลีกเลี่ยงข้อจำกัดนี้ได้อย่างไร
ความหมายทรานแซกชันของโซลูชัน NoSQL นั้นเบากว่าของฐานข้อมูลเชิงสัมพันธ์ แต่ยังคงให้การดำเนินการในระดับปรมาณู หากคุณรู้วิธีใช้ Node.js หรือ Ruby/Rack คุณสามารถสร้างแบบจำลองขนาดเล็กบน Heroku.com ได้อย่างรวดเร็ว ฉันเสียใจที่ต้องแจ้งให้คุณทราบว่าฉันยังไม่ได้นำสิ่งนี้ไปใช้ในทางใดทางหนึ่ง หากจะดำเนินการธุรกรรม จะต้องสามารถบรรลุคุณสมบัติของกรดได้ เครื่องมือ NoSQL ส่วนใหญ่ลดเกณฑ์ความสอดคล้องของการดำเนินงานเพื่อให้บรรลุการยอมรับข้อผิดพลาดและความพร้อมในการปรับสเกล เป็นความคิดที่ดีที่จะใช้ฐานข้อมูล SQL/ACID เช่น VoltDB ซึ่งเป็นแบบในหน่วยความจำ แบบเน้นคอลัมน์ และแบบกระจาย สามารถใช้ ' ธุรกรรมในแง่ดี ' เพื่อบรรลุสิ่งนี้ได้ แต่ฉันเชื่อว่าคุณต้องเข้าใจการรับประกันปรมาณูของการใช้งานฐานข้อมูล (เช่น ฉันควรเขียนและอ่านกี่คำติดต่อกัน) ก่อนดำเนินการต่อ
จากฟอรัมสนทนาบางแห่ง มี ธุรกรรม HBase บางอย่างเกิดขึ้นบนอินเทอร์เน็ต หากนั่นคือสิ่งที่คุณต้องการ โดยทั่วไปมีฐานข้อมูล NoSQL อยู่ 2 ประเภท ได้แก่ คีย์/ค่าและที่เก็บข้อมูลแบบกระจาย ซึ่งทั้งสองอย่างนี้ถูกนำไปใช้ใน RDBMS ที่คุณต้องการ และสามารถเก็บไว้เหนือระดับได้ด้วยความช่วยเหลือจาก DBA และด้วยความยืดหยุ่นและประสิทธิภาพของ NoSQL หากโซลูชัน NoSQL มีการเปรียบเทียบและจับคู่ คุณสามารถใช้ธุรกรรมในแง่ดีเสริมได้
สำหรับฐานข้อมูล NoSQL เวลานี้มีความสำคัญเป็นพิเศษ: เงินเดิมพันสูงขึ้น และในที่สุดก็ถึงเวลาที่จะต้องดำเนินการธุรกรรมแบบกระจาย ก่อนหน้านั้น ธุรกรรมมักจะถูกคอมมิตบนเซิร์ฟเวอร์หนึ่งเครื่อง จากนั้นจำลองไปยังส่วนที่เหลือของคลัสเตอร์ในลักษณะเดียวกับก่อนหน้านี้
ทำไม Nosql ถึงไม่ดีสำหรับการทำธุรกรรม
ธุรกรรม ACID ไม่ได้ดำเนินการโดยฐานข้อมูล NoSQL ในแอปพลิเคชันปัจจุบัน คุณสมบัติเหล่านี้ไม่ใช่เรื่องเล็กน้อยที่จะใช้ในธุรกรรมที่ต้องดำเนินการกับ NoSQL ข้อมูลที่มีโครงสร้างไม่ได้รับการสนับสนุน และไม่ได้ใช้ภาษาคิวรีที่มีโครงสร้าง
การใช้ฐานข้อมูล NoSQL ในการพัฒนาช่วยให้นักพัฒนาสามารถทำงานพร้อมกันได้ในระดับเดียวกันโดยไม่ต้องแปลงโครงสร้างในหน่วยความจำเป็นโครงสร้างเชิงสัมพันธ์ นอกจากนี้ แม้ว่าพวกเขาจะให้การรักษาความปลอดภัยข้อมูลในระดับสูง แต่องค์กรด้านไอทีสมัยใหม่ก็จำเป็นอย่างยิ่งที่จะต้องทำเช่นนั้น กระบวนการแบ่งส่วนย่อย ซึ่งแยกฐานข้อมูลขนาดใหญ่มากออกเป็นส่วนย่อยๆ ที่จัดการได้มากขึ้น ไม่สามารถทำให้ทุกฐานข้อมูลเป็นแบบอัตโนมัติได้ เมื่อคุณใช้ฐานข้อมูล NoSQL ข้อมูลจะถูกแบ่งพาร์ติชันข้ามโหนดต่างๆ และสามารถเข้าถึงได้อย่างมีประสิทธิภาพมากขึ้น ส่งผลให้มีการเลือกชุดข้อมูลขนาดใหญ่ขึ้นด้วยพลังการประมวลผลที่มากขึ้น แอปพลิเคชันสมัยใหม่ซึ่งต้องการความสามารถในการปรับขนาด ความน่าเชื่อถือ และความพร้อมใช้งานในระดับสูงจากฐานข้อมูล กำลังต้องการความน่าเชื่อถือและความสามารถในการปรับขนาดในระดับสูงจากฐานข้อมูลเชิงสัมพันธ์ ข้อเสียของ NoSQL สามารถแก้ไขได้โดยใช้กลยุทธ์ที่หลากหลายสำหรับแอปพลิเคชันในปัจจุบัน
การเลือกฐานข้อมูล NoSQL ที่เหมาะกับความต้องการของคุณจำเป็นต้องมีการพิจารณาหลายประการ รายการนี้ประกอบด้วยปัจจัยต่างๆ เช่น ประเภทของข้อมูลที่คุณต้องการ ระดับความน่าเชื่อถือที่คุณต้องการ และจำนวนความเร็วและความสามารถในการปรับขนาดที่คุณต้องการ MongoDB, Cassandra และ Redis เป็นฐานข้อมูล NoSQL ที่ได้รับความนิยมมากที่สุด แต่ละฐานข้อมูลเหล่านี้มีจุดแข็งและจุดอ่อนของตัวเอง ดังนั้นคุณต้องเลือกฐานข้อมูลที่ดีที่สุดสำหรับคุณ ไม่มีการรับประกันว่าฐานข้อมูล NoSQL จะเป็นตัวเลือกที่ดีที่สุดสำหรับความต้องการของคุณ ข้อเสียเปรียบหลักข้อหนึ่งของฐานข้อมูล NoSQL คือไม่สามารถรองรับคุณสมบัติความน่าเชื่อถือที่พบในฐานข้อมูลเชิงสัมพันธ์ได้ ในบรรดาคุณลักษณะต่างๆ ของความน่าเชื่อถือ ความเป็นปรมาณู ความสม่ำเสมอ การแยกตัว และความทนทานล้วนมีความสำคัญ หากคุณต้องการทำธุรกรรม MongoDB ไม่ใช่ฐานข้อมูลที่ดีที่สุดสำหรับคุณ มีแอปพลิเคชันน้อยลงและน้อยลงที่จำเป็นต้องมีการทำธุรกรรม แต่บางแอปพลิเคชันจำเป็นต้องมีธุรกรรมเพื่ออัปเดตเอกสาร/คอลเลกชั่นหลายรายการ ในกรณีนี้ ควรหลีกเลี่ยง MongoDB เนื่องจากเป็นสิ่งที่ทีมต้องการ สิ่งสำคัญคือต้องพิจารณาปัจจัยหลายประการเมื่อเลือกฐานข้อมูล NoSQL รวมถึงประเภทของข้อมูลที่คุณกำลังใช้งาน ระดับความน่าเชื่อถือที่คุณต้องการ และประสิทธิภาพและความสามารถในการปรับขนาดของฐานข้อมูลของคุณ MongoDB, Cassandra และ Redis เป็นเพียงฐานข้อมูล NoSQL บางส่วนที่มีอยู่ในปัจจุบัน
เหตุใดจึงไม่แนะนำให้ใช้ Mongodb สำหรับข้อมูลทางการเงิน
เหตุใดจึงไม่ควรใช้ MongoDB สำหรับข้อมูลทางการเงิน
เนื่องจากขาดการสนับสนุนด้านธุรกรรม MongoDB จึงไม่แนะนำให้ใช้กับข้อมูลทางการเงิน เป็นสิ่งสำคัญสำหรับความน่าเชื่อถือของข้อมูลและความสม่ำเสมอในการทำธุรกรรม จำเป็นต้องมีการทำธุรกรรมเพื่อให้แน่ใจว่าสอดคล้องหรือซิงค์กับฐานข้อมูล แต่ไม่ได้ทำเสมอไป
กรดธุรกรรม Nosql
ฐานข้อมูล NoSQL ไม่สนับสนุนการทำธุรกรรมในลักษณะเดียวกับฐานข้อมูลเชิงสัมพันธ์ ซึ่งหมายความว่าคุณไม่สามารถพึ่งพาคุณสมบัติกรดของธุรกรรมเมื่อใช้ฐานข้อมูล NoSQL อย่างไรก็ตาม ฐานข้อมูล NoSQL บางส่วนรองรับคุณสมบัติบางอย่างของธุรกรรม เช่น การดำเนินการระดับปรมาณู
ฐานข้อมูล Nosql ที่แตกต่างกันอาจเสนอระดับการรองรับธุรกรรมที่แตกต่างกัน
ฐานข้อมูล Nosql ที่แตกต่างกันอาจให้การสนับสนุนธุรกรรมในระดับต่างๆ ตัวอย่างเช่น ฐานข้อมูลบางแห่งอาจให้ การสนับสนุนธุรกรรมเต็มรูปแบบ ในขณะที่บางฐานข้อมูลอาจให้การสนับสนุนแบบจำกัดเท่านั้น นี่อาจเป็นปัจจัยสำคัญในการพิจารณาเมื่อเลือกฐานข้อมูล Nosql
ข้อมูลถูกสร้างแบบจำลองจากมุมมองเชิงวัตถุแทนที่จะเก็บไว้ในฐานข้อมูลเชิงสัมพันธ์ เพื่อให้นักพัฒนาเข้าใจความแตกต่างระหว่างฐานข้อมูลเชิงวัตถุและเชิงสัมพันธ์ได้ดีขึ้น ฐานข้อมูลเชิงเอกสาร (เช่น MarkLogic, MongoDB และ CouchDB) ได้กำจัดอิมพีแดนซ์ที่ไม่ตรงกันนี้โดยสิ้นเชิง ข้อเสียของฐานข้อมูล NoSQL คือไม่มีความสามารถดังกล่าวในแง่ของความคล่องตัวและความสามารถในการปรับขนาด ในทางปฏิบัติ ความสำคัญของคุณสมบัติของกรดนั้นแสดงให้เห็นได้จากวิธีการใช้หรือระบุโดยตลาด MarkLogic ซึ่งเป็นฐานข้อมูล NoSQL เป็นตัวอย่างหนึ่งของฐานข้อมูล NoSQL และเราจะมาดูกันว่ามันช่วยในการทำธุรกรรมแบบหลายคำสั่งใน Java ได้อย่างไร MarkLogic เป็นฐานข้อมูล NoSQL ที่เน้นเอกสาร เป็นไปได้ที่จะทำให้วัตถุเป็นอนุกรมเป็นรูปแบบภาษาที่เป็นกลางและอธิบายตัวเองได้โดยไม่ต้องผ่านการแมปที่ซับซ้อน
ในตัวอย่างต่อไปนี้ JAXB ใช้เพื่อนำเสนอ POJO ให้กับ MarkLogic เพื่อคงอยู่ ด้วยคุณสมบัติ ACID ของ MarkLogic สินค้าคงคลังจะสะท้อนการซื้อ (ในรูปแบบของการลดสินค้าคงคลัง) เมื่อมีการซื้อสินค้า ฐานข้อมูลดำเนินงานนี้เป็นการดำเนินการทั้งหมดหรือไม่มีเลยจากมุมมองของมัน เนื่องจากธุรกรรมนี้เป็นธุรกรรมหลายคำสั่ง MarkLogic จึงสร้างการล็อกระดับเอกสารโดยดำเนินการอ่านเป็นครั้งแรก หากเราเรียกใช้โปรแกรมข้างต้นสำเร็จ เราจะได้รับคำสั่งซื้อที่มีบรรทัดรายการสามรายการ รวมทั้งการอัปเดตรายการสินค้าคงคลังเพื่อลดจำนวนรายการ เมื่อโปรแกรมทำงานอีกครั้ง เราสามารถบังคับข้อยกเว้น (แม้ว่าจะค่อนข้างหลอกลวง) สำหรับการทำธุรกรรมโดยอ้างว่าไม่มีสินค้าคงคลัง ดังนั้น เมื่อเรายกเลิกธุรกรรมทั้งหมดในกรณีนี้ เราได้รับข้อผิดพลาดต่อไปนี้
เมื่อเราอ่านออบเจกต์ด้วยความตั้งใจที่จะอัปเดต เราต้องแน่ใจว่าเธรดอื่นไม่เปลี่ยนสถานะก่อนที่เราจะสามารถทำการดำเนินการให้เสร็จสิ้นได้ การดำเนินการอ่านจะไม่ถูกล็อกโดยปริยายเมื่อถูกนำไปนอกบริบทของธุรกรรม เพื่อให้แน่ใจในเรื่องนี้ คุณต้องทำงานกับวัตถุ DocumentDescriptor เราเชื่อในการล็อกในแง่ดีเพราะเรามั่นใจว่าเมื่อเราทำการอัปเดตในภายหลัง ระบบปฏิบัติการของเราจะไม่เปลี่ยนแปลง ไม่ใช่เรื่องแปลกที่การละเมิดความโดดเดี่ยวจะเกิดขึ้นในอาคารนี้ อย่างไรก็ตามหากมีปัญหาควรตรวจสอบ MarkLogic จะติดตามเวอร์ชันที่อัปเดตและส่งอีเมลถึงเราหากเราเอาชนะเวอร์ชันเหล่านั้นได้ เป้าหมายของเซิร์ฟเวอร์ MarkLogic คือการมอบความสามารถอันทรงพลังในแบบที่นักพัฒนาสามารถใช้ได้โดยไม่ต้องสูญเสียคุณสมบัติใดๆ อย่าลังเลที่จะเรียกดูเว็บไซต์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อเหล่านี้และหัวข้ออื่นๆ โปรดดูหน้า GitHub สำหรับตัวอย่างธุรกรรมหลายรายการที่ใช้ในบทความนี้
ทำไม Mongodb ถึงเป็นฐานข้อมูลเอกสารที่ดีที่สุด
ฐานข้อมูลเอกสารเป็นทางเลือกที่ดีสำหรับแอปพลิเคชันที่เก็บข้อมูลจำนวนมาก ฐานข้อมูลเอกสารที่ได้รับความนิยมมากที่สุดในโลกคือ MongoDB
ที่เก็บคีย์-ค่ามีประโยชน์สำหรับแอปพลิเคชันที่ต้องการเก็บข้อมูลในรูปแบบข้อมูลอย่างง่าย ร้านค้าคีย์-ค่าเช่น Redis เป็นที่นิยมมากที่สุด
ฐานข้อมูลเชิงคอลัมน์เป็นตัวเลือกที่ยอดเยี่ยมหากคุณต้องการใช้ตารางในการจัดเก็บข้อมูล MySQL เป็นฐานข้อมูลเชิงคอลัมน์ที่ใช้กันอย่างแพร่หลายที่สุด
ข้อมูลสามารถเก็บไว้ในกราฟผ่านการใช้ฐานข้อมูลกราฟ เป็นฐานข้อมูลกราฟที่ได้รับความนิยมสูงสุดและเป็นหนึ่งในฐานข้อมูล NoSQL ที่ได้รับความนิยมสูงสุด
ธุรกรรม Mongobb
ใน MongoDB ธุรกรรมคือหน่วยงานเดียวที่ประกอบด้วยการดำเนินการอย่างน้อยหนึ่งรายการบนฐานข้อมูล ธุรกรรมมีประโยชน์ในการรับรองความสมบูรณ์ของข้อมูลและเพื่อให้แน่ใจว่าข้อมูลได้รับการประมวลผลตามลำดับที่คุณคาดหวัง
MongoDB ให้บริการธุรกรรมสองประเภท:
1. การดำเนินการเดี่ยว: เป็นประเภทธุรกรรมที่พบมากที่สุดและใช้เพื่ออัปเดต แทรก หรือลบเอกสารเดียว
2. ธุรกรรมหลายเอกสาร: ธุรกรรมเหล่านี้สามารถอัปเดต แทรก หรือลบเอกสารหลายฉบับ และมีประโยชน์ในการรับรองว่าข้อมูลได้รับการประมวลผลตามลำดับที่ระบุ
ในการเริ่มต้นธุรกรรม คุณใช้เมธอด db.collection.startTransaction() วิธีนี้ใช้พารามิเตอร์สองสามตัวที่ให้คุณระบุข้อกังวลในการอ่านและเขียนข้อกังวลสำหรับธุรกรรม ข้อกังวลเกี่ยวกับการอ่านระบุว่า MongoDB ควรอ่านข้อมูลสำหรับธุรกรรมอย่างไร และข้อกังวลเกี่ยวกับการเขียนระบุว่า MongoDB ควรเขียนข้อมูลสำหรับธุรกรรมอย่างไร
เมื่อคุณเริ่มธุรกรรมแล้ว คุณสามารถเรียกใช้การดำเนินการใดๆ ก็ตามที่คุณมักจะเรียกใช้บนฐานข้อมูล การดำเนินการทั้งหมดที่คุณดำเนินการภายในธุรกรรมจะเป็นส่วนหนึ่งของหน่วยงานเดียวกัน
ในการยืนยันธุรกรรม คุณใช้เมธอด db.collection.commitTransaction() วิธีนี้จะเขียนการเปลี่ยนแปลงทั้งหมดที่คุณทำในธุรกรรมไปยังฐานข้อมูล
หากคุณต้องการยกเลิกการทำธุรกรรม ให้ใช้เมธอด db.collection.abortTransaction() วิธีนี้จะย้อนกลับการเปลี่ยนแปลงทั้งหมดที่คุณทำในการทำธุรกรรม
คำว่า ทรานแซกชัน หมายถึงกลุ่มตรรกะของกระบวนการที่ประมวลผลการดำเนินการอย่างน้อยหนึ่งรายการในฐานข้อมูล เช่น การอ่านหรือเขียนเอกสารหลายฉบับ ธุรกรรมถูกใช้เพื่อสร้างการดำเนินการที่เป็นหนึ่งเดียวโดยการจัดกลุ่มเข้าด้วยกันและแยกหลายคำสั่ง อะตอมมิกของฐานข้อมูลและการแยกใช้เพื่อให้เป็นไปตามข้อกำหนดของกรด ใน MongoDB มี API สองตัวสำหรับการประมวลผลธุรกรรม นอกเหนือจากการเป็น API ตัวแรกแล้ว API หลักยังมีไวยากรณ์ที่คล้ายกับฐานข้อมูลเชิงสัมพันธ์ ตัวเลือกที่สองคือการใช้การประมวลผลธุรกรรมของ MongoDB โดยทั่วไป ธุรกรรมจะถูกเขียนและดำเนินการโดยใช้หนึ่งในวิธี API ที่กำหนดไว้ในโปรแกรมควบคุม MongoDB ที่เหมาะสมของภาษาแอปพลิเคชัน
การสร้างเซสชันใน MongoDB เป็นขั้นตอนแรกในการสร้างธุรกรรม เมธอด startTransaction() แบ่งออกเป็นสองส่วน: readConcern และ writeConcern ตัวเลือกเหล่านี้ทำให้แน่ใจว่าข้อมูลในสถานะส่วนใหญ่ที่คอมมิตจะถูกซิงโครไนซ์ตามเวลาจริง หากมีข้อผิดพลาด ธุรกรรมจะถูกยกเลิก โปรดดูรายชื่อที่แนบมาสำหรับข้อมูลเพิ่มเติม ในเรื่องนี้ เราสามารถจ้างผู้เขียนที่ทำงานอยู่ได้ ผู้เขียนได้รับการจัดการโดยเรา ในเซสชันนี้ เราจะส่งคืนผลลัพธ์ก่อนหน้าพร้อมกับการเพิ่มของเรา ดังนั้นให้โทรหา find() ทันที
คู่มือนี้กำหนดธุรกรรมรวมถึงกรณีการใช้งานที่ดีที่สุดสำหรับ MongoDB เราแนะนำขั้นตอนของเซสชันการทำธุรกรรมใน MongoDB ด้วยแนวคิดเช่นกัน หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ MongoDB และ Prisma เราได้สร้างคู่มือเริ่มต้นใช้งานตั้งแต่ต้นหรือคู่มือวิธีเพิ่มไปยังโครงการที่มีอยู่ การใช้ MongoDB สำหรับการทำธุรกรรมเกี่ยวข้องกับแนวทางปฏิบัติที่ดีที่สุดหลายประการ ข้อมูลการทำธุรกรรมได้รับการปกป้องจากสถานะฐานข้อมูลที่ไม่ถูกต้องโดย การทำธุรกรรมที่สอดคล้องกับ กรด ทันทีที่คุณเปิดธุรกรรม ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มประสิทธิภาพเพื่อให้ธุรกรรมทำงานต่อไปได้เป็นเวลา 60 วินาที จำนวนการดำเนินการไม่ควรเกิน 1,000 เอกสารในการทำธุรกรรม
การรับประกันธุรกรรมอะตอม ของ MongoDB ทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับแอปพลิเคชันที่ต้องการความสอดคล้องของข้อมูลและความสมบูรณ์ของข้อมูล นอกจากนี้ ธุรกรรมยังเป็นองค์ประกอบสำคัญของมาตรฐาน ACID ซึ่งจำเป็นสำหรับแอปพลิเคชันที่ต้องการการเข้าถึงข้อมูลอย่างต่อเนื่อง
พลังแห่ง Mongodb: ธุรกรรม
ธุรกรรมหลายหน้าสามารถดำเนินการได้โดยใช้ MongoDB ซึ่งเป็นฐานข้อมูล NoSQL ธุรกรรมสามารถใช้เพื่อให้แน่ใจว่าการอ่านและเขียนหลายรายการในเอกสารหลายชุดจากคอลเล็กชันเดียวหรือหลายชุดนั้นเป็นแบบปรมาณู นอกจากธุรกรรมแล้ว ยังสามารถใช้ธุรกรรมเหล่านี้เพื่อรับประกันความเป็นปรมาณูระหว่างการดำเนินการ คอลเล็กชัน ฐานข้อมูล เอกสาร และเศษต่างๆ ได้อีกด้วย ข้อเท็จจริงที่ว่า MongoDB ให้บริการ atomicity อยู่เสมอทำให้เป็น เครื่องมือในการทำธุรกรรมที่ยอดเยี่ยม MongoDB จัดการธุรกรรมในอัตรา 250 ล้านธุรกรรมต่อวินาที
ธุรกรรมฐานข้อมูล Oracle Nosql
ธุรกรรม Oracle NoSQL Database เป็นชุดของการอ่านและเขียนที่ดำเนินการเป็นหน่วยเดียว การเขียนทั้งหมดในธุรกรรมจะมองเห็นได้จากการอ่านทั้งหมดที่เกิดขึ้นหลังจากธุรกรรมถูกคอมมิต ธุรกรรมสามารถขยายคีย์และรายการข้อมูลได้หลายรายการ
ฐานข้อมูล Nosql: เมื่อใดควรใช้และเมื่อใดควรหลีกเลี่ยง
ในทางกลับกัน ฐานข้อมูล NoSQL อาจเป็นทางเลือกที่ดีกว่าสำหรับองค์กรที่ต้องการจัดเก็บข้อมูลที่ไม่มีโครงสร้างจำนวนมากหรือมีข้อมูลที่มีโครงสร้างน้อย ฐานข้อมูล NoSQL ไม่รองรับการทำธุรกรรมซึ่งแตกต่างจากฐานข้อมูลแบบดั้งเดิม นี่อาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับระบบที่ต้องการเก็บข้อมูลจำนวนมากและกำลังมองหาวิธีการจัดเก็บและจัดการที่สอดคล้องกัน
ฐานข้อมูล Nosql
ฐานข้อมูล Nosql เป็นฐานข้อมูลที่ไม่ได้ใช้โครงสร้างฐานข้อมูล SQL แบบดั้งเดิม แต่จะใช้โครงสร้างที่ยืดหยุ่นกว่าซึ่งสามารถปรับขนาดได้ง่ายกว่าเพื่อตอบสนองความต้องการของแอปพลิเคชันสมัยใหม่
ข้อมูลในฐานข้อมูล NoSQL ถูกเก็บไว้ในเอกสารมากกว่าตาราง ได้รับการออกแบบให้มีความยืดหยุ่น ปรับขยายได้ และสามารถตอบสนองความต้องการทางธุรกิจสมัยใหม่ได้ในเวลาไม่กี่นาที ฐานข้อมูลเอกสาร ที่เก็บคีย์-ค่า ฐานข้อมูลคอลัมน์กว้าง และฐานข้อมูลกราฟเป็นฐานข้อมูล NoSQL บางประเภทที่มีให้ใช้งาน องค์กร Global 2000 กำลังปรับใช้ฐานข้อมูล NoSQL อย่างรวดเร็วเพื่อขับเคลื่อนแอปพลิเคชันที่มีความสำคัญต่อภารกิจ แนวโน้มห้าประการที่กล่าวถึงข้างต้นเป็นหนึ่งในความท้าทายทางเทคนิคที่ยากที่สุดที่พบในฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่ เนื่องจากโมเดลข้อมูลคงที่ของฐานข้อมูลเชิงสัมพันธ์ จึงเป็นอุปสรรคสำคัญต่อการพัฒนาแบบอไจล์ NoSQL กำหนดโมเดลแอปพลิเคชันเป็นส่วนย่อยของโมเดลข้อมูล
การสร้างแบบจำลองข้อมูลด้วย NoSQL นั้นไม่คงที่ รูปแบบโดยพฤตินัยสำหรับการจัดเก็บข้อมูลในฐานข้อมูลเชิงเอกสารคือ JSON นอกจากนี้ยังช่วยลดการใช้เฟรมเวิร์ก ORM และปรับปรุงการพัฒนาแอปพลิเคชัน ภาษาเคียวรี N1QL ที่เพิ่งเปิดตัว (อ่านว่า นิเกิล) เป็นส่วนขยาย SQL และ JSON ที่ทรงพลังสำหรับ Couchbase Server 4.0 ผลิตภัณฑ์ไม่เพียงแต่รองรับคำสั่ง SELECT / FROM / WHERE มาตรฐานเท่านั้น แต่ยังรองรับการรวม (GROUP BY) การเรียงลำดับ (SORT BY) การรวม (LEFT OUTER / INNER) และอื่นๆ ฐานข้อมูล NoSQL มีความโดดเด่นด้วยประสิทธิภาพการดำเนินงานระดับสูงและสถาปัตยกรรมแบบขยายขนาด ความพร้อมใช้งานของบริการกลายเป็นปัญหาเนื่องจากลูกค้าโต้ตอบกับธุรกิจออนไลน์ผ่านเว็บและแอพมือถือมากขึ้น
ฐานข้อมูล NoSQL สามารถปรับใช้และกำหนดค่าได้อย่างง่ายดาย ออกแบบมาเพื่อการอ่าน เขียน และจัดเก็บโดยเฉพาะ พวกเขาทำงานในวงกว้างรวมถึงการจัดการและการตรวจสอบคลัสเตอร์ที่มีขนาดแตกต่างกัน ฐานข้อมูล NoSQL กระจายอยู่ในศูนย์ข้อมูลหลายแห่งและสามารถทำซ้ำได้โดยไม่จำเป็นต้องใช้ซอฟต์แวร์แยกต่างหาก นอกจากนี้ยังสามารถใช้เพื่อเปิดใช้งานการกู้คืนระบบทันทีผ่านเราเตอร์ฮาร์ดแวร์ ทำให้ไม่จำเป็นต้องใช้แอปพลิเคชันเพื่อรอฐานข้อมูลเพื่อตรวจหาปัญหาและดำเนินการกู้คืนเอง ด้วยความก้าวหน้าของฐานข้อมูล NoSQL คุณสามารถสร้างแอปพลิเคชันบนเว็บ มือถือ และ IoT ที่ทำงานบนหลายแพลตฟอร์มได้
ฐานข้อมูล NoSQL มีประโยชน์เนื่องจากความสามารถในการปรับขนาด การจำลองแบบ และความยืดหยุ่น แม้จะมีประสิทธิภาพสูง แต่ก็สามารถจัดการข้อมูลจำนวนมากได้โดยไม่สูญเสียประสิทธิภาพ นอกจากนี้ยังเหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการจัดเก็บข้อความ รูปภาพ และข้อมูลที่มีโครงสร้างในรูปแบบต่างๆ
ข้อดีของฐานข้อมูล Nosql
มีข้อดีหลายประการสำหรับฐานข้อมูล NoSQL ที่เหนือกว่าฐานข้อมูลเชิงสัมพันธ์แบบดั้งเดิม รวมถึงประสิทธิภาพที่เร็วขึ้นและความยืดหยุ่นที่มากขึ้น เป็นไปได้ที่จะจัดเก็บข้อมูลที่ยากต่อการจัดรูปแบบเชิงสัมพันธ์ เช่น การสตรีมวิดีโอหรือโพสต์บนโซเชียลมีเดีย นอกจากนี้ยังมีประสิทธิภาพมากกว่าเมื่อพูดถึงการสืบค้นข้อมูล เนื่องจากไม่ต้องการสคีมาและการแมปข้อมูลในระดับเดียวกับฐานข้อมูลเชิงสัมพันธ์
ธุรกรรมกรด
เมื่อพูดถึงการกำหนดลักษณะของการทำธุรกรรม ตัวย่อ ACID ถูกกำหนดโดยคุณสมบัติหลัก 4 ประการ ได้แก่ อะตอมมิก ความสม่ำเสมอ การแยกตัว และความทนทาน ธุรกรรมในฐานข้อมูลสามารถกำหนดเป็นหนึ่งเดียวกับลักษณะกรดเหล่านี้ และ ระบบธุรกรรม สามารถกำหนดเป็นหนึ่งเดียวกับลักษณะกรดเหล่านี้ที่ใช้กับการจัดเก็บข้อมูล
ชุดคุณสมบัติที่เรียกว่ากรด (Atomicity, Consistency, Isolation และ Durability) เป็นส่วนประกอบที่สำคัญของ ธุรกรรมฐานข้อมูล เนื่องจากเป็นชุดคุณสมบัติที่ควรรักษาไว้แม้ในกรณีที่เกิดข้อผิดพลาด ไฟดับ และอื่นๆ ธุรกรรมเป็นองค์ประกอบสำคัญของการเปลี่ยนแปลงของฐานข้อมูล เมื่อพัฒนาแอปพลิเคชันแบบกระจาย สิ่งสำคัญคือต้องเข้าใจการทำธุรกรรมของ ACID DBMS ใช้สองวิธีในการทำให้เป็นปรมาณู ก่อนที่จะใช้การเปลี่ยนแปลงใด ๆ ไฟล์บันทึกจะถูกเขียนไปยังเซิร์ฟเวอร์ ในทางตรงกันข้าม วิธีที่สองถือว่าฐานข้อมูลถูกแบ่งพาร์ติชันออกเป็นบล็อกความยาวคงที่ซึ่งเรียกว่าเพจ ในระหว่างการทำธุรกรรม จะมีสำเนาสองชุดของหน้าหนึ่งอยู่ – หน้าปัจจุบันและหน้าเงา
ธุรกรรมจะดำเนินการตามลำดับอนุกรมในคุณสมบัติการแยกเพื่อหลีกเลี่ยงความเสี่ยงของสถานะที่ไม่สอดคล้องกัน ลูกค้าถูกหลอกโดยระบบ DBMS ด้วยภาพลวงตาว่าการทำธุรกรรมมีการดำเนินการอย่างต่อเนื่อง ทำให้พวกเขาให้เหตุผลเกี่ยวกับสถานะเมื่อสิ้นสุดการทำธุรกรรม ลูกค้าอาจพบว่าการรอธุรกรรมที่มีระยะเวลานานนั้นง่ายกว่า เพราะบางรายการอาจใช้เวลานาน DBMS อนุญาตให้ธุรกรรมทำการแทรกระหว่างกันเฉพาะเมื่อมีการดำเนินการชุดของธุรกรรมในเวลาเดียวกัน ส่งผลให้มีการสร้างตารางเวลาโดยธุรกรรม การดำเนินการกับรายการข้อมูลเดียวกันจะดำเนินการโดยหลายธุรกรรม โดยหนึ่งในนั้นเป็นการดำเนินการเขียน ส่วนความเป็นปรมาณูจะอธิบายถึงวิธีการทั่วไปบางประการในการบรรลุความเป็นปรมาณูและความทนทาน
ความสำคัญของการปฏิบัติตามกรด
เพื่อให้ธุรกรรมฐานข้อมูลทำงานได้อย่างราบรื่นและเชื่อถือได้ ธุรกรรมเหล่านั้นจะต้องสำเร็จหรือล้มเหลวเสมอด้วยวิธีที่คาดเดาได้และเชื่อถือได้ กรดเป็นคำที่ใช้อธิบายคุณสมบัติหลักสี่ประการและสำคัญที่สุดของธุรกรรม: ความเป็นอะตอม ความสม่ำเสมอ การแยกตัว และความทนทาน การทำธุรกรรมที่ตรงตามข้อกำหนดเหล่านี้ถือว่าสอดคล้องกับกรด