© 13_Phunkod/Shutterstock.com
เมื่อใช้ระบบจัดการฐานข้อมูล (DBMS) การทำธุรกรรมจะดำเนินการอย่างสม่ำเสมอ สิ่งเหล่านี้มักดำเนินการเป็นธุรกรรม ACID ซึ่งมีประโยชน์มากมายในการรักษาฐานข้อมูลให้แข็งแรงและทำงานได้อย่างถูกต้อง หากคุณกำลังพยายามทำความเข้าใจกับคุณสมบัติของกรดใน DBMS เราได้ครอบคลุมทุกสิ่งที่คุณจำเป็นต้องรู้
ธุรกรรม ACID คืออะไร
เกี่ยวกับฐานข้อมูล ธุรกรรม เป็นการดำเนินการที่ดำเนินงานเดียวและอาจเปลี่ยนแปลงเนื้อหาของฐานข้อมูล ธุรกรรมใช้การดำเนินการอ่านและเขียนเพื่อทำงานกับข้อมูล นั่นคือ พวกเขาอ่านข้อมูลที่มีอยู่และอินพุต หรือ”เขียน”ค่าข้อมูลใหม่ ตัวอย่างคลาสสิกคือเมื่อมีการโอนเงินจากบัญชีธนาคารของคุณ ด้วยเหตุนี้ ธุรกรรม ACID จึงอยู่ในสถานะเสร็จสมบูรณ์หรือไม่สมบูรณ์ ในตัวอย่างนี้ ไม่สามารถถอนเงินออกจากบัญชีของคุณพร้อมกันและถอนไม่ได้ – เกิดขึ้นหรือไม่ได้เกิดขึ้น
เป้าหมายของธุรกรรม ACID คือการรักษาความสอดคล้องและความถูกต้องของฐานข้อมูลหลังจากดำเนินการธุรกรรมแล้ว คุณสมบัติ ACID ใน DBMS ช่วยให้นักพัฒนาสามารถดำเนินการที่ซับซ้อนได้ในขณะที่มั่นใจว่าข้อมูลของพวกเขาปลอดภัยและถูกต้อง วิธีนี้ทำให้สำเร็จได้โดยใช้คุณสมบัติที่กำหนดของธุรกรรม ซึ่งเรียกว่าคุณสมบัติของกรด ACID ย่อมาจาก Atomicity, Consistency, Isolation และ Durability ต่อไป เราจะเจาะลึกความหมายของคำเหล่านี้
ธุรกรรม ACID ช่วยรับรองความถูกต้องและความสอดคล้องของฐานข้อมูลหลังจากดำเนินการธุรกรรมแล้ว
©dizain/Shutterstock.com
Atomicity
นี่หมายถึงวิธีปฏิบัติต่อข้อความภายในธุรกรรม คำสั่งเป็นงานเดียว เช่น การอ่าน เขียน ปรับปรุงหรือลบข้อมูล Atomicity หมายความว่าแต่ละคำสั่งถือเป็นหน่วยเดียว และงานทั้งหมดได้รับการดำเนินการ หรือไม่มีเลย นอกจากนี้ยังหยุดธุรกรรมบางส่วนไม่ให้เกิดขึ้นอีกด้วย
กล่าวอีกนัยหนึ่ง atomicity ช่วยป้องกันความเสียหายและการสูญหายของข้อมูล หากการดำเนินการของคุณล้มเหลวระหว่างทาง ฐานข้อมูลจะเก็บบันทึกทุกการเปลี่ยนแปลงที่ทำขึ้น และหากการเชื่อมต่อถูกขัดจังหวะ การเปลี่ยนแปลงเหล่านี้จะถูกยกเลิก สิ่งนี้ขึ้นอยู่กับสองการดำเนินการที่เรียกว่า”ยกเลิก”และ”กระทำ”อันแรกจะเลิกทำการเปลี่ยนแปลงหากธุรกรรมถูกยกเลิก และอันหลังจะทำให้เห็นการเปลี่ยนแปลงหากธุรกรรมเสร็จสมบูรณ์
ความสอดคล้องกัน
ความสอดคล้องหมายถึงสิ่งที่คล้ายคลึงกันในสถานการณ์จริงส่วนใหญ่. เกี่ยวกับฐานข้อมูล หมายความว่าการทำธุรกรรมจะเปลี่ยนแปลงข้อมูลในรูปแบบที่คาดเดาได้และกำหนดไว้ล่วงหน้าเท่านั้น และค่าข้อมูลจะถูกรักษาไว้ หากธุรกรรมละเมิดกฎของฐานข้อมูล ธุรกรรมนั้นจะถูกละทิ้ง นอกจากนี้ยังป้องกันความเสียหายของข้อมูลหรือข้อผิดพลาดเช่น Atomicity และรักษาความสมบูรณ์ของฐานข้อมูลโดยหลีกเลี่ยงผลกระทบที่ไม่ได้ตั้งใจ
การแยก
สิ่งสำคัญเมื่อทำงานกับฐานข้อมูลที่ธุรกรรมของผู้ใช้จะไม่ทำ รบกวนซึ่งกันและกัน เพื่อให้บรรลุเป้าหมายนี้ การแยกใช้เป็นคุณสมบัติ ซึ่งหมายความว่า เมื่อผู้ใช้ทำงานบนฐานข้อมูลเดียวกันพร้อมกัน คำขอธุรกรรมแต่ละรายการจะดำเนินการราวกับว่าพวกเขาร้องขอทีละรายการ ธุรกรรมเหล่านี้ไม่มีผลกระทบซึ่งกันและกันและจะถือว่าเป็นธุรกรรมต่อเนื่อง แม้ว่าจะเกิดขึ้นพร้อมกันก็ตาม เนื่องจากพวกมันเรียงตามลำดับ จึงถูกป้องกันไม่ให้กระทบซึ่งกันและกันและทำให้ความสมบูรณ์ของข้อมูลเสียหาย
ความทนทาน
คุณสมบัติของกรดสุดท้ายคือความทนทาน ซึ่งช่วยรักษาข้อมูลในกรณีที่ระบบล้มเหลวโดยบันทึกการเปลี่ยนแปลงที่เพิ่มขึ้นที่ทำไปพร้อมกัน หากการทำธุรกรรมสำเร็จ การเปลี่ยนแปลงจะไม่ถูกยกเลิก ความทนทานยังช่วยให้ฐานข้อมูลสามารถย้อนกลับการเปลี่ยนแปลงในกรณีที่ธุรกรรมถูกขัดจังหวะ
คุณสมบัติของกรดใน DBMS: ตัวอย่างธุรกรรม
ตอนนี้เราได้กล่าวถึงพื้นฐานของสิ่งที่เป็นกรด คุณสมบัติ ถึงเวลาแล้วที่จะแสดงคุณสมบัติเหล่านี้ด้วยธุรกรรมตัวอย่างง่ายๆ
ปรมาณู
วิธีที่ง่ายที่สุดในการอธิบายปรมาณูคือการพิจารณาสถานการณ์ที่คุณต้องการโอนเงินจากบัญชีธนาคารหนึ่งไปยังอีกบัญชีหนึ่ง
ธุรกรรมต้องเป็นระดับปรมาณูเนื่องจากคุณไม่ต้องการประสบกับสถานการณ์ที่ดำเนินการไม่สมบูรณ์ ในกรณีนี้ อาจเป็นการถอนเงินแต่ไม่ได้ฝาก หรือบัญชีที่สองได้รับเครดิตโดยไม่ได้ถอนเงินออกจากบัญชีต้นทาง ดังนั้น ธุรกรรมเหล่านี้จำเป็นต้องยกเลิกหากยังดำเนินการไม่สำเร็จ ดังนั้นอะตอมมิกซิตี้จึงเป็นสิ่งสำคัญยิ่ง ข้อมูลและธุรกรรมสำหรับตัวอย่างนี้แสดงไว้ด้านล่าง
หากเราต้องการโอนเงิน $50 จากบัญชี X ไปยังบัญชี Y เราจำเป็นต้องใช้ธุรกรรม T โดยมีสองขั้นตอนคือ T1 และ ที2. นั่นคือการถอนเงินจากบัญชี X และฝากเงินในบัญชี Y หากธุรกรรมถูกขัดจังหวะหลังจากดำเนินการเขียน (X) แต่ก่อนที่จะเขียน (Y) การดำเนินการนั้นจะไม่สอดคล้องกันและฐานข้อมูลจะถูกบุกรุก ดังนั้นจึงต้องทำรายการให้ครบถ้วน ถ้าไม่เช่นนั้น การทำธุรกรรมจะล้มเหลวและการดำเนินการจะถูกเลิกทำ
ความสม่ำเสมอ
การใช้ตัวอย่างเดียวกัน ความสม่ำเสมอช่วยให้แน่ใจว่ามูลค่าของจำนวนเงินในบัญชีใดบัญชีหนึ่งมีความสอดคล้องกัน นั่นคือมูลค่าจะเท่ากันที่จุดเริ่มต้นและจุดสิ้นสุดของธุรกรรมแต่ละรายการ สิ่งนี้จะรักษาความสมบูรณ์ของฐานข้อมูลและลักษณะที่คาดเดาได้ของค่าภายใน ในสถานการณ์นี้ สิ่งสำคัญคือต้องปฏิบัติตามข้อจำกัดที่ว่ายอดคงเหลือในธนาคารควรเป็นจำนวนเต็มบวก มิฉะนั้น การทำธุรกรรมจะล้มเหลว
เพื่อแสดงให้เห็น ถ้าเงินรวมในบัญชี X มีจำนวน $500 และเราต้องการโอนเงิน $50 ไปยังบัญชี Y ดังนั้นเงินรวมในบัญชีทั้งสองจะต้องเท่ากับ $500 เสมอ สมมติว่ามีเงินทุนเริ่มต้นเป็นศูนย์ในบัญชี Y ความสม่ำเสมออาจดูเหมือนเป็นคุณสมบัติกรดที่ง่ายที่สุดอย่างหนึ่งใน DBMS แต่ถึงกระนั้นก็สำคัญมาก
การแยก
เพื่อแสดงตัวอย่างที่การแยกนั้นไม่ใช่’ใช้ไม่ถูกต้อง พิจารณาธุรกรรมสองรายการ T และ T” ในขณะที่ T กำลังดึงข้อมูลและอัปเดตจากแถว T” กำลังคำนวณข้อมูลนั้น หาก T” ดึงข้อมูลก่อนที่ T จะอัปเดตเสร็จสิ้น ธุรกรรมที่เสร็จสมบูรณ์จะแสดงข้อมูลที่ไม่ถูกต้อง ข้อมูลและธุรกรรมสำหรับตัวอย่างนี้แสดงไว้ด้านล่าง โดยที่”น้ำหนัก”=X และ”ความสูง”=Y
ในกรณีนี้ T กำลังแปลงค่าน้ำหนักและค่าความสูงเป็นกิโลกรัมและเมตรตามลำดับ และ T”กำลังพยายามคำนวณ ค่าดัชนีมวลกายของบุคคลตามสมการ ค่าดัชนีมวลกาย=กก./ตร.ม. เพื่อแสดงให้เห็น เราจะพิจารณาสถานการณ์ที่ T ถูกดำเนินการจนถึงขั้นตอนการอ่าน (Y) และ T” เริ่มต้นขึ้น ค่าที่ถูกต้องสำหรับ X ถูกเรียกโดย T” เนื่องจาก X ได้รับการคำนวณแล้ว แต่ค่าที่ไม่ถูกต้องสำหรับ Y ถูกดึงมาเนื่องจาก T ยังไม่ได้เขียนค่าที่อัปเดต สามารถแสดงเป็น:
T”: (X/Y2=81.36/722=0.016)
เมื่อใช้งานจริง การคำนวณควรเป็น:
(X/Y2=81.36/1.832=24.3)
เนื่องจาก T”ใช้ค่าเริ่มต้นสำหรับ Y ฐานข้อมูลจึงไม่สอดคล้องกันและค่าที่ส่งออกนั้นไม่ถูกต้องและไม่มีความหมาย สถานการณ์นี้ ซึ่งข้อมูลที่ไม่ถูกต้องถูกดึงมาเรียกว่า”dirty read”ความคลาดเคลื่อนในกรณีของการโอนเงินอาจเป็นเรื่องร้ายกาจและตรวจจับได้ยากกว่าเนื่องจากอาจเป็นความแตกต่างเล็กน้อยในจำนวนเงินที่คำนวณและคาดไว้ ทั้งสองวิธี ธุรกรรมต้องแยกออกจากกันโดยที่การเปลี่ยนแปลงที่เพิ่มขึ้นจะไม่ปรากฏให้เห็นในธุรกรรมใดธุรกรรมหนึ่งจนกว่าจะมี ถูกกำหนดให้กับหน่วยความจำ
ความทนทาน
เนื่องจากความทนทานมีศูนย์กลางอยู่ที่การรักษาข้อมูล จึงอาจพิจารณาได้ในบริบทของไฟฟ้าดับ หากเกิดความล้มเหลวที่ไม่คาดคิดเช่นนี้หลังจาก โอนเงินแล้ว การเปลี่ยนแปลงข้อมูลนี้ควรได้รับการเก็บรักษาไว้โดยฐานข้อมูลใน non-vola หน่วยความจำกระเบื้อง อย่างไรก็ตาม หากการหยุดทำงานเกิดขึ้นระหว่างการทำธุรกรรม การเปลี่ยนแปลงจะถูกย้อนกลับและเลิกทำตามอะตอมมิกซิตี้
ความทนทานมุ่งเน้นไปที่การรักษาข้อมูลในกรณีที่เกิดข้อผิดพลาดที่ไม่คาดคิด
©thinkhubstudio/Shutterstock.com
สรุป
โดยสรุป เราจะเห็นว่าคุณสมบัติของกรดทั้งสี่ใน DBMS มีความสำคัญเพียงใด เมื่อทำงานร่วมกัน จะทำให้แน่ใจว่าธุรกรรมที่ถูกต้องเท่านั้นที่เสร็จสมบูรณ์ และข้อมูลที่อัปเดตจะถูกจัดเก็บไว้ในหน่วยความจำแบบไม่ลบเลือนเพื่อป้องกันความล้มเหลวที่ไม่คาดคิด พวกเขายังรักษาลักษณะของการเปลี่ยนแปลงข้อมูลที่สามารถคาดการณ์ได้และทำให้แน่ใจว่าการทำธุรกรรมจะไม่รบกวนซึ่งกันและกัน
Up Next…
อธิบายคุณสมบัติของกรดใน DBMS พร้อมตัวอย่างคำถามที่พบบ่อย (คำถามที่พบบ่อย คำถาม)
ธุรกรรมใน DBMS คืออะไร
ธุรกรรมหมายถึงชุดของการดำเนินการที่ทำงานเชิงตรรกะชุดเดียว ในแง่นี้ การทำงานเชิงตรรกะหมายถึงการเปลี่ยนแปลงที่มีความหมายต่อข้อมูล เช่น การโอนเงินจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่ง ธุรกรรมอาจอยู่ในกระบวนการดำเนินการ ล้มเหลวในการดำเนินการหรือถูกยกเลิกด้วยเหตุผลหลายประการ
คุณสมบัติของกรดใน DBMS คืออะไร
คุณสมบัติของกรด อ้างถึงวิธีที่ฐานข้อมูลควบคุมธุรกรรมที่ดำเนินการกับข้อมูลของพวกเขา ACID ย่อมาจาก Atomicity, Consistency, Isolation และ Durability
เหตุใดคุณสมบัติของกรดจึงมีความสำคัญ
คุณสมบัติของกรดช่วยรักษาข้อมูลภายในฐานข้อมูลให้ถูกต้องและสอดคล้องกัน และเก็บรักษาไว้ในกรณีที่เกิดเหตุการณ์ไม่คาดฝัน เช่น ไฟฟ้าดับ ความล้มเหลว นอกจากนี้ คุณสมบัติยังทำให้มั่นใจได้ว่าธุรกรรมจะไม่รบกวนซึ่งกันและกัน
เมื่อใดที่ฉันควรใช้ธุรกรรม ACID หลายเอกสาร
ในบางครั้ง ข้อมูลที่เกี่ยวข้องจะถูกแยกระหว่างหลายเรกคอร์ด ดังนั้นการจัดการข้อมูลจึงต้องสามารถทำงานร่วมกับสิ่งนี้ได้เพื่อความสำเร็จของธุรกรรม แอปพลิเคชันส่วนใหญ่ไม่ต้องการการทำธุรกรรมหลายเอกสาร แต่สำหรับบางแอปพลิเคชันก็มีความสำคัญ โมเดลข้อมูลจำนวนมากมีความยืดหยุ่น ซึ่งทำให้สามารถเก็บข้อมูลที่เกี่ยวข้องไว้ในเอกสารเดียว แต่ยังสามารถทำงานกับข้อมูลหลายเอกสารได้อีกด้วย ตัวอย่างเช่น MongoDB
ข้อเสียของการใช้ธุรกรรม ACID คืออะไร
ข้อเสียของการใช้ธุรกรรม ACID คือฐานข้อมูลขัดขวางการทำงานพร้อมกัน เช่น เป็นการเขียนข้อมูลจากการแทรกแซง แม้ว่าสิ่งนี้จะเป็นประโยชน์อย่างมาก แต่ก็หยุดผู้ใช้หรือลูกค้าไม่ให้ดำเนินธุรกรรมหากพวกเขากำลังรอการดำเนินการอื่นให้เสร็จสิ้น สิ่งนี้อาจส่งผลเสียต่อประสบการณ์ของผู้ใช้และนำไปสู่เวลาแฝงของแอปพลิเคชันที่สูงขึ้น
โมเดล ACID เปรียบเทียบกับโมเดล BASE อย่างไร
โมเดล ACID มีวัตถุประสงค์เพื่อ มอบความสม่ำเสมอ ในขณะที่โมเดล BASE มุ่งมอบความพร้อมใช้งานสูง BASE ทำสิ่งนี้ผ่านการแพร่กระจายและจำลองข้อมูลข้ามโหนดของฐานข้อมูล ทำให้ข้อมูลสามารถเปลี่ยนแปลงได้ตลอดเวลาและสำหรับการอ่านข้อมูลจะดำเนินการตามที่จำเป็น ในที่สุดความสอดคล้องอาจเข้าถึงได้ผ่านโมเดล BASE แต่ไม่ใช่ความต้องการในทันที
ฐานข้อมูลเชิงสัมพันธ์คืออะไร
ฐานข้อมูลเชิงสัมพันธ์เป็นฐานข้อมูลหนึ่งที่ ข้อมูลถูกจัดเก็บไว้ในหนึ่งตารางหรือมากกว่า และสัมพันธ์กันผ่านคีย์ร่วม ดังนั้น ชนิดข้อมูลสามารถสัมพันธ์กันผ่านความสัมพันธ์แบบหนึ่งต่อหนึ่ง หนึ่งต่อกลุ่ม หรือกลุ่มต่อกลุ่ม
ฐานข้อมูลใดบ้างที่รองรับคุณสมบัติของกรด
DBMS ที่สอดคล้องกับ ACID ได้แก่ MySQL, PostgreSQL, SQLite, Oracle และ Microsoft SQL Server
อุตสาหกรรมใดใช้คุณสมบัติของกรดเป็นหลัก
อุตสาหกรรมการเงินเกือบทั้งหมดใช้ DBMS ที่สอดคล้องกับกรด
ฐานข้อมูลใดบ้างที่ไม่รองรับคุณสมบัติของกรด
NoSQL หรือ “ไม่ ฐานข้อมูล SQL” ไม่รองรับคุณสมบัติของกรดอย่างสมบูรณ์ เนื่องจากไม่มีโครงสร้างตารางที่ตายตัว พวกมันให้ความสอดคล้องในท้ายที่สุดตามโมเดล BASE