Capped Collection ใน MongoDB เป็นคอลเลกชันแบบ Fixed-Size ที่เก็บข้อมูลแบบ Circular Buffer (เขียนทับข้อมูลเก่าสุดเมื่อเต็ม) ขนาดสูงสุด ขึ้นอยู่กับการกำหนดของผู้ใช้ ผ่านพารามิเตอร์ size ไม่มีขีดจำกัดคงที่จาก MongoDB เอง
ไวยากรณ์การสร้าง Capped Collection
db.createCollection('yourCollectionName', {capped: true, size: yourValueInBytes})
ตัวอย่าง: สร้าง Capped Collection ขนาดใหญ่มาก (~1.9 PB)
> db.createCollection('cappedCollectionMaximumSize', {capped: true, size: 1948475757574646});
{ "ok": 1 }
ตรวจสอบข้อมูลคอลเลกชัน
> db.cappedCollectionMaximumSize.find().explain();
ผลลัพธ์ (แสดงว่าเป็น COLLSCAN บน Capped Collection):
{
"queryPlanner": {
"plannerVersion": 1,
"namespace": "test.cappedCollectionMaximumSize",
"indexFilterSet": false,
"parsedQuery": {},
"winningPlan": {
"stage": "COLLSCAN",
"direction": "forward"
},
"rejectedPlans": []
},
"serverInfo": {
"host": "DESKTOP-QN2RB3H",
"port": 27017,
"version": "4.0.5",
"gitVersion": "3739429dd92b92d1b0ab120911a23d50bf03c412"
},
"ok": 1
}
ข้อจำกัดและข้อควรระวัง
- size ระบุเป็น Bytes (บังคับ)
- สามารถระบุ
max(จำนวนเอกสารสูงสุด) ได้อีกพารามิเตอร์หนึ่ง (Optional) - ขนาดสูงสุดจริง จำกัดโดย พื้นที่ดิสก์ที่มีอยู่ และ ขีดจำกัดของระบบไฟล์/OS
- บน 64-bit Systems: ขนาดสูงสุดทฤษฎี ~16 TB ต่อคอลเลกชัน (WiredTiger)
- Capped Collection ไม่รองรับ Sharding
- ไม่สามารถ
deleteเอกสารเดี่ยวได้ (ต้อง drop collection ทั้งอัน) - เหมาะสำหรับ: Logs, Metrics, Cache, Audit Trail ที่ข้อมูลเก่าไม่ต้องเก็บ
ตัวอย่างใช้งานจริง
// Capped Collection สำหรับ Log เก็บได้ 100MB หรือ 10,000 docs
db.createCollection("appLogs", {
capped: true,
size: 104857600, // 100 MB
max: 10000 // สูงสุด 10,000 documents
});