คลังเก็บป้ายกำกับ: myisam

Start Transaction, Commit และ Rollback

โดยส่วนตัวแล้วผมคุ้นเคยกับ Start Transaction, Commit และ Rollback มานานแล้ว เพราะมันเป็นกลไกพื้นฐานของฐานข้อมูล

Start Transaction, Commit และ Rollback เป็นกลไกสำหรับการตัดสินใจบันทึกข้อมูลลงฐานข้อมูล มันถูกสร้างขึ้นมาเพื่อทำให้การบันทึกข้อมูลมีความถูกต้องรัดกุมมากยิ่งขึ้น เพราะหากทำสำเร็จไม่มีปัญหา ก็จะเป็นการยืนยันการบันทึกข้อมูล แต่หากทำไม่สำเร็จ สิ่งที่ทำ ๆ ไปก็จะถูกถอดถอนออกหมด ไม่เหลือทิ้งเอาไว้ให้ระคายใจ ให้เหมือนไม่มีอะไรเกิดขึ้นมาก่อน

ถ้าเป็นบน Oracle, Informix หรือ SQL Server ที่ผมเคยใช้ ไอ้การทำ Start Transaction, Commit และ Rollback ถือได้ว่าเป็นกลไกพื้นฐานเลยนะ แต่พอมาเป็น MySQL ผมก็เพิ่งจะรู้เหมือนกันว่ามันมีบางอย่างไม่พื้นฐาน!!!

คือไปคุ้ย ๆ ดูในอินเทอร์เน็ต เขาบอก ๆ กันเอาไว้ว่า ถ้าอยากจะใช้กลไก Transaction บน MySQL นั้น เราต้องกำหนดให้ Table นั้น ๆ มี Storage Engine เป็น InnoDB แทนที่จะเป็น MyISAM และบอกเอาไว้ด้วยว่า MyISAM อ่ะดี เพราะมันรวดเร็วและเหมาะมากสำหรับใช้กับ Web Application ในขณะที่ InnoDB เหมาะสำหรับงานที่ต้องการความถูกต้องของข้อมูลสูง ๆ เช่นงานจำพวกการเงิน เป็นต้น

อือม ผมว่าเขาอธิบายขาดไปนิดนึงนะ เพราะผมมองว่า MyISAM มันเหมาะที่จะกำหนดให้กับ Table ที่เราจะ Insert, Update หรือ Delete เดี่ยว ๆ ตัวเดียว โดยไม่ต้องเกี่ยวข้องกับใคร แบบว่าทำมันทีเดียวแล้วจบไปเลย ไม่ต้องยึดโยงกับการปรับปรุง Table อืนอีก

ในขณะที่ InnoDB มันเหมาะที่จะกำหนดให้กับกลุ่มของ Table ที่มีความเกี่ยวข้องกันเป็นลำดับ คือ ต้องมีการ Insert, Update หรือ Delete กันเป็นทอด ๆ แบบว่าไอ้ Table นั้นต้องถูกทำก่อน Table นี้ แล้วพอทำ Table นี้เสร็จแล้วก็ต้องไปทำ Table โน้น และสุดท้ายถ้าสะดุดแม้แต่จุดเดียว ก็ให้เลิก ๆ เป็นโมฆะให้หมด ให้ถือว่าไอ้ที่เคย Insert, Update หรือ Delete ไปไม่เคยเกิดขึ้นมาก่อน อะไรแบบนั้น!!!

ทีนี้ถ้าเราจะทำเกมแบบ MMORPG ล่ะ เราควรจะกำหนด Storage Engine ยังไงดี???

คำตอบก็คงจะเป็น … กำหนดแบบผสม ๆ ไปก็แล้วกัน ให้บาง Table เป็น MyISAM บาง Table เป็น InnoDB ดีกว่า เพราะเกมแบบ MMORPG ก็ต้องการความถูกต้องของข้อมูล เหมือนกับงานจำพวกการเงินเหมือนกัน