การจัดการธุรกรรมในระบบจัดการฐานข้อมูล: สถานะ ประเภท และ ACID
⚡ สรุปอย่างชาญฉลาด
การจัดการธุรกรรมฐานข้อมูล (Database Transaction Management) จะมองการดำเนินการฐานข้อมูลหนึ่งรายการหรือมากกว่านั้นเป็นหน่วยตรรกะเดียวที่เปลี่ยนสถานะความสอดคล้องของฐานข้อมูลจากสถานะหนึ่งไปยังอีกสถานะหนึ่ง โดยอาศัยคุณสมบัติ ACID สถานะธุรกรรมที่กำหนดไว้ และตารางเวลาเพื่อให้การเข้าถึงพร้อมกันเป็นไปอย่างถูกต้อง

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

ข้อเท็จจริงเกี่ยวกับการทำธุรกรรมในฐานข้อมูล
- ธุรกรรมคือหน่วยโปรแกรมที่การดำเนินการอาจเปลี่ยนแปลงเนื้อหาของฐานข้อมูลหรือไม่ก็ได้
- แนวคิดการทำธุรกรรมใน DBMS ดำเนินการเป็นหน่วยเดียว
- หากการดำเนินการฐานข้อมูลไม่ได้อัปเดตฐานข้อมูล แต่ดึงข้อมูลเท่านั้น ธุรกรรมประเภทนี้เรียกว่าธุรกรรมแบบอ่านอย่างเดียว
- การทำธุรกรรมที่สำเร็จสามารถเปลี่ยนสถานะความสอดคล้องของฐานข้อมูลจากสถานะหนึ่งไปยังอีกสถานะหนึ่งได้
- ธุรกรรมของระบบจัดการฐานข้อมูล (DBMS) ต้องเป็นอะตอมิก สอดคล้องกัน แยกจากกัน และคงทนถาวร
- หากฐานข้อมูลอยู่ในสถานะไม่สอดคล้องกันก่อนธุรกรรม ฐานข้อมูลจะยังคงอยู่ในสถานะไม่สอดคล้องกันหลังธุรกรรม
เหตุใดจึงจำเป็นต้องมีการทำงานพร้อมกันในธุรกรรม?
ฐานข้อมูลเป็นทรัพยากรที่ใช้ร่วมกัน มีผู้ใช้และกระบวนการจำนวนมากใช้งานพร้อมกัน ตัวอย่างเช่น ระบบธนาคาร ระบบจองตั๋วรถไฟและเครื่องบิน ระบบตรวจสอบตลาดหุ้น และระบบสินค้าคงคลังและการชำระเงินในซูเปอร์มาร์เก็ต
การไม่จัดการการเข้าถึงพร้อมกันอาจทำให้เกิดปัญหาเช่น:
- ฮาร์ดแวร์ขัดข้องและระบบล่ม
- การทำธุรกรรมเดียวกันพร้อมกัน การหยุดชะงักหรือประสิทธิภาพการทำงานช้า
การควบคุมการเข้าถึงร่วมกันนี้เป็นหน้าที่ของ การควบคุมภาวะพร้อมกันซึ่งใช้การล็อกและการประทับเวลาเพื่อสลับธุรกรรมอย่างปลอดภัย ก่อนหน้านั้น การทราบสถานะต่างๆ ที่ธุรกรรมผ่านไปนั้นจะเป็นประโยชน์
สถานะของการทำธุรกรรม
สถานะต่างๆ ของแนวคิดธุรกรรมใน DBMS มีดังต่อไปนี้:
| สถานะ | Descriptไอออน |
|---|---|
| สถานะใช้งาน | ธุรกรรมจะเข้าสู่สถานะใช้งานเมื่อกระบวนการดำเนินการเริ่มต้นขึ้น ในระหว่างสถานะนี้ สามารถดำเนินการอ่านหรือเขียนข้อมูลได้ |
| มุ่งมั่นบางส่วน | ธุรกรรมจะเปลี่ยนสถานะเป็น "ยืนยันบางส่วน" หลังจากธุรกรรมสิ้นสุดลง |
| รัฐที่มุ่งมั่น | เมื่อธุรกรรมเข้าสู่สถานะ "ยืนยันแล้ว" หมายความว่าธุรกรรมนั้นได้ดำเนินการเสร็จสมบูรณ์แล้ว และการเปลี่ยนแปลงทั้งหมดจะถูกบันทึกไปยังฐานข้อมูลอย่างถาวร |
| รัฐล้มเหลว | ธุรกรรมจะถือว่าล้มเหลวหากการตรวจสอบข้อใดข้อหนึ่งล้มเหลว หรือหากธุรกรรมถูกยกเลิกในขณะที่อยู่ในสถานะกำลังทำงาน |
| รัฐที่สิ้นสุด | สถานะของธุรกรรมจะเปลี่ยนเป็นสถานะสิ้นสุดเมื่อธุรกรรมนั้นออกจากระบบและไม่สามารถเริ่มต้นใหม่ได้ |
เรามาศึกษาเรื่องนี้กันเถอะ แผนภาพการเปลี่ยนสถานะ ที่เน้นย้ำถึงการเคลื่อนย้ายธุรกรรมระหว่างรัฐต่างๆ เหล่านี้
- เมื่อธุรกรรมเริ่มดำเนินการแล้ว ธุรกรรมนั้นจะอยู่ในสถานะพร้อมใช้งาน และสามารถออกคำสั่งอ่านหรือเขียนได้
- เมื่อการดำเนินการอ่านและเขียนเสร็จสมบูรณ์ ธุรกรรมจะเข้าสู่สถานะยืนยันบางส่วน (partially committed)
- ต่อไป โปรโตคอลการกู้คืนบางอย่างจำเป็นต้องตรวจสอบให้แน่ใจว่าความล้มเหลวของระบบจะไม่ส่งผลให้ไม่สามารถบันทึกการเปลี่ยนแปลงของธุรกรรมได้อย่างถาวร หากการตรวจสอบนี้สำเร็จ ธุรกรรมจะได้รับการยืนยันและเข้าสู่สถานะที่ยืนยันแล้ว
- หากการตรวจสอบล้มเหลว ธุรกรรมจะเปลี่ยนสถานะเป็นล้มเหลว
- หากธุรกรรมถูกยกเลิกขณะที่อยู่ในสถานะใช้งาน ธุรกรรมจะเปลี่ยนเป็นสถานะล้มเหลว จำเป็นต้องย้อนกลับธุรกรรมเพื่อยกเลิกผลกระทบของการเขียนข้อมูลลงในฐานข้อมูล
- สถานะที่สิ้นสุดหมายถึงธุรกรรมที่ออกจากระบบ
คุณสมบัติของกรดคืออะไร?
คุณสมบัติของกรด ใช้เพื่อรักษาความสมบูรณ์ของฐานข้อมูลในระหว่างการประมวลผลธุรกรรม ACID ใน DBMS ย่อมาจาก... Aความโหดเหี้ยม, Cความมั่นคง, Iปลอบใจและ Dความทนทาน
- Atomน้ำแข็ง: ธุรกรรมคือหน่วยการดำเนินการเดียว คุณสามารถดำเนินการทั้งหมดหรือไม่ดำเนินการเลยก็ได้ ไม่สามารถดำเนินการเพียงบางส่วนได้
- สอดคล้อง: เมื่อธุรกรรมถูกดำเนินการแล้ว ควรย้ายจากสถานะที่สอดคล้องกันหนึ่งไปยังอีกสถานะหนึ่ง
- การแยก: ธุรกรรมแต่ละรายการควรดำเนินการแยกต่างหากจากธุรกรรมอื่นๆ ในระหว่างการดำเนินการพร้อมกัน ผลลัพธ์ชั่วคราวจากธุรกรรมที่ดำเนินการพร้อมกันไม่ควรเปิดเผยให้กันและกันทราบ
- ความทนทาน: หลังจากทำธุรกรรมเสร็จสมบูรณ์แล้ว การเปลี่ยนแปลงในฐานข้อมูลควรคงอยู่ แม้ในกรณีที่ระบบล้มเหลวก็ตาม
คุณสมบัติ ACID ในระบบจัดการฐานข้อมูล พร้อมตัวอย่าง
ด้านล่างนี้คือตัวอย่างของคุณสมบัติ ACID ในระบบจัดการฐานข้อมูล (DBMS):
Transaction 1: Begin X=X+50, Y = Y-50 END Transaction 2: Begin X=1.1*X, Y=1.1*Y END
ธุรกรรมที่ 1 กำลังโอนเงิน $50 จากบัญชี X ไปยังบัญชี Y
ธุรกรรมที่ 2 จะให้เครดิตแต่ละบัญชีพร้อมดอกเบี้ย 10%
หากส่งธุรกรรมทั้งสองพร้อมกัน ไม่มีหลักประกันว่าธุรกรรมที่ 1 จะดำเนินการก่อนธุรกรรมที่ 2 หรือในทางกลับกัน ไม่ว่าลำดับจะเป็นอย่างไร ผลลัพธ์จะต้องเป็นเสมือนว่าธุรกรรมเกิดขึ้นตามลำดับทีละรายการ
ประเภทของธุรกรรม
แบ่งตามสาขาการใช้งาน:
- แบบไม่กระจายเทียบกับแบบกระจาย
- ธุรกรรมชดเชย
- ระยะเวลาในการทำธุรกรรม
- การประมวลผลแบบออนไลน์เทียบกับการประมวลผลแบบกลุ่ม
อ้างอิงจากพฤติกรรม:
- สองขั้นตอน
- ถูกจำกัด.
- แบบจำลองการกระทำ
พิจารณาจากโครงสร้าง:
- ธุรกรรมแบบเรียบง่ายหรือแบบพื้นฐาน: ประกอบด้วยลำดับของการดำเนินการขั้นพื้นฐานที่ดำเนินการระหว่างคำสั่งเริ่มต้นและคำสั่งสิ้นสุด
- ธุรกรรมซ้อน: ธุรกรรมที่ประกอบด้วยธุรกรรมอื่น ๆ
- ขั้นตอนการทำงาน
กำหนดการคืออะไร?
การจัดตารางเวลาคือกระบวนการสร้างกลุ่มธุรกรรมแบบขนานหลายรายการและดำเนินการทีละรายการ โดยต้องรักษาลำดับของคำสั่งที่ปรากฏในแต่ละธุรกรรม หากมีการดำเนินการสองธุรกรรมพร้อมกัน ผลลัพธ์ของธุรกรรมหนึ่งอาจส่งผลต่อผลลัพธ์ของอีกธุรกรรมหนึ่ง
ตัวอย่าง
Initial Product Quantity is 10 Transaction 1: Update Product Quantity to 50 Transaction 2: Read Product Quantity
หากมีการดำเนินการธุรกรรม 2 ก่อนธุรกรรม 1 ข้อมูลที่ล้าสมัยเกี่ยวกับปริมาณผลิตภัณฑ์จะถูกอ่าน ดังนั้นจึงจำเป็นต้องมีกำหนดการ
การประมวลผลแบบขนานในฐานข้อมูลเป็นสิ่งที่หลีกเลี่ยงไม่ได้ แต่การประมวลผลแบบขนานจะเกิดขึ้นได้ก็ต่อเมื่อมีความสัมพันธ์สมมูลกันระหว่างธุรกรรมที่ประมวลผลพร้อมกัน ความสัมพันธ์สมมูลนี้มีอยู่สามประเภท
ความเท่าเทียมกันของผลลัพธ์: หากตารางการทำงานสองตารางแสดงผลลัพธ์ที่เหมือนกันหลังจากการดำเนินการ จะเรียกว่าตารางการทำงานที่มีผลลัพธ์เทียบเท่ากัน ตารางการทำงานทั้งสองอาจให้ผลลัพธ์เดียวกันสำหรับค่าบางค่า และให้ผลลัพธ์ที่แตกต่างกันสำหรับค่าชุดอื่น ตัวอย่างเช่น ธุรกรรมหนึ่งอัปเดตปริมาณสินค้า ในขณะที่อีกธุรกรรมหนึ่งอัปเดตรายละเอียดลูกค้า
ดูการเทียบเคียง: ความเท่าเทียมกันของมุมมองเกิดขึ้นเมื่อธุรกรรมในตารางทั้งสองดำเนินการในลักษณะเดียวกัน ตัวอย่างเช่น ธุรกรรมหนึ่งแทรกรายละเอียดสินค้าลงในตารางสินค้า ในขณะที่อีกธุรกรรมหนึ่งแทรกรายละเอียดสินค้าลงในตารางเก็บถาวร ธุรกรรมนั้นเหมือนกัน แต่ตารางต่างกัน
ความเท่าเทียมกันของความขัดแย้ง: ในกรณีนี้ ธุรกรรมสองรายการอัปเดตหรือดูชุดข้อมูลเดียวกัน ทำให้เกิดความขัดแย้งระหว่างธุรกรรม เนื่องจากลำดับการดำเนินการจะมีผลต่อผลลัพธ์
ความสามารถในการทำให้เป็นอนุกรมคืออะไร?
ความสามารถในการเรียงลำดับ (Serializability) คือกระบวนการค้นหาตารางการทำงานพร้อมกันที่มีผลลัพธ์เท่ากับตารางการทำงานแบบอนุกรมที่ธุรกรรมต่างๆ ถูกดำเนินการทีละรายการ โดยขึ้นอยู่กับประเภทของตารางการทำงาน ความสามารถในการเรียงลำดับจะแบ่งออกเป็นสองประเภท:
- ความสามารถในการเรียงลำดับความขัดแย้ง
- ดูคุณสมบัติการทำให้เป็นอนุกรม (Serializability)
ทั้งสองแนวทางมีความแตกต่างกันในวิธีการพิจารณาความเท่าเทียมกันอย่างเคร่งครัด ดังที่สรุปไว้ด้านล่าง
| แง่มุม | ความสามารถในการเรียงลำดับความขัดแย้ง | ดูความสามารถในการเรียงลำดับ (Serializability) |
|---|---|---|
| ฐาน | ลำดับของการดำเนินการที่ขัดแย้งกัน | ความสัมพันธ์ระหว่างการอ่านและการเขียนขั้นสุดท้าย |
| เอกสาร | กราฟลำดับความสำคัญต้องไม่มีวงจร | ดูความเทียบเท่ากับตารางเวลาแบบอนุกรม |
| ความเข้มงวด | เข้มงวดกว่า ซึ่งเป็นกลุ่มย่อย | ครอบคลุมกว้างขึ้น รวมถึงการเขียนโดยคนตาบอดด้วย |
| ค่าใช้จ่ายในการตรวจสอบ | ที่มีประสิทธิภาพ | ยากในการคำนวณ |
ตารางการทำงานที่สามารถเรียงลำดับตามความขัดแย้งได้นั้น ก็สามารถเรียงลำดับตามมุมมองได้เช่นกัน แต่ในทางกลับกันนั้นทำไม่ได้ ซึ่งเป็นเหตุผลว่าทำไมการเรียงลำดับตามความขัดแย้งจึงเป็นบททดสอบเชิงปฏิบัติที่ระบบจัดการฐานข้อมูล (DBMS) นำมาใช้

