© 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: ตัวอย่างธุรกรรม

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

ปรมาณู

วิธีที่ง่ายที่สุดในการอธิบายปรมาณูคือการพิจารณาสถานการณ์ที่คุณต้องการโอนเงินจากบัญชีธนาคารหนึ่งไปยังอีกบัญชีหนึ่ง

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

X: 500Y: 200T1T2Read(X)
X:=X – 50
Write(X)Read(Y)
Y: Y + 50
Write(Y)X: 450Y: 250

หากเราต้องการโอนเงิน $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

NameWeight/lbHeight/inStephen17972Denise14658
TT”Read(Weight)
X:=X/2.2
เขียน(X)
อ่าน(Y)
Y:=Y*0.0254
เขียน(Y)อ่าน(X)
อ่าน(Y)
Z:=X/Y2
Write(Z)

ในกรณีนี้ 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

By Maxwell Gaven

ฉันทำงานด้านไอทีมา 7 ปี เป็นเรื่องสนุกที่ได้เห็นการเปลี่ยนแปลงอย่างต่อเนื่องในภาคไอที ไอทีคืองาน งานอดิเรก และชีวิตของฉัน