Skip to content

MongoDB: ปัญหา write performance ช้าลงเมื่อทำ index หลาย field

ผมอ่าน release note ของ MongoDB 3.0 ไปบ้างแล้ว เหตุที่ MongoDB 3.0 ต้องปรับปรุงประสิทธิภาพการเขียนข้อมูล, การทำ index และเปิดให้ใช้ storage engine ตัวใหม่เพื่อรองรับงานที่มีการเขียนหนักๆ (ยกตัวอย่างเช่น IoT) เพราะหากมีการทำ index หลาย field และมีการ insert เข้ามาเร็วๆ ความเร็วในการ insert จะลดลงค่อนข้างเห็นได้ชัด

วันนี้เจอกับตัวเองเลยครับ จริงๆ Official document ก็เตือนไว้แต่เนื่องจากคนมันดื้อเลยใช้ต่อ (สมน้ำหน้า :p) แต่ใช้ไปใช้มาแล้วมันช้าพาลหงุดหงิดเลยต้องแก้ปัญหาเฉพาะหน้าไปก่อน โดยการ drop index ทิ้งไปก่อน insert เสร็จแล้วค่อยสั่ง ensureIndex() อีกครั้ง (ช้า-เร็วแล้วแต่ปริมาณข้อมูล) หรือถ้าเป็นแอปพลิเคชันที่จำเป็นต้องทำงานอยู่ตลอดอาจจะต้องทำ replication หรือแยกเป็น 2 ก้อน ก้อนนึงใช้เก็บอย่างเดียว อีกก้อนก็ทำ index ใช้งานปกติ

ถ้าจำเป็นต้องทำ index จริงๆ ให้พิจารณาใช้ให้น้อยที่สุดครับ เช่น ทำเฉพาะ field ที่มีการ sort ส่วนอื่นถ้าไม่จำเป็นก็ไม่ต้องทำยิ่งใช้น้อย MongoDB ก็จะใช้ storage และ CPU น้อยตามไปด้วยครับ (ทำ index เยอะอาจเจอ CPU spike) การใช้งาน MongoDB index ลองอ่าน best practices ได้จาก ที่นี่ ครับ

Be First to Comment

Leave a Reply

Your email address will not be published.