Storage Engine ของ MongoDB by

31
Mar
0

MongoDB คือ NoSQL ที่ได้รับความนิยมสูงมากในช่วงหลายปีที่ผ่านมา แทบจะเป็นเบอร์หนึ่งในงานทั่วๆ ไปแล้วละมั้ง (แต่ผมยังยินยันเหมือนเดิมว่าไม่ควรใช้โดยที่ไม่มองทางเลือกอื่นก่อน มันไม่สามารถแทน MySQL ได้ 100% จึงควร Choose the right thing at the right job นะครับ อ่านเพิ่มเติมได้ที่บทความเก่าที่นี่) สำหรับคนที่ไม่ได้ตามข่าว ตั้งแต่ MongoDB 3.0 เป็นต้นมา MongoDB ได้ปรับปรุงระบบใหม่ เพิ่มระบบ Storage Engine เข้ามา คล้ายกับ MySQL ที่มี MyISAM และ InnoDB ให้เลือก หรือจะเปลี่ยนเป็น Storage Engine ตัวอื่นก็ได้ตามอิสระ

Storage Engine พูดง่ายๆ ก็คือวิธีการเก็บข้อมูลว่าจะเก็บในรูปแบบไหน อย่างไร ซึ่งเราสามารถ Download Storage Engine จากผู้พัฒนารายอื่นมาเชื่อมต่อได้อย่างอิสระให้เหมาะสมกับลักษณะงานของเราได้ ปัจจุบันมี Storage Engine ดังนี้

engines-timeline

  1. MMAPv1 – แถมมากับ MongoDB ซึ่งถูกใช้งานมาอย่างยาวนานตั้งแต่ MongoDB version แรกจนปัจจุบัน และตั้งแต่เวอร์ชั่น 3.2 เป็นต้นไป จะไม่ใช่ default engine อีกต่อไป หลักการทำงานคือใช้ Memory Map ของ OS มาเป็นตัวช่วยจัดการ Memory ให้ทั้งหมด ไม่มีระบบจัดการ Memory เป็นของตัวเอง ทำให้สมัยก่อนขึ้นชื่อเรื่องสวาปาม Ram อย่างมาก และห้ามมี application ตัวอื่นรันพร้อมๆ กันในเครื่องเดียวกันเด็ดขาด หากต้องการใช้ MongoDB หนักๆ ควรแยกเครื่องออกจากกันซะ มิเช่นนั้น application อื่นๆ จะโดนดูด Ram จนหมดตัว (น่ากลัวไหมล่ะ) และยังมีข้อจำกัดอีกมากมายเช่น ไม่มีระบบบีบอัดข้อมูลที่บันทึกลง Disk ทำให้นอกจากกิน Ram เยอะมากแล้วยังกิน Disk เยอะมากอีกตะหาก และ Collection ของระบบนี้ (เทียบได้กับ Table ใน MySQL) จะไม่มีระบบ Lock เฉพาะ Document เวลาแก้ไข (Document เทียบได้กับ row ใน table) เวลาโดน Lock จะ Lock ทั้ง Collection ซึ่งส่งผลเสียอย่างมากหากต้องมีการแก้ไขข้อมูลเยอะๆ ปัจจุบันไม่แนะนำให้ใช้งานครับ
  2. WireTiger – เป็น Storage Engine น้องใหม่ที่มาจากการที่ MongoDB ไปซื้อบริษัท WireTiger ผนวกรวมเข้ากับตัวเอง และปัจจุบันเป็น Default Storage Engine ตั้งแต่เวอร์ชั่น 3.2 เป็นต้นไป แก้ไขปัญหาของ MMapv1 ไปหลายอย่างเช่นมีระบบบีบอัดข้อมูลที่บันทึกลง Disk ทำให้ขนาดไฟล์เล็กลง 10 เท่า!! และมีการ Lock ที่ระดับ Document ทำให้ไม่ต้องแย่ง resource กันเวลา update ไม่เกิดการรอกันไปมามากเกินไป และหาก Data Set สามารถยัดลง Memory ได้พอ WireTiger จะเป็น Storage Engine ที่เร็วที่สุดและดีที่สุด! แต่ถ้าข้อมูล Data Set ใหญ่กว่า Memory ความเร็วการใช้งานจะช้าลงเรื่อยๆ อย่างมีนัยยะเลยทีเดียวซึ่งจะหลายเป็น Binary Tree Engine ธรรมดาๆ ไป จึงช้าลง
  3. PerconaFT – เป็น Storage Engine ที่ต้อง download เป็น MongoDB เวอร์ชั่นพิเศษจากเว็บ percona และจะมีเลขเวอร์ชั่นและ feature ตามท้าย MongoDB ตัวหลักอยู่ประมาณหนึ่ง (ปัจจุบันเป็น MongoDB 3.0 ตามหลังเวอร์ชั่นหลักคือ 3.2) เมื่อก่อนชื่อ TokuMX และโดน Percona ซื้อไป เปลี่ยนชื่อใหม่เป็น Percona for MongoDB ตัวนี้มีจุดเด่นคือมี Percona เป็น Back ซึ่งเชี่ยวชาญด้านการ Modify Database ดังๆ มาปรับปรุงให้เทพขึ้น (เช่น MySQL ซึ่งผมใช้อยู่ และติดงอมแงม) และมี Tools ของตัวเองมาช่วยมากมายเช่น Tools ที่ช่วยเรื่อง Hot Backup และ Tools อื่นๆ ที่ช่วยให้ชีวิต DBA ง่ายขึ้นตามมา จุดเด่นอีกอย่างคือนอกจากจะมีทั้งการบีบอัดข้อมูล, Document Level Lock เหมือน WireTiger แล้วยังปรับปรุงเรื่องความเร็วหาก Data Set มีขนาดใหญ่กว่า Memory โดยจะยังรักษาความเร็วไว้ได้อย่างคงที่ เพราะใช้เทคโนโลยีส่วนตัวที่ชื่อว่า Fractal Tree ซึ่งผมเองเลือกใช้ตัวนี้ครับ สาเหตุหนึ่งเพราะผมเป็นติ่ง Percona มาตั้งแต่ MySQL แล้วด้วย 555
  4. RocksDB – Storage Engine น้องใหม่จาก Facebook เป็นการันตี สร้างขึ้นจาก LevelDB ซึ่งเป็นฐานข้อมูลแบบ key-value ที่ open source จาก Google ถ้า Download จาก website Percona ก็จะแถม Engine ตัวนี้มาให้เลือกเลยโดยไม่ต้อง setup เพิ่มเช่นกัน ใช้ LSM Tree ในการเก็บข้อมูล ทำให้ Write ได้เร็วกว่า PerconaFT เหมาะกับการเก็บ Log มาก แต่แลกกับการที่ Read ข้อมูลได้ช้ากว่า PerconaFT

หากใครมี use case แบบไหนก็เลือกใช้ให้เหมาะสมกับตัวเองนะครับ ขอให้โชคดี :)

อ้างอิงข้อมูล:

https://www.percona.com/blog/2015/12/23/percona-server-for-mongodb-storage-engines-in-iibench-insert-workload/
https://www.percona.com/blog/2016/01/06/mongodb-revs-you-up-what-storage-engine-is-right-part-1/
https://www.percona.com/blog/2016/01/11/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-2/
https://www.percona.com/blog/2016/01/20/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-3/
https://www.percona.com/blog/2016/01/27/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-4/

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post