PlusMagi's Blog By Pitt Phunsanit Backend,Database Saving 80000 Gold Coins in the Different World

Saving 80000 Gold Coins in the Different World

ในฐานะ System Architect ที่ต้องออกแบบระบบที่จัดการกับมูลค่าสูง (High-Value Assets) เช่น Gold Coins จำนวน 80,000 เหรียญ ความสมบูรณ์และความถูกต้องของข้อมูล (Data Integrity) คือสิ่งสำคัญสูงสุด การบันทึกข้อมูลจำนวนมากในโลกเสมือนหรือระบบเกม จำเป็นต้องอาศัยกลไกที่เรียกว่า Transactional Control ซึ่ง PostgreSQL เป็นระบบฐานข้อมูลที่โดดเด่นในการรับประกันคุณสมบัติตามหลัก ACID (Atomicity, Consistency, Isolation, Durability)

บทความนี้จะเจาะลึกถึงวิธีการใช้คำสั่ง Transaction ของ PostgreSQL เพื่อให้มั่นใจว่าการบันทึก Gold Coins จำนวน 80,000 เหรียญ จะเกิดขึ้นอย่างสมบูรณ์ในทุกขั้นตอน หรือหากมีข้อผิดพลาดเกิดขึ้น ระบบจะต้องย้อนกลับ (Rollback) ไปยังสถานะเดิมโดยไม่มีข้อมูลสูญหาย

🛡️ หลักการทำงาน: การใช้ Transaction ใน PostgreSQL

การบันทึกมูลค่าสูงแบบครั้งเดียว (Single Operation) อาจไม่เพียงพอ เพราะกระบวนการอาจประกอบด้วยหลายขั้นตอน เช่น การตรวจสอบยอดคงเหลือ -> การอัปเดตยอดคงเหลือ -> การบันทึก Log การทำรายการ การใช้ BEGIN และ COMMIT จะช่วยรวมขั้นตอนเหล่านี้ให้เป็นหน่วยงานเดียว (Atomic Unit) ทำให้มั่นใจได้ว่าทุกคำสั่งจะสำเร็จพร้อมกัน หรือล้มเหลวพร้อมกัน

สมมติว่าเรามีตาราง user_inventory ที่เก็บข้อมูลผู้เล่น และเราต้องการเพิ่ม Gold Coins 80,000 เหรียญ ให้กับผู้ใช้ที่มี user_id เท่ากับ 1

⚙️ ตัวอย่างโค้ด PostgreSQL สำหรับการบันทึก Gold Coins

โค้ดชุดนี้แสดงขั้นตอนการเริ่มต้น Transaction, การอัปเดตยอดเงิน, และการยืนยันความสำเร็จด้วย COMMIT

SQL

-- 1. เริ่มต้น Transaction เพื่อรับประกัน ACID properties<br>BEGIN;<br><br>-- 2. อัปเดตยอด Gold Coins โดยเพิ่ม 80000 เหรียญ<br>UPDATE user_inventory<br>SET gold_coins = gold_coins + 80000<br>WHERE user_id = 1;<br><br>-- 3. ตรวจสอบว่ามีการอัปเดตข้อมูลหรือไม่ (Optional Check)<br>SELECT * FROM user_inventory WHERE user_id = 1;<br><br>-- 4. หากทุกขั้นตอนสำเร็จ ให้ยืนยันการเปลี่ยนแปลง<br>COMMIT;<br>

⚠️ การจัดการข้อผิดพลาดด้วย ROLLBACK

ในสถานการณ์ที่ระบบล้มเหลวระหว่างการทำรายการ (เช่น การเชื่อมต่อขาดหาย หรือเกิด Constraint Violation) เราต้องใช้ ROLLBACK เพื่อยกเลิกการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นตั้งแต่ BEGIN

SQL

-- สมมติว่าเกิดข้อผิดพลาดในการคำนวณ (Error Simulation)<br>BEGIN;<br>UPDATE user_inventory<br>SET gold_coins = gold_coins + 80000<br>WHERE user_id = 1;<br>-- หากโค้ดส่วนถัดไปล้มเหลว (เช่น การเรียกฟังก์ชันที่ผิดพลาด)<br>-- ระบบจะเข้าสู่บล็อก Exception และทำงาน ROLLBACK โดยอัตโนมัติ<br>ROLLBACK;<br>

✅ บทสรุปทางสถาปัตยกรรม

การใช้ Transaction ใน PostgreSQL ไม่ได้เป็นเพียงแค่คำสั่ง SQL แต่เป็นหลักการทางสถาปัตยกรรมที่สำคัญในการรับประกันความน่าเชื่อถือของข้อมูล (Data Reliability) การเข้าใจและประยุกต์ใช้ BEGIN, COMMIT, และ ROLLBACK อย่างถูกต้อง ทำให้เราสามารถออกแบบระบบที่จัดการกับทรัพยากรเสมือนมูลค่าสูงได้อย่างปลอดภัยและมีประสิทธิภาพสูงสุด ซึ่งเป็นมาตรฐานที่ Senior Architect ทุกคนต้องทราบ

Exit mobile version