💡 ถ้าพูดถึงสาย Database แล้ว จะมีตัวย่ออยู่ชุดนึงที่ฟังครั้งแรกแล้วต้องเอ๊ะว่า นี่วงการคอมพิวเตอร์หรือเคมีแน่นะ ? นั่นก็คือคำว่า ACID นั่นเอง โดย ACID ในที่นี้ไม่ได้แปลว่ากรดแต่อย่างใด เพราะมันคือคุณสมบัติที่ Database transaction ต้องมีต่างหาก !
.
Database Transaction คืออะไร ?
.
ก่อนจะไปที่เรื่อง ACID แอดขออธิบายเพิ่มเติมสำหรับมือใหม่นิสนึง เจ้า Database Transaction คือชุดคำสั่งที่กระทำบางสิ่งกับ Database ไม่ว่าจะสร้าง อ่าน แก้ไข หรือลบข้อมูล เพื่อให้ได้ผลลัพธ์ตามที่ต้องการ
.
ถ้ายังนึกไม่ออก เรามีตัวอย่าง !
“ถ้า A จะโอนเงินให้ B จำนวน 100 บาท” เพื่อน ๆ คิดว่า Transaction สำหรับโอนเงินจะเป็นยังไง ?
.
สมมติว่า คำสั่งที่จะเกิดขึ้นตอนโอนเงินมีดังนี้
1) เข้าไปอ่านข้อมูลว่า ขณะนี้ A และ B มีเงินในบัญชีเท่าไหร่
2) แก้ไขจำนวนเงินของ A โดยลบออก 100 บาท
3) แก้ไขจำนวนเงินของ B โดยเพิ่มขึ้น 100 บาท
4) เพิ่มข้อมูลประวัติการโอนเงินระหว่าง A ไปยัง B
.
แค่นี้ เราก็จะได้ 1 Transaction สำหรับโอนเงินจาก A ไป B จำนวน 100 บาทแล้ว~~
.
พอเข้าใจเรื่อง Database Transaction กันแล้ว เราก็จะมาดูกันต่อว่า คุณสมบัติของ Transaction ที่ดีเป็นยังไงนะ? ถ้าพร้อมแล้วไปต่อกันเลย
.
.
ทำไม Database Transaction ต้อง ACID?
.
ACID ย่อมาจาก Atomicity, Consistency, Isolation และ Durability ซึ่งทั้ง 4 ตัวเป็นคุณสมบัติที่ทำให้ Transaction บน Database นั้นน่าเชื่อถือและมีความถูกต้อง
.
🔸 Atomicity
.
มีสโลแกนว่า แต่ละ Transaction จะต้องเป็นแบบ “All or nothing” หมายถึง Transaction จะสำเร็จก็ต่อเมื่อ ทุกคำสั่งในนั้นทำงานได้สำเร็จจริง แต่ถ้ามีคำสั่งไหนหรือส่วนไหนที่ทำไม่สำเร็จ ทั้ง Transaction นั้นก็จะถือว่าไม่สำเร็จไปเลย จึงเป็นที่มาของวลี “All or nothing” นั่นเอง
.
จากตัวอย่าง Transaction ที่แอดแปะไว้ข้างบน
.
“ถ้า A จะโอนเงินให้ B จำนวน 100 บาท”
1) เข้าไปอ่านข้อมูลว่า ขณะนี้ A และ B มีเงินในบัญชีเท่าไหร่
2) แก้ไขจำนวนเงินของ A โดยลบออก 100 บาท
3) แก้ไขจำนวนเงินของ B โดยเพิ่มขึ้น 100 บาท
4) เพิ่มข้อมูลประวัติการโอนเงินระหว่าง A ไปยัง B
.
ถ้าทำคำสั่งที่ 3 อยู่ แล้ว Server ล่ม เงินของ B จะไม่ถูกเพิ่มอีก 100 บาท แปลว่ามีคำสั่งที่ทำไม่สำเร็จเกิดขึ้น ดังนั้นทั้ง Transaction นี้ก็จะถือว่าไม่สำเร็จนั่นเอง
.
.
🔸 Consistency
.
Consistency แปลว่า ความสอดคล้อง ดังนั้น ไม่ว่าใน Transaction นั้น เราจะทำอะไรกับข้อมูลบ้าง ข้อมูลนั้นก็ต้องสอดคล้องกับกฎเกณฑ์และเงื่อนไขที่เราออกแบบไว้บน Database เช่น ข้อมูลจำนวนเงินต้องเป็นตัวเลขเท่านั้น เป็นตัวอักษรไม่ได้
.
นอกจากนี้ จะต้องไม่กระทบกับข้อมูลที่มีอยู่แล้วด้วย ถ้ามีคำสั่งที่ทำให้ข้อมูลไม่ถูกต้อง Transaction นั้นจะถูก Rollback หรือก็คือยกเลิก Transaction นั้นเพื่อย้อนกลับไปตอนที่ข้อมูลยังถูกต้องอยู่ เช่น ถ้ากำลังเพิ่มประวัติการโอนเงิน มี Transaction การโอนอื่นกำลังจะเพิ่มประวัติอยู่เหมือนกัน รหัสของการโอนทั้ง 2 กรณีนี้จะต้องไม่เหมือนกัน ไม่งั้น Transaction ที่มาทีหลังจะต้อง Rollback
.
.
🔸 Isolation
.
แน่นอนว่าบน Database อาจมีหลาย Transactions เกิดไล่เลี่ยกันและอาจทำบนข้อมูลส่วนเดียวกัน ถ้า Transaction ที่เกิดขึ้นยังไม่เสร็จ คำสั่งใน Transaction นั้นจะต้องไม่มีผลกับ Transaction อื่น ๆ จนกว่าจะทำการ Commit (ยืนยันการเปลี่ยนแปลงข้อมูลจากการกระทำของ Transaction)
.
.
🔸 Durability
.
Durability แปลว่า ความคงทน ดังนั้น ถ้า Transaction ไหน ถูก Commit แล้ว ข้อมูลจาก Transaction นั้น ก็จะต้องครบถ้วนและอยู่คงทนตลอดไปใน Database ไม่ว่าจะไฟดับ Server ล่ม หรือเกิดอะไรขึ้นก็ตาม
.
.
เป็นยังไงกันบ้างเอ่ย ถ้าอยากให้แอดมาแชร์เรื่องอะไรอีกก็คอมเมนต์กันมาได้น้า~ และสำหรับโพสต์นี้ ชอบกดไลก์ ใช่กดแชร์ เป็นกำลังใจให้แอดและทีม BorntoDev ด้วยนะคะ ❤️
.
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
#ACID #database #BorntoDev
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...