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 มากกว่า เพราะว่าสุดท้ายเมื่อเราออกแบบเสร็จและพิจารณาจากการใช้งาน ความถี่ ขนาดของข้อมูลและอื่นๆแล้วเราก็จะได้คำตอบเอง

mongoDB คืออะไร และตัวอย่าง mongoDB

mongoDB Logo

mongoDB คือชื่อของ Database แบบ NoSQL แบบหนึ่ง (อ่านต่อเรื่อง NoSQL กับ NoSQL คืออะไร) โดยเราไม่ต้องเตรียมสร้าง table , field เอาไว้รอก่อน เหมือนอย่าง Database ทั่วไป คิดอยากจะเก็บอะไรก็เก็บเข้าไปได้เลย

มันไม่ใช่ Relational database ดังนั้นไม่ต้องสร้างโครงสร้างก่อนใช้

หรือพูดง่ายๆคือ ไม่ต้องกำหนดโครงสร้างข้อมูลที่เราจะเก็บ แค่คิดอยากจะเก็บอะไรก็เก็บเข้าไปได้เลย อ่านต่อ… “mongoDB คืออะไร และตัวอย่าง mongoDB”

NoSQL คืออะไร คือ database ที่ทำงานได้เร็ว และ หลากหลาย

NoSQL database

ความแตกต่างหลักๆของ Relational database กับ NoSQL database ก็เป็นเรื่องของความเร็ว ที่เราได้ประโยชน์ และเรื่องการทำงานที่เป็นแบบไม่ต้องสร้างความสัมพันธ์ให้กับมัน รวมไปถึง feature พิเศษที่เกิดมาเพื่อเหมาะกับงานแต่ละแบบด้วย

ทำงานแบบไม่ต้องเขียน SQL อีกต่อไป

SQL ก็เป็นภาษาหลักที่เราต้องเขียนเพื่อจัดการกับข้อมูลที่เก็บใน Database แบบ relational เป็นหลัก แต่ว่า NoSQL ทำให้เราสามารถเขียนอ่านแก้ไขข้อมูลโดยไม่ต้องเขียน SQL command อีกต่อไป แต่ว่าจะต้องใช้คำสั่งเฉพาะ ของ NoSQL แต่ละตัวที่เราเอามาใช้งานเองเท่านั้น อ่านต่อ… “NoSQL คืออะไร คือ database ที่ทำงานได้เร็ว และ หลากหลาย”

redis คืออะไร คือ database ที่ทำงานได้เร็วมาก

Redis logo

ถ้าเอาให้ถูกต้องจริงๆ เค้านิยามว่า Redis เป็น in-memory data structure store หรือ ระบบเก็บข้อมูลแบบกึ่งมีโครงสร้าง ที่ทำงานบน Ram แต่อยากให้มองว่ามันเป็นเหมือน database ที่ทำงานบน Ram ก็ไม่ผิดเท่าไรหรอก แต่ว่าความสามารถของมันค่อนข้างพิเศษมาก เพราะว่ามันทำงานได้เร็วมากๆ จึงถูกนิยมเอามาทำเป็น Caching หรือเป็น temporary database เพื่อใช้ในการประมวลผลงานขนาดใหญ่ได้

ถ้าเปรียบเทียบกับตัวอื่นที่คุ้นหูก็จะเป็น memcached ที่ทำหน้าที่เป็น key-value data store system นั่นแหล่ะ แต่ Redis มีดีกว่านั้นอีกเยอะมาก เพราะว่า key-value มันทำได้เป็นพื้นฐานอยู่แล้ว แต่ว่ามีลูกเล่นอื่นๆ ให้เราเอามาใช้ได้เลย เช่น hashes ที่เปรียบเหมือนการเก็บเข้า key เดียว แต่ว่า value มี array อยู่ข้างในอีกด้วย และเราสามารถดึงเอา index ใด index หนึ่งออกมาใช้ได้ หรือเปลี่ยนค่าเฉพาะบาง index หรือแม้กระทั่งลบออกก็ทำได้ ถ้าเราเก็บเป็น memcached เราจะต้อง ดึงทุก index ออกมากระทำให้เป็นชุด array ที่สมบูรณ์ก่อนค่อยใส่กลับเข้าไป ซึ่งมันจะช้ากว่าอย่างเห็นได้ชัด อ่านต่อ… “redis คืออะไร คือ database ที่ทำงานได้เร็วมาก”

เปลี่ยนโดเมน ของเว็บที่ใช้ WordPress แบบเร็วๆ

wordpress

wordpress เมื่อเราเปลี่ยนโดเมนเราจะต้องแก้ไขข้อมูลใน database ด้วยหลายส่วนเลย ผมสรุปให้เป็นบทความนี้ พร้อมทั้ง code MySQL ด้วยเลยเพื่อความสะดวก

เมื่อเราตั้งค่าเปลี่ยนโดเมนจาก hosting เรียบร้อยแล้ว เวลาที่เราเปิดเว็บ จะพบว่า wordpress พยายาม redirect กลับไปโดเมนเดิม ดังนั้นเราต้องแก้ที่ database ด้วยการเปิดตัวจัดการ database ขึ้นมา อาจจะเป็น PHPMyAdmin หรือว่า MySQL client ตัวอื่นก็ได้ แล้วเชื่อมต่อเข้าไปที่ database ที่กำลังรัน wordpress อ่านต่อ… “เปลี่ยนโดเมน ของเว็บที่ใช้ WordPress แบบเร็วๆ”