วันอาทิตย์ที่ 6 ตุลาคม พ.ศ. 2556

MongoDB Use Memmory Infomation

บางคนลอง ติดตั้ง MongoDB บนเครื่องตัวเอง แล้วใช้คำสั่ง top ของ linux ดูว่า RAM เหลือเท่าไหร่
อาจจะตกใจว่า โอ้แม่เจ้า ทำไม MongoDB มันกิน RAM ขนาดนี้ เพียงแค่ start หรือเอาข้อมูลเข้าไปนิดเดียว ยังขนาดนี้
แล้วถ้าข้อมูลเยอะกว่านี้ จะกินขนาดไหน

ที่เป็นอย่างนี้เพราะ MongoDB ใช้เทคนิคที่เรียกว่า Memory-mapped file
http://en.wikipedia.org/wiki/Memory-mapped_file

การอ่าน-เขียนข้อมูล จะทำผ่าน RAM โดยข้อมูลที่จัดเก็บอยู่บน ฮาร์ดดิสก์
ดังนั้นไม่แปลกใจเลยว่าทำไม MongoDB มันถึงเร็ว

แต่ MongoDB ไม่ได้กิน RAM อย่างที่คิดนะครับ มันเพียงแค่ ยืมมาใช้งานเฉยๆ
หมายความว่า ถ้าเรามี RAM เหมือน ถ้า MongoDB มันต้องการใช้งาน มันจะยืมมาใช้ก่อน โดยเรียกว่าการทำ Virtual Memory
แต่ถ้ามี Process หรือ Program ตัวไหนต้องการ RAM มันก็จะคืน ที่มันยืมมากลับไปให้

พอเป็นอย่างนี้ เราก็สบายใจได้แล้วนะครับว่า MongoDB ไม่ได้กิน RAM อย่างที่เข้าใจกัน
มันเป็นเพราะเทคนิค หรือโครงสร้างของ MongoDB เองที่ออกแบบมาอย่างนี้ เพื่อให้ใช้ Resource ของเครื่องเราได้เต็มประสิทธิภาพที่สุด