การติดตั้งและจัดการฐานข้อมูล MongoDB ใน ServBay
MongoDB เป็นฐานข้อมูล NoSQL ชั้นนำที่มีชื่อเสียงเรื่องความยืดหยุ่น ความสามารถในการสืบค้นข้อมูลที่ทรงพลัง และรองรับการขยายในแนวนอน จึงเป็นตัวเลือกยอดนิยมในสายงานพัฒนาแอปพลิเคชันยุคใหม่ ServBay มอบสภาพแวดล้อมแบบอินทิเกรตให้กับนักพัฒนา macOS ทำให้ขั้นตอนติดตั้ง กำหนดค่า และจัดการ MongoDB หลายเวอร์ชันง่ายดาย พร้อมเครื่องมือบรรทัดคำสั่งหลักครบชุดสำหรับการพัฒนาและทดสอบในเครื่องที่รวดเร็วและมีประสิทธิภาพ
ภาพรวม: ทำไมต้องใช้ MongoDB กับ ServBay?
ServBay ไม่ใช่แค่ตัว Start/Stop บริการ แต่คือผู้จัดการสภาพแวดล้อมการพัฒนาครบวงจร สำหรับ MongoDB หมายความว่า:
- รันหลายเวอร์ชันและสลับได้ง่าย: คุณสามารถติดตั้งและรัน MongoDB หลายเวอร์ชัน (เช่น 5.0, 6.0, 7.0) ได้ด้วยคลิกเดียว สลับใช้ตามโปรเจ็กต์โดยไม่ต้องกังวลเรื่องคอนฟลิคนิ่งของสภาพแวดล้อม
- กำหนดค่าด้วย UI แบบกราฟิก: ลืมการแก้ไฟล์ config ซับซ้อน คุณตั้งค่า MongoDB ได้อย่างง่ายดายใน UI ไม่ว่าจะเป็นพอร์ต IP ไดเรกทอรีข้อมูล ฯลฯ
- เครื่องมือแบบอินทิเกรต: ServBay จัดการรวมเครื่องมือหลักจาก MongoDB ไว้ให้ ได้แก่ MongoDB Shell (
mongosh
) และ MongoDB Database Tools เช่นmongostat
,mongotop
,mongodump
, และmongorestore
พร้อมใช้งานทันที
คู่มือนี้จะนำคุณตั้งแต่เริ่มต้นไปจนถึงการใช้ความสามารถขั้นสูง ทั้งติดตั้ง กำหนดค่า จัดการแบบอินเทอร์แอคทีฟ มอนิเตอร์ประสิทธิภาพ สำรองและกู้คืนข้อมูล
1. การติดตั้งและกำหนดค่า MongoDB
ขั้นตอนที่ 1: ติดตั้งแพ็คเกจ MongoDB
การติดตั้ง MongoDB บน ServBay มีขั้นตอนดังนี้
เปิดแอปพลิเคชัน ServBay
ที่แถบเมนูด้านซ้าย คลิกที่ ซอฟต์แวร์ (Packages)
ในรายการแพ็คเกจ เลื่อนลงไปที่หมวด
Databases
หาMongoDB
เลือกเวอร์ชัน MongoDB ที่ต้องการ (เช่น
MongoDB 7.0
) แล้วคลิกปุ่มติดตั้งทางขวา ServBay จะดาวน์โหลดและติดตั้งอัตโนมัติ
ขั้นตอนที่ 2: ตั้งค่ารายละเอียดของ MongoDB
ติดตั้งเสร็จแล้ว สามารถตั้งค่าต่างๆ ให้เหมาะสมกับโปรเจ็กต์ของคุณได้
ที่แถบเมนูซ้าย เลือก Databases -> MongoDB -> เวอร์ชันที่เพิ่งติดตั้ง (เช่น
MongoDB 7.0
)บนหน้านี้ คุณปรับแต่งค่าหลักต่างๆ ได้ เช่น
- Bind IP: ที่อยู่ IP ที่ MongoDB ใช้สำหรับรับการเชื่อมต่อ เริ่มต้นคือ
127.0.0.1, ::1
(ปลอดภัยสุด ใช้ได้ในเครื่องเท่านั้น) - Bind Port: พอร์ตเชื่อมต่อ โดยปกติ MongoDB คือ
27017
(แนะนำให้ใช้ค่าดีฟอลต์เว้นแต่ว่ามีความต้องการพิเศษ) - Socket: ที่อยู่ไฟล์ Unix socket สำหรับเชื่อมต่อในเครื่อง สำหรับการใช้งานโลคัล การใช้ socket จะเร็วกว่า TCP/IP เพราะไม่ผ่านเลเยอร์เครือข่าย
- Data dir: โฟลเดอร์ที่ MongoDB เก็บข้อมูลทั้งหมด (เช่น collection, index) มีค่าเริ่มต้นที่เหมาะสมโดย ServBay คลิกไอคอนโฟลเดอร์เพื่อเปิดดูใน Finder ได้ทันที
- Additional Parameters: โซนสำหรับปรับค่าขั้นสูง เช่น ต้องการเปิด authentication ก็เพิ่ม
--auth
ได้ที่นี่
- Bind IP: ที่อยู่ IP ที่ MongoDB ใช้สำหรับรับการเชื่อมต่อ เริ่มต้นคือ
ขั้นตอนที่ 3: เริ่มต้นบริการ MongoDB
- เมื่อตั้งค่าทุกอย่างเสร็จ ให้คลิก Save ด้านล่างขวา
- กลับไปที่เมนู Packages หา MongoDB เวอร์ชันที่ตั้งค่าแล้ว กดปุ่มเปิดใช้งานทางขวา
- เมื่อสวิตช์เป็นสีเขียวและไฟสถานะขึ้น หมายความว่า MongoDB พร้อมใช้งานและรับการเชื่อมต่อแล้ว
2. การจัดการแบบอินเทอร์แอคทีฟ: ชำนาญ MongoDB Shell (mongosh
)
mongosh
เป็น command-line shell รุ่นใหม่จาก MongoDB มีจุดเด่นคือไฮไลต์ซินแท็กซ์ auto-complete บันทึกประวัติคำสั่ง รองรับสคริปต์ เหมาะสำหรับโต้ตอบและสั่งงานกับฐานข้อมูล
การติดตั้ง MongoDB Shell
ServBay มีแพ็คเกจ mongosh
ให้คุณติดตั้งเมื่อจำเป็น
- ที่หน้า Packages หา
MongoDB Shell
- กดปุ่มติดตั้ง Mongosh จะใช้ได้แบบ global ใน terminal สภาพแวดล้อม ServBay
วิธีใช้ mongosh
คุณเปิดใช้งาน mongosh
ได้จาก terminal (ทั้ง Terminal ของ macOS หรือ iTerm2)
การเชื่อมต่อพื้นฐาน: เปิด terminal แล้วพิมพ์คำสั่งนี้เพื่อเชื่อมกับ MongoDB ที่พอร์ต 27017 ในเครื่อง
bashmongosh
1หรือใช้ connection string เต็มรูปแบบ
bashmongosh "mongodb://127.0.0.1:27017"
1ตัวอย่างการใช้งาน CRUD แบบอินเทอร์แอคทีฟ: เมื่อเชื่อมต่อสำเร็จ จะเข้าสู่ environment แบบ JavaScript พร้อมสรรพ มาดูตัวอย่างการใช้งาน
ขั้นตอน 1: เลือก/สร้างฐานข้อมูล
javascript// คำสั่งนี้จะสลับไปที่ฐานข้อมูล servbay-demo หากไม่มีก็จะสร้างใหม่เมื่อมีการเขียนข้อมูลครั้งแรก use servbay-demo
1
2ขั้นตอน 2: สร้าง collection และบันทึกข้อมูล (Create)
javascript// แทรกข้อมูลผู้ใช้ 1 record db.users.insertOne({ _id: 1, name: "Alice", email: "alice@servbay.demo", age: 30, tags: ["developer", "php", "backend"], joined_date: new Date("2023-01-15") }) // แทรกผู้ใช้หลายคนในคราวเดียว (เพื่อให้สืบค้นข้อมูลหลากหลายขึ้น) db.users.insertMany([ { _id: 2, name: "Bob", email: "bob@servbay.demo", age: 25, tags: ["designer", "ui", "frontend"] }, { _id: 3, name: "Charlie", email: "charlie@servbay.demo", age: 35, tags: ["developer", "python", "data"] }, { _id: 4, name: "Diana", email: "diana@servbay.demo", age: 29, tags: ["developer", "nodejs", "backend"] } ])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16ขั้นตอน 3: ค้นหาข้อมูล (Read)
javascript// ค้นหาเอกสารทั้งหมดใน collection แล้วแสดงผลแบบสวยงาม db.users.find().pretty() // ค้นหาเฉพาะนักพัฒนาที่อายุเกิน 28 ปี db.users.find({ age: { $gt: 28 }, tags: "developer" }) // คืนค่าชื่อและอีเมลเท่านั้น ไม่แสดง _id db.users.find({}, { name: 1, email: 1, _id: 0 })
1
2
3
4
5
6
7
8ขั้นตอน 4: อัปเดตข้อมูล (Update)
javascript// อัปเดตรายการของ Alice เพิ่ม tag 'lead' และปรับอายุ db.users.updateOne( { name: "Alice" }, { $set: { age: 31 }, $addToSet: { tags: "lead" } } // $addToSet ป้องกัน tag ซ้ำซ้อน ) // อัปเดตผู้ใช้ที่เกี่ยวกับ backend ทุกคน ให้มีสถานะ active db.users.updateMany( { tags: "backend" }, { $set: { status: "active" } } )
1
2
3
4
5
6
7
8
9
10
11ขั้นตอน 5: ลบข้อมูล (Delete)
javascript// ลบข้อมูลของ Bob db.users.deleteOne({ name: "Bob" }) // ตรวจสอบผลลบ db.users.find({ name: "Bob" }).count() // ต้องคืนค่า 0
1
2
3
4
5
3. มอนิเตอร์และจัดการ MongoDB แบบมืออาชีพ
ServBay มีแพ็คเกจ MongoDB Database Tools
ซึ่งประกอบด้วย mongostat
, mongotop
, mongodump
, และ mongorestore
สำหรับแอดมินโดยเฉพาะ
การติดตั้ง MongoDB Database Tools
- ที่หน้า Packages หา
MongoDB Database Tools
- คลิกปุ่มติดตั้ง
3.1 ใช้ mongostat
สำหรับมอนิเตอร์สถานะแบบเรียลไทม์
mongostat
เปรียบเหมือนเครื่องวัดชีพจรของ MongoDB แสดงค่าประสิทธิภาพหลักแบบอัปเดตต่อเนื่อง เหมาะเจาะสำหรับจับ bottleneck หรือดูโหลด
วิธีใช้งานพื้นฐาน: เปิด Terminal แล้วรัน
bashmongostat
1จะเห็นผลลัพธ์ตัวอย่างแบบนี้ (ทุกแถวคือ snapshot แต่ละวินาที)
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time *0 *0 *0 *0 0 1|0 0.0% 23.2% 0 1.29G 84.0M 0|0 1|0 103b 501b 4 Nov 26 15:30:00.001 *0 *0 *0 *0 0 1|0 0.0% 23.2% 0 1.29G 84.0M 0|0 1|0 71b 501b 4 Nov 26 15:30:01.001
1
2
3คำอธิบายคอลัมน์สำคัญ:
insert
,query
,update
,delete
: จำนวนครั้งต่อวินาทีตามแต่ละกิจกรรมdirty
: เปอร์เซ็นต์ข้อมูลใน cache ที่ยังไม่บันทึกลงดิสก์used
: เปอร์เซ็นต์ที่ storage engine ใช้ cachevsize
,res
: การใช้ virtual และ resident memoryqrw
,arw
: จำนวน client ที่รออ่าน/เขียนnet_in
,net_out
: ข้อมูลเข้าออกในเครือข่ายconn
: จำนวนการเชื่อมต่อปัจจุบัน
กรณีศึกษา: ตรวจสอบโหลดการเขียนสูง
- เปิด Terminal A เชื่อมกับ
mongosh
แล้วรัน script 模仿การเขียน log ความถี่สูง:javascript// ใช้ใน mongosh use log_system print("Starting high-frequency log insertion...") while (true) { db.app_logs.insertOne({ level: "INFO", message: "User activity detected.", timestamp: new Date() }); sleep(50); // เขียน log ทุก 50 ms (20 ครั้ง/วินาที) }
1
2
3
4
5
6
7 - เปิด Terminal B รัน
mongostat
โดยปรับ interval เป็น 2 วินาทีเก็บข้อมูลเฉลี่ยbashmongostat 2
1 - สังเกตผลลัพธ์ใน Terminal B จะพบว่า
insert
ขึ้นประมาณ*40
(20 ครั้ง/วินาที x 2 วินาที) เห็นโหลดการเขียนแบบเรียลไทม์
- เปิด Terminal A เชื่อมกับ
3.2 ใช้ mongotop
เพื่อดูระยะเวลาการอ่าน/เขียนแต่ละ collection
mongotop
จะช่วยบอกว่า collection ใดคือ hot spot โดยแสดงเวลาการอ่าน/เขียนของแต่ละ collection ในแต่ละช่วง
วิธีใช้พื้นฐาน: รันคำสั่งนี้ใน terminal (refresh ทุก 1 วินาที)
bashmongotop
1ตัวอย่าง output
ns total read write time local.oplog.rs 1101ms 155ms 946ms Nov 26 15:35:00.000 servbay-app.sessions 210ms 1ms 209ms Nov 26 15:35:00.000 servbay-app.articles 15ms 15ms 0ms Nov 26 15:35:00.000
1
2
3
4อธิบายคอลัมน์:
ns
: namespace (เช่นdbname.collection
)total
: รวมเวลาในการอ่านเขียนทั้งหมดread
: เวลาอ่านwrite
: เวลาเขียน
กรณีศึกษา: หา collection ที่โหลดสูง
- ใน Terminal A (
mongosh
) 模仿แอปที่อัปเดต session บ่อยๆ และอ่านบทความนานๆ ครั้ง:javascript// ใช้ใน mongosh use servbay_app print("Simulating application load...") // อัปเดต session ทุก 50ms setInterval(() => { db.sessions.updateOne({ sid: "session_abc" }, { $set: { data: Math.random() } }, { upsert: true }); }, 50); // อ่าน articles ทุก 500ms setInterval(() => { db.articles.find({ tags: "featured" }).limit(5).toArray(); }, 500);
1
2
3
4
5
6
7
8
9
10
11
12 - ใน Terminal B รัน
mongotop
โดยกำหนด interval ทุก 5 วินาทีbashmongotop 5
1 - สังเกตผลลัพธ์ใน Terminal B จะเห็นว่า collection
servbay_app.sessions
มี write และ total time สูงมาก ส่วนservbay_app.articles
จะขึ้น read time ไม่สูง ข้อมูลนี้จะช่วยชี้ว่าจะปรับจูนโปรแกรมตรงไหน
- ใน Terminal A (
3.3 ใช้ mongodump
สำรองข้อมูล
mongodump
ช่วยสำรองข้อมูล MongoDB ในรูปแบบ binary (BSON)
- สำรองฐานข้อมูลเดียว:bash
mongodump --db servbay-demo --out /Applications/ServBay/backup/mongodb/servbay-demo-backup-$(date +%F)
1 - สำรอง collection เดียว:bash
mongodump --db servbay-demo --collection users --out /Applications/ServBay/backup/mongodb/users-backup
1 - สำรอง MongoDB instance (ทุกฐานข้อมูล):bash
mongodump --out /Applications/ServBay/backup/mongodb/full-instance-backup
1
3.4 ใช้ mongorestore
สำหรับกู้คืนข้อมูล
mongorestore
ใช้คืนค่าข้อมูลที่สำรองไว้ด้วย mongodump
- กู้คืนฐานข้อมูลเดียว:bash
# --drop จะลบ collection เดิมก่อนคืนข้อมูล เพื่อความสะอาด mongorestore --drop --db servbay-demo /Applications/ServBay/backup/mongodb/servbay-demo-backup-2023-11-26/servbay-demo/
1
2 - กู้คืน collection เดียวเป็น collection อื่น:bash
mongorestore --db servbay-demo --collection users_restored /Applications/ServBay/backup/mongodb/users-backup/users.bson
1
4. การเชื่อมต่อกับเครื่องมือกราฟิก (GUI)
นอกจาก command-line คุณยังสามารถใช้โปรแกรม GUI สำหรับจัดการ MongoDB ใน ServBay ได้ทุกตัว เหมาะสำหรับดูข้อมูลและสร้าง pipline ต่างๆ ได้สะดวก ตัวอย่างเช่น MongoDB Compass, TablePlus หรือ Studio 3T
การเชื่อมต่อใน GUI ให้ระบุค่าต่อไปนี้:
- Host:
127.0.0.1
- Port:
27017
- Authentication: ถ้าไม่ได้ตั้ง
--auth
และสร้างผู้ใช้ไว้ใน Additional Parameters ให้เว้นว่างช่องนี้
สรุป
ServBay ผสานความทรงพลังของ MongoDB เข้ากับความงามสไตล์ macOS มอบประสบการณ์การพัฒนาโลคัลที่ไม่มีใครเทียบ สำหรับนักพัฒนา คู่มือนี้ช่วยให้คุณติดตั้ง เปิดใช้งาน กำหนดค่า MongoDB ได้ง่ายดาย ชำนาญการใช้ mongosh
สำหรับการจัดการ, ใช้ mongostat
และ mongotop
เพื่อมอนิเตอร์ประสิทธิภาพแบบมืออาชีพ ตลอดจนสำรองและกู้ข้อมูลด้วย mongodump
และ mongorestore
อย่างมั่นใจ พร้อมนำ MongoDB ไปใช้ในโปรเจ็กต์ถัดไปของคุณได้อย่างเต็มที่