redis กับ MongoDB เปรียบเทียบ ใช้ตัวไหนดีกว่ากัน

presented-by

คำถามยอดฮิด ผมเองก็เคยถามตัวเองเหมือนกัน ว่าเราจะเลือกได้อย่างไร ว่าเราจะใช้ redis หรือ MongoDB ดีกว่ากัน

ก่อนอื่น คงต้องให้คนอ่านทำความเข้าใจก่อน ว่า redis คืออะไร คือ database ที่ทำงานได้เร็วมาก และ mongoDB คืออะไร และตัวอย่าง mongoDB

เก็บข้อมูลถาวรหรือเปล่า

ง่ายมาก ถ้าข้อมูลที่เราต้องทำงานด้วยเป็นข้อมูลที่สำเนาชุดเดียว ไม่มีเก็บที่อื่นอีก อันนี้ MongoDB แน่นอนเพราะ มีความน่าเชื่อถือในการเก็บข้อมูลถาวรมากกว่า redis

ต้องการความเร็วสุดๆมั้ย

ถ้าต้องการความเร็วสุดๆ Redis ให้คุณได้มากกว่า MongoDB อย่างแน่นอน ทั้งอ่านและเขียนเลย โดยเฉพาะเมื่อเรา config ให้ redis ทำงานบน ram อย่างเดียวแล้วจะเร็วกว่ามากๆ และไม่รวนด้วย

ความซับซ้อนของข้อมูลที่เก็บ

ทั้ง redis ,mongoDB รองรับการเก็บข้อมูลเชิงโครงสร้างที่ซับซ้อนระดับหนึ่งทั้งคู่ คือไม่ใช่แค่ key value อย่างเดียว มี field ต่างๆด้วยในด้วย ถือว่า ข้อนี้ให้เสมอกัน

ความหลากหลายในการทำงาน

ข้อนี้ redis กินขาดเลย เพราะว่า redis รองรับการทำงานที่หลากหลาย ทั้ง sort, set, list, pub/sub และอื่นๆ ที่ต่างจาก mongoDB ทำงานเน้นที่ storage เป็นหลักเลย

ขนาดของข้อมูล

ถ้าใหญ่ ให้ mongoDB เลย เพราะ redis ทำงานบน RAM ที่ราคาแพงกว่า Harddisk/SSD มากๆ ทำให้ทรัพยากรที่รองรับการทำงานมีจำกัดด้วย

ความนิยม

mongoDB ได้รับความนิยมกว่ามาก คนใช้เยอะ คู่มือหลากหลาย ตัวอย่างอีกเพียบ redis ก็ยังตามมาอยู่ห่างๆ ไม่ได้หยุดอยู่กับที่

ความยากง่ายในการใช้งานจริง

ถ้าเป็นคนที่เข้าใจการใช้งานแล้ว (ไม่พูดถึงมือใหม่) redis ใช้งานง่ายกว่ามากๆ เพราะคำสั่งที่ให้จำเพิ่มมีไม่เยอะ และตรงไปตรงมา เงื่อนไขเวลาทำงานก็แทบไม่มีเลย

แล้วทำไมต้องเลือก database ตัวเดียว?

ข้อนี้ผมอยากให้ทุกคนที่ได้อ่าน ลองคิดสักนิดหนึ่ง ทุกอย่างในโลกไม่ได้มีคำตอบเดียว ระบบต่างๆ ก็ไม่จำเป็นต้องทำงานบน database ชนิดเดียว ผมมีงานหนึ่งที่ implement ให้ลูกค้า ราคา project นี้หลายแสนบาท ผมทำงานอยู่คนเดียวทั้งหมด ผมใช้ database MySQL + Redis โดยแบ่งส่วนการทำงานจากกันเป็นส่วนๆ เช่น เก็บข้อมูลถาวรก็เก็บลง MySQL เวลาใช้งานก็อ่านขึ้นมาเก็บ Redis จากนั้นก็อ่านจาก redis ตลอดไป เหล่านี้เป็นต้น ซึ่งถ้าคุณทำงานแล้วจะใช้ MySQL + mongoDB + Redis + memcache ก็ไม่ผิด แต่ต้องแยกแยะให้ออกว่า จังหวะไหนต้องใช้ตัวไหน เพราะการที่เรามี database หลากหลาย นั่นหมายถึงการ maintenance ยากและใช้เวลามากขึ้นรวมถึงใช้ resource ที่มากขึ้นด้วย

ดังนั้น อยากให้พิจารณาที่เรื่องการออกแบบเชิง software architecture มากกว่า เพราะว่าสุดท้ายเมื่อเราออกแบบเสร็จและพิจารณาจากการใช้งาน ความถี่ ขนาดของข้อมูลและอื่นๆแล้วเราก็จะได้คำตอบเอง