โดยส่วนตัวแล้วผมคุ้นเคยกับ 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 ก็ต้องการความถูกต้องของข้อมูล เหมือนกับงานจำพวกการเงินเหมือนกัน

Related Posts

4 thoughts on “Start Transaction, Commit และ Rollback

  1. แต่แบบนั้นเท่ากับว่า table ที่เป็น MyISAM จะต้องห้ามเกี่ยวข้องกับ table อื่น เพราะมันขาดคุณสมบัติในการ rollback
    ต้องออกแบบ table ให้ดีสินะครับแบบนี้

    MyISAM = speed
    InnoDB = reliability, data integrity, support rollback ที่ช้าเพราะการได้มาซึ่ง reliability ก็ต้องมี cost ที่ต้องจ่ายเหมือนกัน 🙂

  2. แต่ MySQL 5.5 เขาทำให้ InnoDB เร็วขึ้นแล้วนะครับ ไม่แน่อาจจะเท่า MyISAM ก็ได้ เห็นเจ้าของ Product เขาบอกมานะครับ แถมยังสนับสนุน InnoDB อีก

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *