ยอมแพ้ครับ ผมยอมแพ้ SQLite และตัดสินใจใช้ MySQL เป็น database backend ของ GotoKnow แล้ว คุณคงสงสัยว่าผมใช้ SQLite ทำไม แล้วถ้ามีเหตุผลในการใช้ แล้วจะยอมแพ้เสียทำไม เอาล่ะผมจะเล่าให้ฟัง

ผมเลือกใช้ SQLite เพราะ SQLite เป็น database engine ที่น่าสนใจมาก มีการออกแบบที่ดีเป็น abstract layers ซึ่งในแต่ละ layer ก็มีประเด็นที่น่าสนใจที่น่าศึกษา การออกแบบเช่นนี้แสดงให้เห็นว่าคนเขียน (D. Richard Hipp) เป็นคนที่มีความรู้ในทฤษฎีวิทยาการคอมพิวเตอร์อย่างลึกซึ้งและสามารถนำมาปฎิบัติจริงได้ นอกจากนี้ source code ก็มีความยาวเพียงประมาณ 3 หมื่นกว่าบรรทัด อยู่ในวิสัยที่ผมจะใช้เวลาอ่านทำความเข้าใจได้เพื่อเรียนรู้การทำงานภายในของ SQLite

ด้วยเหตุผลดังกล่าว ผมจึงตัดสินใจเลือกใช้ SQLite เรียกว่าถ้า SQLite ทำงานเร็ว ผมก็โชคดีไป ถ้าทำงานช้า ก็เป็นโอกาสที่ผมจะได้ศึกษาและอาจมีโอกาสได้ช่วยทำให้ SQLite เร็วขึ้นได้ ผมได้ทั้งความรู้และได้ทั้งโอกาส นับข้อดีได้อย่างนี้แล้ว SQLite ก็เป็นทางเลือกชั้นหนึ่งของผมทีเดียวในการใช้ทำ MemeExpress

แต่อย่างไรก็ตามเราออกแบบ MemeExpress ให้สามารถทำงานกับ database backend ได้หลายตัวด้วย เพื่อ flexibility ของคนที่จะนำไปใช้ ใน database server ทั้งหลายที่มีอยู่ ตัวหนึ่งที่เรามองไว้ว่าในที่สุดแล้วเราคงต้องใช้เมื่อระบบมีผู้ใช้มากขึ้นได้แก่ MySQL เพราะ MySQL ออกแบบมาเพื่อให้ใช้งานในระบบที่ต้องการ database server ศักยภาพสูงที่รองรับผู้ใช้พร้อมๆ กันหลายคน (concurrent users) ได้มาก

GotoKnow เติบโตขึ้นมาก มีผู้เขียนและผู้อ่านเพิ่มขึ้นในเวลาอันรวดเร็ว สมกับปราถนาของ สคส. ที่ต้องการเห็นคนไทย b2b (blog-to-blog) เพื่อแลกเปลี่ยนความรู้กันด้วยวิธี storytelling ด้วยการเติบโตนี้ เราเลยตัดสินใจพัฒนาในส่วนติดต่อกับ MySQL ให้สำเร็จและได้เปิดใช้งานจริงในสองสามวันที่ผ่านมาครับ

MySQL เหมาะกับ high-volume website แต่อย่างไรก็ตามสำหรับ low-volume website นั้น SQLite ก็สามารถทำงานได้ดี การใช้ server-based database อย่าง MySQL นั้นมีข้อดีที่ศักยภาพเพิ่มขึ้น แต่ในขณะเดียวกันก็มีความเสี่ยงจากการถูก hack เพิ่มมากขึ้น ส่วน SQLite นั้นเป็น embedded database ไม่มีปัญหาเรื่องการจะถูก hack แต่ก็มีศักยภาพที่ด้อยกว่า ถ้าใครจะเลือกใช้ database ตัวใดตัวหนึ่งนี้ใน application ของคุณ ก็ต้องชั่งใจในข้อดีข้อด้อยสองข้อนี้ครับ

สำหรับตอนนี้ Enjoy the speed!