ACID และธุรกรรมฐานข้อมูลทำงานอย่างไร


161

ความสัมพันธ์ระหว่าง ACID และธุรกรรมฐานข้อมูลคืออะไร?

ACID ให้ธุรกรรมฐานข้อมูลหรือเป็นสิ่งเดียวกันหรือไม่?

ใครบางคนสามารถให้ความกระจ่างในหัวข้อนี้

คำตอบ:


320

ACIDเป็นชุดของคุณสมบัติที่คุณต้องการใช้เมื่อแก้ไขฐานข้อมูล

  • อะตอมมิกซิตี้
  • ความมั่นคง
  • การแยกตัว
  • ความทนทาน

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

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

ความสอดคล้องหมายความว่าคุณรับประกันได้ว่าข้อมูลของคุณจะสอดคล้องกัน; ข้อ จำกัด ที่คุณมีกับข้อมูลที่เกี่ยวข้องจะไม่ถูกละเมิด

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

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

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


6
คุณพูดว่า "ความสอดคล้องหมายความว่าคุณรับประกันได้ว่าข้อมูลของคุณจะสอดคล้องกันไม่มีข้อ จำกัด ใด ๆ ที่คุณมีต่อข้อมูลที่เกี่ยวข้องจะถูกละเมิด" หากตามข้อ จำกัด คุณหมายถึงสิ่งที่กำหนดไว้ในฐานข้อมูล (เช่นตรวจสอบข้อ จำกัด ) การจัดการธุรกรรมเกี่ยวข้องกับการป้องกันการละเมิดหรือไม่ พวกเขาไม่ได้บังคับอยู่ตลอดเลยเหรอ? สำหรับฉันแล้วดูเหมือนว่า C ในกรดจะต้องมีความหมายอื่น
Marc Rochkind

20
@MarcRochkind ธุรกรรมอนุญาตให้คุณใช้การตรวจสอบความสอดคล้องแม้ว่าการดำเนินการส่วนบุคคลภายในธุรกรรมจะละเมิดข้อ จำกัด ที่สอดคล้องกัน ตัวอย่างเช่นหากคุณกำลังอัปเดตระบบการทำบัญชีสองครั้งคุณอาจต้องหักเงินจากบัญชีหลายบัญชีและเครดิตเป็นหลายบัญชีในเวลาเดียวกัน หากไม่มีธุรกรรมคุณจะตรวจสอบข้อ จำกัด หลังจากทุกคำสั่งและจะล้มเหลวเนื่องจากคำสั่งแต่ละรายการไม่คงเส้นคงวา ด้วยธุรกรรมแม้ว่าแต่ละงบจะไม่คงเส้นคงวา แต่ธุรกรรมโดยรวมก็มี
Brian Campbell

1
" และหากจำเป็นต้องอ่านข้อมูลที่เขียนโดยคนอื่นมันจะต้องรอจนกว่าคนอื่นจะเสร็จสิ้น " - ไม่เป็นความจริงทั้งหมด ธุรกรรมครั้งแรกสามารถ (และจะ) อ่านข้อมูลนั้นและจะเห็นสถานะเหมือนเดิมก่อนที่ธุรกรรมครั้งที่สองจะเริ่มขึ้น
a_horse_with_no_name

1
@BrianCampbell 1) ความสอดคล้องเป็นทั้ง "ข้อ จำกัด การตรวจสอบ" เช่น UNIQUE คีย์ต่างประเทศตลอดจนสถานะที่ถูกต้อง (ตามตรรกะทางธุรกิจ / ความต้องการของแอปพลิเคชัน) ในตอนท้ายของการทำธุรกรรมหรือไม่ 2) Atomicity และหรือ Isolation ไม่ได้สร้างความมั่นคงอย่างเดียวหรือไม่? เราควรพูดถึงความสอดคล้องอย่างชัดเจนว่าเป็นคุณสมบัติที่ต้องการหรือไม่
user104309

1
@a_horse_with_no_name ที่คุณกำลังพูดถึง OCC (การควบคุมภาวะพร้อมกันในแง่ดี) v / s PCC (ในแง่ร้าย) ทั้งสองสามารถนำมาใช้ในระบบฐานข้อมูลที่สอดคล้องกับกรดขึ้นอยู่กับว่าคุณกำลังจะไปสำหรับความสอดคล้องหรือความพร้อมสูง
Siddhartha

37

กรดเป็นคุณสมบัติที่ต้องการของโปรแกรมประมวลผลธุรกรรมใด ๆ

DBMS คือ (ถ้าดีมาก) เป็นเครื่องมือประมวลผลธุรกรรมชนิดหนึ่งที่มีการเปิดเผยโดยทั่วไปจะมีขนาดใหญ่มาก แต่ไม่ได้ทั้งหมดคุณสมบัติเหล่านั้น

แต่มีเอ็นจิ้นอื่นที่สามารถเปิดเผยคุณสมบัติเหล่านั้นได้ ชนิดของซอฟต์แวร์ที่เคยถูกเรียกว่า "จอมอนิเตอร์ TP" เป็นกรณี ๆ หนึ่ง (เทียบเท่าในปัจจุบันส่วนใหญ่เป็นเว็บเซิร์ฟเวอร์)

จอภาพ TP ดังกล่าวสามารถเข้าถึงทรัพยากรอื่น ๆ นอกเหนือจาก DBMS (เช่นเครื่องพิมพ์) และยังคงรับประกันกรดถึงผู้ใช้ ตัวอย่างของ ACID ที่อาจหมายถึงเมื่อเครื่องพิมพ์เกี่ยวข้องกับธุรกรรม:

  • Atomicity: เอกสารทั้งหมดถูกพิมพ์ออกมาหรือไม่มีอะไรเลย
  • ความสอดคล้อง: เมื่อสิ้นสุดการทำธุรกรรมฟีดกระดาษจะอยู่ที่ตำแหน่งบนสุดของหน้า
  • การแยก: ไม่มีเอกสารสองฉบับปะปนกันในขณะที่พิมพ์
  • ความทนทาน: เครื่องพิมพ์สามารถรับประกันได้ว่าไม่ใช่ "การพิมพ์" ด้วยตลับหมึกเปล่า

3
ตัวอย่างเครื่องพิมพ์ที่กระชับ
ทะเลสาบ

2
ตัวอย่างที่ดี ฉันไม่เข้าใจส่วน "ความสอดคล้อง" ในใจของฉันตัวอย่างที่ดีคือ "เครื่องพิมพ์ไม่รับกระดาษที่มีขนาดใหญ่กว่า 10 นิ้ว"
skeller88

แก้ไข - "กระดาษที่กว้างกว่า 10 นิ้ว"
skeller88

1
ฉันยอมรับว่ามันยืดออกไปหน่อย แต่มันก็ยากที่จะหาตัวอย่างที่ดีกว่าเพราะ "ความสอดคล้อง" เป็นเรื่องเกี่ยวกับข้อมูลและเครื่องพิมพ์ไม่ใช่อุปกรณ์ข้อมูล
Erwin Smout

1
หากเครื่องพิมพ์มีจำนวนเอกสารที่สูงกว่าจำนวนกระดาษที่เป็นที่รู้จักกันในปัจจุบันว่าเป็นแหล่งจ่ายกระดาษ คุณเห็นว่าเป็นปัญหากับหลายคนที่แสดงความคิดเห็นที่นี่ คุณพูดถึง "เครื่องพิมพ์" และพวกเขาเห็นเพียงว่าอุปกรณ์สตรีมมิ่งพอร์ตอนุกรมที่พวกเขามีอยู่ที่โต๊ะทำงานไม่ใช่อุปกรณ์ระดับมืออาชีพคุณภาพสูงที่จะเติมเต็มห้องนั่งเล่นทั้งหมดของพวกเขา
เออร์วิน Smout

21

ฉันแก้ไขตัวอย่างเครื่องพิมพ์เล็กน้อยเพื่อให้อธิบายได้ง่ายขึ้น

เอกสาร 1 ฉบับที่มีเนื้อหา 2 หน้าถูกส่งไปยังเครื่องพิมพ์

ธุรกรรม - ส่งเอกสารไปยังเครื่องพิมพ์

  • atomicity - เครื่องพิมพ์พิมพ์เอกสาร 2 หน้าหรือไม่มีเลย
  • ความสอดคล้อง - เครื่องพิมพ์พิมพ์ครึ่งหน้าและหน้าค้าง เครื่องพิมพ์รีสตาร์ทเองและพิมพ์ 2 หน้าพร้อมเนื้อหาทั้งหมด
  • แยก - ในขณะที่มีการพิมพ์ลึกหนาเกินไปกำลังดำเนินการอยู่ - เครื่องพิมพ์พิมพ์เนื้อหาที่ถูกต้องของเอกสาร
  • ความทนทาน - ในขณะพิมพ์มีเครื่องพิมพ์ตัดไฟอีกครั้งพิมพ์เอกสารโดยไม่มีข้อผิดพลาด

หวังว่าสิ่งนี้จะช่วยให้ใครบางคนได้รับแนวคิดของกรด


ฉันไม่แน่ใจว่า "ในขณะที่มีงานพิมพ์จำนวนมากเกินไปกำลังดำเนินอยู่" หมายความว่า - เป็น "หลายรายการ" แทนที่จะเป็น "มากเกินไป" หรือไม่
icc97

17

ความสัมพันธ์ระหว่าง ACID และธุรกรรมฐานข้อมูลคืออะไร?

ในฐานข้อมูลเชิงสัมพันธ์ทุกคำสั่ง SQL จะต้องดำเนินการในขอบเขตของการทำธุรกรรม

โดยไม่ต้องกำหนดขอบเขตของธุรกรรมอย่างชัดเจนฐานข้อมูลจะใช้ธุรกรรมโดยนัยซึ่งล้อมรอบคำสั่งแต่ละรายการ

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

ตามที่อธิบายไว้ในบทความนี้ธุรกรรมคือชุดของการดำเนินการอ่าน / เขียนที่ประสบความสำเร็จเฉพาะในกรณีที่การดำเนินการทั้งหมดที่มีอยู่ประสบความสำเร็จ

อะตอมมิกซิตี้

โดยเนื้อแท้การทำธุรกรรมมีลักษณะสี่คุณสมบัติ (ปกติเรียกว่ากรด):

  • อะตอมมิกซิตี้
  • ความมั่นคง
  • การแยกตัว
  • ความทนทาน

ACID ให้ธุรกรรมฐานข้อมูลหรือเป็นสิ่งเดียวกันหรือไม่?

สำหรับระบบฐานข้อมูลเชิงสัมพันธ์สิ่งนี้เป็นจริงเพราะ SQL Standard ระบุว่าธุรกรรมควรให้การรับประกัน ACID:

อะตอมมิกซิตี้

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

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

ความมั่นคง

ความสอดคล้องหมายความว่ามีการบังคับใช้ข้อ จำกัด สำหรับทุกธุรกรรมที่ตกลงกันไว้ นั่นหมายความว่ากุญแจทุกประเภทข้อมูลการตรวจสอบและการเรียกใช้จะประสบความสำเร็จและไม่มีการละเมิดข้อ จำกัด ใด ๆ

การแยกตัว

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

ความทนทาน

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

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความทนทานและทำซ้ำเข้าสู่ระบบตรวจสอบบทความนี้


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

1
ความสอดคล้องใน ACID หมายถึงข้อ จำกัด ด้านความสมบูรณ์ของฐานข้อมูล: ข้อ จำกัด PK, FK, UNIQUE กรดมีความสำคัญ แต่แอปพลิเคชันของคุณอาจต้องการมากกว่านั้นเช่นการป้องกันการอัปเดตที่หายไปในการสนทนาที่ยาวนานซึ่งต้องใช้การล็อกในแง่ดีระดับแอปพลิเคชัน
Vlad Mihalcea

ขอฉันดูหน่อย. แต่ก่อนหน้านั้นฉันต้องการคำอธิบายพื้นฐาน ความคิดเห็นของ Brain Campbell ในคำตอบที่ได้รับการยอมรับ "ด้วยธุรกรรมแม้ว่าแต่ละงบจะไม่คงเส้นคงวา แต่ธุรกรรมโดยรวมก็เป็นเช่นนั้น" มันเป็นไปได้ยังไงกัน ? และเดบิตและเครดิตหลายรายการเกี่ยวข้องกับความสอดคล้องกันอย่างไร
user104309

ลองอ่านบทการทำธุรกรรมในหนังสือ Java Persistence ประสิทธิภาพสูงของฉันสำหรับคำตอบโดยละเอียดสำหรับคำถามเหล่านั้นทั้งหมด
Vlad Mihalcea

12

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

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

Atomicity: ไม่ว่าทั้งหมดหรือไม่มีอะไรเลย

ความสอดคล้อง: สร้างบันทึกที่สอดคล้องกันในแง่ของการตรวจสอบกฎและข้อ จำกัด ของการทำธุรกรรมทั้งหมด

การแยก: ตรวจสอบให้แน่ใจว่าธุรกรรมสองรายการไม่รู้จักกัน

ความทนทาน: ข้อมูลที่เก็บไว้จะถูกเก็บไว้ตลอดไป การอ้างอิงที่นำมาจากบทความนี้:


5

ในการอ้างถึงWikipedia :

กรด (atomicity, ความสอดคล้อง, การแยก, ความทนทาน) เป็นชุดของคุณสมบัติที่รับประกันการทำธุรกรรมฐานข้อมูลจะถูกประมวลผลได้อย่างน่าเชื่อถือ

DBMS ที่รองรับการทำธุรกรรมจะพยายามสนับสนุนคุณสมบัติเหล่านี้ทั้งหมด - DBMS เชิงพาณิชย์ใด ๆ (รวมถึง DBMS แบบโอเพ่นซอร์สหลายรายการ) ให้การสนับสนุน 'กรด' เต็มรูปแบบ - แม้ว่ามันจะเป็นไปได้บ่อยครั้ง (เช่นด้วยระดับการแยกใน MSSQL) ลดกรด - ทำให้สูญเสียการรับประกันของพฤติกรรมการทำธุรกรรมอย่างเต็มที่


3

[สีเทา] แนะนำคุณสมบัติ 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


1

การทำธุรกรรมสามารถกำหนดเป็นชุดของงานที่ถือเป็นหน่วยประมวลผลขั้นต่ำ หน่วยการประมวลผลขั้นต่ำแต่ละหน่วยไม่สามารถแบ่งได้เพิ่มเติม

ธุรกรรมทั้งหมดจะต้องมีสี่คุณสมบัติที่รู้จักกันทั่วไปว่าเป็นคุณสมบัติของกรด IE คือกลุ่มของคุณสมบัติของธุรกรรมใด ๆ

  • ปรมาณู:
  • ความมั่นคง
  • การแยกตัว
  • ความทนทาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.