อ่าน 3 นาที
ธุรกรรมฐานข้อมูล
ธุรกรรม ฐานข้อมูล เป็นสัญลักษณ์ของ หน่วยงาน ที่ดำเนินการภายใน ระบบจัดการฐานข้อมูล (หรือระบบที่คล้ายกัน) กับ ฐานข้อมูล...
ธุรกรรมฐานข้อมูล
ธุรกรรมฐานข้อมูลเป็นสัญลักษณ์ของหน่วยงานที่ดำเนินการภายในระบบจัดการฐานข้อมูล (หรือระบบที่คล้ายกัน) กับฐานข้อมูลซึ่งได้รับการจัดการในลักษณะที่สอดคล้องกันและเชื่อถือได้โดยไม่ขึ้นกับธุรกรรมอื่น[ 1 ]โดยทั่วไปแล้ว ธุรกรรมจะแสดงถึงการเปลี่ยนแปลงใดๆ ในฐานข้อมูล ธุรกรรมในสภาพแวดล้อมฐานข้อมูลมีวัตถุประสงค์หลักสองประการ:
- เพื่อจัดเตรียมหน่วยงานที่เชื่อถือได้ซึ่งช่วยให้สามารถกู้คืนจากความล้มเหลวได้อย่างถูกต้อง และรักษาความสอดคล้องของฐานข้อมูลแม้ในกรณีที่ระบบล้มเหลว ตัวอย่างเช่น เมื่อการทำงานหยุดลงก่อนกำหนดและโดยไม่คาดคิด (ทั้งหมดหรือบางส่วน) ซึ่งในกรณีนี้ การดำเนินการหลายอย่างกับฐานข้อมูลจะยังไม่เสร็จสมบูรณ์ โดยมีสถานะที่ไม่ชัดเจน
- เพื่อให้เกิดการแยกการทำงานระหว่างโปรแกรมที่เข้าถึงฐานข้อมูลพร้อมกัน หากไม่มีการแยกการทำงานนี้ ผลลัพธ์ของโปรแกรมอาจไม่ถูกต้อง
ในระบบจัดการฐานข้อมูล ธุรกรรมคือหน่วยตรรกะหรือการทำงานเดียว ซึ่งบางครั้งอาจประกอบด้วยการดำเนินการหลายอย่าง การคำนวณเชิงตรรกะใดๆ ที่ดำเนินการในลักษณะที่สอดคล้องกันในฐานข้อมูลเรียกว่าธุรกรรม ตัวอย่างเช่น การโอนเงินจากบัญชีธนาคารหนึ่งไปยังอีกบัญชีหนึ่ง ธุรกรรมที่สมบูรณ์ต้องหักจำนวนเงินที่จะโอนจากบัญชีหนึ่งและเพิ่มจำนวนเงินเดียวกันนั้นไปยังอีกบัญชีหนึ่ง
ตามคำจำกัดความ ธุรกรรมฐานข้อมูลจะต้องเป็นอะตอมิก (ต้องเสร็จสมบูรณ์ทั้งหมดหรือไม่มีผลใดๆ เลย) สอดคล้อง (ต้องสอดคล้องกับข้อจำกัดที่มีอยู่ในฐานข้อมูล) แยก (ต้องไม่ส่งผลกระทบต่อธุรกรรมอื่นๆ) และคงทน (ต้องเขียนลงในที่เก็บข้อมูลถาวร) [ 2 ]ผู้ปฏิบัติงานด้านฐานข้อมูลมักอ้างถึงคุณสมบัติเหล่านี้ของธุรกรรมฐานข้อมูลโดยใช้คำย่อ ACID
วัตถุประสงค์
ฐานข้อมูลและแหล่งเก็บข้อมูลอื่นๆ ที่ให้ความสำคัญกับความสมบูรณ์ของข้อมูลเป็นอย่างยิ่ง มักจะมีระบบจัดการธุรกรรมเพื่อรักษาความสมบูรณ์ของข้อมูล ธุรกรรมหนึ่งรายการประกอบด้วยหน่วยงานอิสระหนึ่งหน่วยหรือมากกว่านั้น โดยแต่ละหน่วยจะอ่านและ/หรือเขียนข้อมูลไปยังฐานข้อมูลหรือแหล่งเก็บข้อมูลอื่นๆ เมื่อเกิดเหตุการณ์เช่นนี้ สิ่งสำคัญคือต้องตรวจสอบให้แน่ใจว่าการประมวลผลทั้งหมดนั้นทำให้ฐานข้อมูลหรือแหล่งเก็บข้อมูลอยู่ในสถานะที่สอดคล้องกัน
ตัวอย่างจากระบบบัญชีคู่มักใช้เพื่ออธิบายแนวคิดเรื่องรายการธุรกรรม ในระบบบัญชีคู่ ทุกรายการเดบิตจะต้องมีการบันทึกรายการเครดิตที่เกี่ยวข้อง หากใครเขียนเช็คเป็นเงิน 100 ดอลลาร์เพื่อซื้อของชำ ระบบบัญชีคู่แบบธุรกรรมจะต้องบันทึกรายการสองรายการต่อไปนี้เพื่อให้ครอบคลุมธุรกรรมเดียว:
- เดบิต 100 ดอลลาร์เข้าบัญชีค่าใช้จ่ายของชำ
- โอนเงิน 100 ดอลลาร์เข้าบัญชีเช็ค
ระบบธุรกรรมจะทำให้รายการทั้งสองผ่านหรือล้มเหลวทั้งสองรายการ โดยการจัดการการบันทึกรายการหลายรายการเป็นหน่วยงานธุรกรรมย่อย ระบบจะรักษาความสมบูรณ์ของข้อมูลที่บันทึกไว้ กล่าวคือ จะไม่มีใครประสบกับสถานการณ์ที่บันทึกเดบิตแต่ไม่มีการบันทึกเครดิตที่เกี่ยวข้อง หรือในทางกลับกัน
ฐานข้อมูลธุรกรรม
ฐานข้อมูลแบบทำธุรกรรมคือDBMSที่มีคุณสมบัติ ACIDสำหรับชุดการดำเนินการฐานข้อมูลแบบวงเล็บ (เริ่ม-ยืนยัน) ธุรกรรมทำให้มั่นใจได้ว่าฐานข้อมูลจะอยู่ในสถานะที่สอดคล้องกันเสมอ แม้ในกรณีที่มีการอัปเดตและความล้มเหลวพร้อมกัน[ 3 ]การดำเนินการเขียนทั้งหมดภายในธุรกรรมจะมีผลแบบทั้งหมดหรือไม่มีเลย กล่าวคือ ธุรกรรมจะสำเร็จและการเขียนทั้งหมดจะมีผล หรือมิฉะนั้น ฐานข้อมูลจะอยู่ในสถานะที่ไม่รวมการเขียนใด ๆ ของธุรกรรม ธุรกรรมยังทำให้มั่นใจได้ว่าผลของธุรกรรมพร้อมกันเป็นไปตามการรับประกันบางประการที่เรียกว่าระดับการแยกระดับการแยกสูงสุดคือserializabilityซึ่งรับประกันว่าผลของธุรกรรมพร้อมกันจะเทียบเท่ากับการดำเนินการแบบอนุกรม (เช่น ตามลำดับ)
ระบบจัดการฐานข้อมูลเชิงสัมพันธ์สมัยใหม่ส่วนใหญ่รองรับธุรกรรม ในขณะที่ฐานข้อมูล NoSQLให้ความสำคัญกับความสามารถในการขยายขนาดควบคู่ไปกับการรองรับธุรกรรม เพื่อรับประกันความสอดคล้องของข้อมูลในกรณีที่มีการอัปเดตและการเข้าถึงพร้อมกัน
ในระบบฐานข้อมูล ธุรกรรมอาจประกอบด้วยคำสั่งการจัดการข้อมูลและการสอบถามข้อมูลอย่างน้อยหนึ่งรายการ โดยแต่ละรายการจะอ่านและ/หรือเขียนข้อมูลลงในฐานข้อมูล ผู้ใช้ระบบฐานข้อมูลให้ ความสำคัญอย่างยิ่งต่อ ความสอดคล้องและความสมบูรณ์ของข้อมูล โดยปกติแล้ว ธุรกรรมแบบง่ายจะถูกส่งไปยังระบบฐานข้อมูลในภาษาเช่นSQLที่ห่อหุ้มด้วยธุรกรรม โดยใช้รูปแบบที่คล้ายกับต่อไปนี้:
- เริ่มดำเนินการธุรกรรม
- ดำเนินการชุดข้อมูลและ/หรือสอบถามข้อมูล
- หากไม่มีข้อผิดพลาดเกิดขึ้น ให้ดำเนินการยืนยันธุรกรรม
- หากเกิดข้อผิดพลาด ให้ยกเลิกธุรกรรมนั้น
การดำเนินการยืนยันธุรกรรม (Transaction commit) จะบันทึกผลลัพธ์ทั้งหมดของการเปลี่ยนแปลงข้อมูลภายในขอบเขตของธุรกรรมนั้นลงในฐานข้อมูล ส่วนการดำเนินการยกเลิกธุรกรรม (Transaction rollback) จะไม่บันทึกผลลัพธ์บางส่วนของการเปลี่ยนแปลงข้อมูลภายในขอบเขตของธุรกรรมนั้นลงในฐานข้อมูล และในทุกกรณี ไม่สามารถยืนยันธุรกรรมที่ไม่สมบูรณ์ลงในฐานข้อมูลได้ เนื่องจากจะทำให้ฐานข้อมูลอยู่ในสถานะที่ไม่สอดคล้องกัน
ภายในระบบฐานข้อมูลแบบหลายผู้ใช้ จะจัดเก็บและประมวลผลธุรกรรม โดยมักใช้รหัส ธุรกรรม หรือ XID
นอกจากวิธีง่ายๆ ที่ได้บันทึกไว้ข้างต้นแล้ว ยังมีวิธีต่างๆ อีกมากมายในการดำเนินการธุรกรรมตัวอย่างเช่นธุรกรรมแบบซ้อนกัน คือ ธุรกรรมที่มีคำสั่งอยู่ภายในซึ่งเริ่มต้นธุรกรรมใหม่ (เช่น ธุรกรรมย่อย) ธุรกรรมหลายระดับเป็นรูปแบบหนึ่งของธุรกรรมแบบซ้อนกัน โดยที่ธุรกรรมย่อยเกิดขึ้นในระดับต่างๆ ของสถาปัตยกรรมระบบแบบหลายชั้น (เช่น การดำเนินการหนึ่งที่ระดับเอนจินฐานข้อมูล การดำเนินการหนึ่งที่ระดับระบบปฏิบัติการ) [ 4 ]ธุรกรรมอีกประเภทหนึ่งคือธุรกรรม ชดเชย
ใน SQL
การทำธุรกรรมมีให้ใช้งานในฐานข้อมูล SQL ส่วนใหญ่ แม้ว่าระดับความเสถียรจะแตกต่างกันไป ตัวอย่างเช่นMySQLเริ่มรองรับการทำธุรกรรมตั้งแต่เวอร์ชัน 3.23 แต่เอน จินจัดเก็บข้อมูล InnoDBไม่ได้เป็นค่าเริ่มต้นก่อนเวอร์ชัน 5.5 ส่วนเอนจินจัดเก็บข้อมูลรุ่นก่อนหน้าอย่างMyISAM นั้น ไม่รองรับการทำธุรกรรม
โดยทั่วไป การทำธุรกรรมจะเริ่มต้นโดยใช้คำสั่ง `start` BEGIN(แม้ว่ามาตรฐาน SQL จะระบุไว้เป็น `start` ก็ตามSTART TRANSACTION) เมื่อระบบประมวลCOMMITผลคำสั่ง `start` การทำธุรกรรมจะสิ้นสุดลงด้วยความสำเร็จROLLBACKคำสั่ง `end` ยังสามารถยุติการทำธุรกรรมได้ โดยยกเลิกการทำงานใดๆ ที่เกิดขึ้นนับตั้งแต่ `end` เป็นต้นไปBEGINหาก ปิดใช้ งาน `autocommit`ไว้เมื่อเริ่มต้นการทำธุรกรรม `autocommit` จะถูกเปิดใช้งานอีกครั้งเมื่อสิ้นสุดการทำธุรกรรม
เราสามารถกำหนดระดับการแยก (isolation level)สำหรับการดำเนินการธุรกรรมแต่ละรายการ รวมถึงการกำหนดระดับการแยกโดยรวมได้ ในระดับสูงสุด ( READ COMMITTED) ผลลัพธ์ของการดำเนินการใดๆ ที่เกิดขึ้นหลังจากเริ่มธุรกรรมแล้ว จะไม่ปรากฏให้ผู้ใช้ฐานข้อมูลรายอื่นเห็นจนกว่าธุรกรรมจะสิ้นสุดลง ในระดับต่ำสุด ( READ UNCOMMITTED) ซึ่งอาจใช้เป็นครั้งคราวเพื่อให้มั่นใจได้ว่ามีการทำงานพร้อมกันในระดับสูง การเปลี่ยนแปลงดังกล่าวจะปรากฏให้เห็นทันที
ฐานข้อมูลวัตถุ
ฐานข้อมูลเชิงสัมพันธ์แบบดั้งเดิมประกอบด้วยตารางที่มีฟิลด์และระเบียนขนาดคงที่ ในขณะที่ฐานข้อมูลเชิงวัตถุประกอบด้วยข้อมูล ขนาดแปรผันได้ ซึ่งอาจสามารถแปลงเป็นรูปแบบอนุกรมได้หรืออาจรวมถึงประเภท MIMEด้วย ความคล้ายคลึงกันพื้นฐานระหว่างฐานข้อมูลเชิงสัมพันธ์และฐานข้อมูลเชิงวัตถุคือการเริ่มต้นและการยืนยันหรือการยกเลิกการเปลี่ยนแปลง
หลังจากเริ่มธุรกรรมแล้ว ข้อมูลหรืออ็อบเจ็กต์ในฐานข้อมูลจะถูกล็อก ไม่ว่าจะเป็นแบบอ่านอย่างเดียวหรือแบบอ่านและเขียน จากนั้นจึงสามารถอ่านและเขียนข้อมูลได้ เมื่อธุรกรรมเสร็จสมบูรณ์แล้ว การเปลี่ยนแปลงจะถูกยืนยันหรือยกเลิกอย่างเป็นอะตอมิก เพื่อให้เมื่อสิ้นสุดธุรกรรม แล้ว ไม่มีความไม่สอดคล้องกันเกิด ขึ้น
ธุรกรรมแบบกระจาย
ระบบฐานข้อมูลใช้ธุรกรรมแบบกระจาย[ 5 ]เป็นธุรกรรมที่เข้าถึงข้อมูลผ่านโหนดหลายโหนด ธุรกรรมแบบกระจายบังคับใช้คุณสมบัติ ACID บนโหนดหลายโหนด และอาจรวมถึงระบบต่างๆ เช่น ฐานข้อมูล ตัวจัดการพื้นที่จัดเก็บ ระบบไฟล์ ระบบส่งข้อความ และตัวจัดการข้อมูลอื่นๆ ในธุรกรรมแบบกระจาย โดยทั่วไปจะมีหน่วยงานที่ประสานงานกระบวนการทั้งหมดเพื่อให้แน่ใจว่าทุกส่วนของธุรกรรมถูกนำไปใช้กับระบบที่เกี่ยวข้องทั้งหมด ยิ่งไปกว่านั้น การบูรณาการ Storage as a Service (StaaS) ภายในสภาพแวดล้อมเหล่านี้มีความสำคัญอย่างยิ่ง เนื่องจากมีทรัพยากรพื้นที่จัดเก็บที่แทบจะไม่มีที่สิ้นสุด รองรับคลาสพื้นที่จัดเก็บข้อมูลบนคลาวด์ที่หลากหลายซึ่งมีความพร้อมใช้งาน ความสามารถในการปรับขนาด และคุณสมบัติ ACID ที่แตกต่างกัน การบูรณาการนี้จำเป็นต่อการบรรลุความพร้อมใช้งานที่สูงขึ้น เวลาตอบสนองที่ต่ำลง และประสิทธิภาพด้านต้นทุนในแอปพลิเคชันที่ใช้ข้อมูลจำนวนมากซึ่งใช้งานบนพื้นที่จัดเก็บข้อมูลบนคลาวด์[ 6 ]
ระบบไฟล์ธุรกรรม
ระบบ ไฟล์ Namesys Reiser4สำหรับLinux [ 7 ]รองรับธุรกรรม และตั้งแต่Microsoft Windows Vistaระบบไฟล์Microsoft NTFS [ 8 ]รองรับธุรกรรมแบบกระจายผ่านเครือข่าย มีการวิจัยอย่างต่อเนื่องเกี่ยวกับระบบไฟล์ที่มีความสอดคล้องของข้อมูลมากขึ้น เช่นWarp Transactional Filesystem (WTF) [ 9 ]
ดูเพิ่มเติม
อ่านเพิ่มเติม
- Philip A. Bernstein , Eric Newcomer (2009): หลักการประมวลผลธุรกรรมฉบับที่ 2 สำนักพิมพ์ Morgan Kaufmann (Elsevier) ISBN 978-1-55860-623-4
- Gerhard Weikum, Gottfried Vossen (2001), ระบบสารสนเทศธุรกรรม: ทฤษฎี อัลกอริทึม และการปฏิบัติของการควบคุมและการกู้คืนการทำงานพร้อมกัน , Morgan Kaufmann, ISBN 1-55860-508-8
ลิงก์ภายนอก
- c2:การประมวลผลธุรกรรม
- https://docs.oracle.com/database/121/CNCPT/transact.htm#CNCPT016
- https://docs.oracle.com/cd/B28359_01/server.111/b28318/transact.htm
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ธุรกรรมฐานข้อมูล
ธุรกรรม ฐานข้อมูล เป็นสัญลักษณ์ของ หน่วยงาน ที่ดำเนินการภายใน ระบบจัดการฐานข้อมูล (หรือระบบที่คล้ายกัน) กับ ฐานข้อมูล...
วัตถุประสงค์
ฐานข้อมูล และแหล่งเก็บข้อมูลอื่นๆ ที่ให้ความสำคัญกับ ความสมบูรณ์ ของข้อมูลเป็นอย่างยิ่ง มักจะมีระบบจัดการธุรกรรมเพื่อรักษาความสมบูรณ์ของข้อมูล ธุรกรรมหนึ่งรายการประกอบด้วยหน่วยงานอิสระหนึ่งหน่วยหรือมากกว่านั้น...
ฐานข้อมูลธุรกรรม
ฐาน ข้อมูลแบบทำธุรกรรม คือ DBMS ที่มี คุณสมบัติ ACID สำหรับชุดการดำเนินการฐานข้อมูลแบบวงเล็บ (เริ่ม-ยืนยัน) ธุรกรรมทำให้มั่นใจได้ว่าฐานข้อมูลจะอยู่ในสถานะที่สอดคล้องกันเสมอ แม้ในกรณีที่มีการอัปเดตและความล้มเหลวพร้อมกัน [ 3 ]...
ใน SQL
การทำธุรกรรมมีให้ใช้งานในฐานข้อมูล SQL ส่วนใหญ่ แม้ว่าระดับความเสถียรจะแตกต่างกันไป ตัวอย่างเช่น MySQL เริ่มรองรับการทำธุรกรรมตั้งแต่เวอร์ชัน 3.23 แต่เอน จินจัดเก็บข้อมูล InnoDB ไม่ได้เป็นค่าเริ่มต้นก่อนเวอร์ชัน 5.