ความสัมพันธ์ระหว่าง ACID และธุรกรรมฐานข้อมูลคืออะไร?
ACID ให้ธุรกรรมฐานข้อมูลหรือเป็นสิ่งเดียวกันหรือไม่?
ใครบางคนสามารถให้ความกระจ่างในหัวข้อนี้
ความสัมพันธ์ระหว่าง ACID และธุรกรรมฐานข้อมูลคืออะไร?
ACID ให้ธุรกรรมฐานข้อมูลหรือเป็นสิ่งเดียวกันหรือไม่?
ใครบางคนสามารถให้ความกระจ่างในหัวข้อนี้
คำตอบ:
ACIDเป็นชุดของคุณสมบัติที่คุณต้องการใช้เมื่อแก้ไขฐานข้อมูล
ธุรกรรมคือชุดของการเปลี่ยนแปลงที่เกี่ยวข้องซึ่งใช้เพื่อให้ได้คุณสมบัติ ACID บางอย่าง ธุรกรรมเป็นเครื่องมือในการบรรลุคุณสมบัติของกรด
Atomicity หมายความว่าคุณสามารถรับประกันได้ว่าการทำธุรกรรมทั้งหมดเกิดขึ้นหรือไม่มีเลย คุณสามารถทำการดำเนินการที่ซับซ้อนเป็นหนึ่งหน่วยเดียวทั้งหมดหรือไม่มีอะไรเลยและความล้มเหลวไฟฟ้าขัดข้องข้อผิดพลาดหรือสิ่งอื่นใดจะไม่อนุญาตให้คุณอยู่ในสถานะที่มีการเปลี่ยนแปลงที่เกี่ยวข้องเกิดขึ้นเพียงบางส่วน
ความสอดคล้องหมายความว่าคุณรับประกันได้ว่าข้อมูลของคุณจะสอดคล้องกัน; ข้อ จำกัด ที่คุณมีกับข้อมูลที่เกี่ยวข้องจะไม่ถูกละเมิด
การแยกหมายความว่าธุรกรรมหนึ่งไม่สามารถอ่านข้อมูลจากธุรกรรมอื่นที่ยังไม่เสร็จสมบูรณ์ หากธุรกรรมสองรายการกำลังดำเนินการพร้อมกันแต่ละรายการจะมองเห็นโลกราวกับว่ากำลังดำเนินการตามลำดับและหากจำเป็นต้องอ่านข้อมูลที่เขียนโดยอีกรายการหนึ่งจะต้องรอจนกว่ารายการนั้นจะเสร็จสิ้น
ความทนทานหมายความว่าเมื่อการทำธุรกรรมเสร็จสิ้นจะรับประกันได้ว่าการเปลี่ยนแปลงทั้งหมดได้รับการบันทึกไว้ในสื่อที่ทนทาน (เช่นฮาร์ดดิสก์) และความจริงที่ว่าการทำธุรกรรมนั้นเสร็จสิ้นแล้วจะถูกบันทึกเช่นเดียวกัน
ดังนั้นธุรกรรมจึงเป็นกลไกสำหรับรับประกันคุณสมบัติเหล่านี้ เป็นวิธีการจัดกลุ่มการดำเนินการที่เกี่ยวข้องด้วยกันโดยรวมกลุ่มของการดำเนินการสามารถเป็นอะตอมมิกสร้างผลลัพธ์ที่สอดคล้องกันถูกแยกออกจากการดำเนินการอื่นและถูกบันทึกไว้อย่างคงทน
กรดเป็นคุณสมบัติที่ต้องการของโปรแกรมประมวลผลธุรกรรมใด ๆ
DBMS คือ (ถ้าดีมาก) เป็นเครื่องมือประมวลผลธุรกรรมชนิดหนึ่งที่มีการเปิดเผยโดยทั่วไปจะมีขนาดใหญ่มาก แต่ไม่ได้ทั้งหมดคุณสมบัติเหล่านั้น
แต่มีเอ็นจิ้นอื่นที่สามารถเปิดเผยคุณสมบัติเหล่านั้นได้ ชนิดของซอฟต์แวร์ที่เคยถูกเรียกว่า "จอมอนิเตอร์ TP" เป็นกรณี ๆ หนึ่ง (เทียบเท่าในปัจจุบันส่วนใหญ่เป็นเว็บเซิร์ฟเวอร์)
จอภาพ TP ดังกล่าวสามารถเข้าถึงทรัพยากรอื่น ๆ นอกเหนือจาก DBMS (เช่นเครื่องพิมพ์) และยังคงรับประกันกรดถึงผู้ใช้ ตัวอย่างของ ACID ที่อาจหมายถึงเมื่อเครื่องพิมพ์เกี่ยวข้องกับธุรกรรม:
ฉันแก้ไขตัวอย่างเครื่องพิมพ์เล็กน้อยเพื่อให้อธิบายได้ง่ายขึ้น
เอกสาร 1 ฉบับที่มีเนื้อหา 2 หน้าถูกส่งไปยังเครื่องพิมพ์
ธุรกรรม - ส่งเอกสารไปยังเครื่องพิมพ์
หวังว่าสิ่งนี้จะช่วยให้ใครบางคนได้รับแนวคิดของกรด
ความสัมพันธ์ระหว่าง ACID และธุรกรรมฐานข้อมูลคืออะไร?
ในฐานข้อมูลเชิงสัมพันธ์ทุกคำสั่ง SQL จะต้องดำเนินการในขอบเขตของการทำธุรกรรม
โดยไม่ต้องกำหนดขอบเขตของธุรกรรมอย่างชัดเจนฐานข้อมูลจะใช้ธุรกรรมโดยนัยซึ่งล้อมรอบคำสั่งแต่ละรายการ
ธุรกรรมโดยนัยเริ่มต้นก่อนที่คำสั่งจะถูกดำเนินการและสิ้นสุด (กระทำหรือย้อนกลับ) หลังจากดำเนินการคำสั่ง โหมดธุรกรรมโดยนัยเป็นที่รู้จักกันทั่วไปว่าเป็น Autocommit
ตามที่อธิบายไว้ในบทความนี้ธุรกรรมคือชุดของการดำเนินการอ่าน / เขียนที่ประสบความสำเร็จเฉพาะในกรณีที่การดำเนินการทั้งหมดที่มีอยู่ประสบความสำเร็จ
โดยเนื้อแท้การทำธุรกรรมมีลักษณะสี่คุณสมบัติ (ปกติเรียกว่ากรด):
ACID ให้ธุรกรรมฐานข้อมูลหรือเป็นสิ่งเดียวกันหรือไม่?
สำหรับระบบฐานข้อมูลเชิงสัมพันธ์สิ่งนี้เป็นจริงเพราะ SQL Standard ระบุว่าธุรกรรมควรให้การรับประกัน ACID:
Atomicity นำการปฏิบัติงานของแต่ละบุคคลและเปลี่ยนมันให้กลายเป็นหน่วยงานทั้งหมดหรือไม่ทำอะไรเลยหากประสบความสำเร็จก็ต่อเมื่อการดำเนินการที่บรรจุอยู่ทั้งหมดประสบความสำเร็จ
ทรานแซคชันอาจสรุปการเปลี่ยนแปลงสถานะ (เว้นแต่จะเป็นการอ่านอย่างเดียว) การทำธุรกรรมจะต้องออกจากระบบในสถานะที่สอดคล้องกันเสมอไม่ว่าจะมีการทำธุรกรรมหลายรายการพร้อมกันในเวลาใดก็ตาม
ความสอดคล้องหมายความว่ามีการบังคับใช้ข้อ จำกัด สำหรับทุกธุรกรรมที่ตกลงกันไว้ นั่นหมายความว่ากุญแจทุกประเภทข้อมูลการตรวจสอบและการเรียกใช้จะประสบความสำเร็จและไม่มีการละเมิดข้อ จำกัด ใด ๆ
ธุรกรรมต้องการกลไกการควบคุมพร้อมกันและพวกเขารับประกันความถูกต้องแม้ในขณะที่ถูก interleaved การแยกทำให้เราได้รับประโยชน์จากการซ่อนการเปลี่ยนแปลงสถานะที่ปราศจากข้อผูกมัดจากโลกภายนอกเนื่องจากการทำธุรกรรมที่ล้มเหลวไม่ควรทำให้สถานะของระบบเสียหาย การแยกทำได้ด้วยการควบคุมภาวะพร้อมกันโดยใช้กลไกการล็อคในแง่ร้ายหรือมองโลกในแง่ดี
ธุรกรรมที่สำเร็จจะต้องเปลี่ยนสถานะของระบบอย่างถาวรและก่อนที่จะสิ้นสุดการเปลี่ยนแปลงสถานะจะถูกบันทึกไว้ในบันทึกธุรกรรมที่ยังคงอยู่ หากระบบของเราได้รับผลกระทบจากความผิดพลาดของระบบหรือไฟฟ้าขัดข้องธุรกรรมที่ยังไม่เสร็จทั้งหมดอาจถูกเล่นซ้ำ
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความทนทานและทำซ้ำเข้าสู่ระบบตรวจสอบบทความนี้
คุณสมบัติของกรดเป็นแนวคิดที่เก่าแก่และสำคัญของทฤษฎีฐานข้อมูล ฉันรู้ว่าคุณสามารถค้นหาโพสต์จำนวนมากในหัวข้อนี้ แต่ฉันยังต้องการที่จะเริ่มแบ่งปันคำตอบในเรื่องนี้เพราะมันเป็นหัวข้อที่สำคัญมากของ RDBMS
ระบบฐานข้อมูลเล่นกับการทำธุรกรรมที่แตกต่างกันมากมายซึ่งการทำธุรกรรมทั้งหมดมีคุณสมบัติบางอย่าง คุณสมบัตินี้รู้จักคุณสมบัติกรด คุณสมบัติกรดใช้ผู้รับสิทธิ์สำหรับธุรกรรมฐานข้อมูลทั้งหมดเพื่อทำงานทั้งหมดให้สำเร็จ
Atomicity: ไม่ว่าทั้งหมดหรือไม่มีอะไรเลย
ความสอดคล้อง: สร้างบันทึกที่สอดคล้องกันในแง่ของการตรวจสอบกฎและข้อ จำกัด ของการทำธุรกรรมทั้งหมด
การแยก: ตรวจสอบให้แน่ใจว่าธุรกรรมสองรายการไม่รู้จักกัน
ความทนทาน: ข้อมูลที่เก็บไว้จะถูกเก็บไว้ตลอดไป การอ้างอิงที่นำมาจากบทความนี้:
ในการอ้างถึงWikipedia :
กรด (atomicity, ความสอดคล้อง, การแยก, ความทนทาน) เป็นชุดของคุณสมบัติที่รับประกันการทำธุรกรรมฐานข้อมูลจะถูกประมวลผลได้อย่างน่าเชื่อถือ
DBMS ที่รองรับการทำธุรกรรมจะพยายามสนับสนุนคุณสมบัติเหล่านี้ทั้งหมด - DBMS เชิงพาณิชย์ใด ๆ (รวมถึง DBMS แบบโอเพ่นซอร์สหลายรายการ) ให้การสนับสนุน 'กรด' เต็มรูปแบบ - แม้ว่ามันจะเป็นไปได้บ่อยครั้ง (เช่นด้วยระดับการแยกใน MSSQL) ลดกรด - ทำให้สูญเสียการรับประกันของพฤติกรรมการทำธุรกรรมอย่างเต็มที่
[สีเทา] แนะนำคุณสมบัติ ACD สำหรับธุรกรรมในปี 1981 ในปี 1983 [Haerder] ได้เพิ่มคุณสมบัติการแยก ในความเห็นของฉันคุณสมบัติของ ACD จะมีชุดคุณสมบัติที่มีประโยชน์มากขึ้นเพื่อพูดคุย การตีความหนึ่งของ Atomicity (ว่าการทำธุรกรรมควรเป็น atomic ตามที่เห็นจากลูกค้าเมื่อใดก็ได้) จะหมายถึงคุณสมบัติการแยก คุณสมบัติ "การแยก" มีประโยชน์เมื่อไม่มีการแยกธุรกรรม เมื่อคุณสมบัติการแยกเป็นที่ผ่อนคลาย ใน ANSI SQL พูด: ถ้าระดับการแยกนั้นอ่อนแอกว่า SERIALIZABLE แต่เมื่อระดับการแยกเป็นแบบแยกกันได้คุณสมบัติการแยกนั้นไม่น่าสนใจ
ฉันได้เขียนเกี่ยวกับเรื่องนี้ในบล็อกโพสต์: "กรดไม่สมเหตุสมผล"
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
[สีเทา] แนวคิดการทำธุรกรรม, Jim Gray, 1981 http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf
[Haerder] หลักการของการกู้คืนฐานข้อมูลธุรกรรม Haerder และ Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf
การทำธุรกรรมสามารถกำหนดเป็นชุดของงานที่ถือเป็นหน่วยประมวลผลขั้นต่ำ หน่วยการประมวลผลขั้นต่ำแต่ละหน่วยไม่สามารถแบ่งได้เพิ่มเติม
ธุรกรรมทั้งหมดจะต้องมีสี่คุณสมบัติที่รู้จักกันทั่วไปว่าเป็นคุณสมบัติของกรด IE คือกลุ่มของคุณสมบัติของธุรกรรมใด ๆ