Skip to content

Tag: mongodb

MongoDB | find() ด้วย Regular Expression แบบไหน ใช้/ไม่ใช้ index

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

คำสั่ง find() ของ MongoDB นั้นรองรับการ query ด้วย Regular Expression โดยสามารถเขียน syntax แบบ PCRE (Perl Compatible Regular Expression) ตัวอย่างเช่น

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

ผมอ่าน 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 ใช้งานปกติ

Nodejs and MongoDB real-time push

พอดีได้ทำโปรเจกต์แนวๆ นี้เลยแงะเอา code บางส่วนมาปล่อย เป็น real-time push service ที่เขียนด้วย Nodejs+Socket.io ใช้งานร่วมกับ MongoDB ครับ ผม push code ทั้งหมดไว้บน Github แล้ว รายละเอียดอ่านจาก README.md ได้เลยครับ (ภาษาอังกฤษกากหน่อยขออภัย -/\- ) Project url: https://github.com/khasathan/nodejs-mongodb-stream

Pattern การสร้าง real-time application ด้วย Node.js และ MongoDB

real-time app (ผมหมายถึง web application และ service ทั่วไปด้วยอะนะ) ถ้าหาข้อมูลตามอินเทอร์เน็ต เครื่องมือที่นิยมใช้งานคงหนีไม่พ้น Node.js, Socket.io สำหรับฐานข้อมูลอาจจะมีแนะนำให้เลือกใช้แตกต่างกันไปบ้างตามแต่ละงาน แต่ส่วนมากก็จะเป็นพวก NoSQL

โพสต์นี้ถ้าบันทึกโดยอ้างอิงจาก Node.js, Socket.io และ MongoDB เป็นหลักเพราะเป็นเครื่องมือที่เอามาใช้งานบ่อย

หลักการทำ real-time และคุณสมบัติเครื่องมือที่ผม survey ดูสรุปเป็นข้อๆ ตามนี้