Capped Collection là collection có dung lượng cố định (fixed-size), tự động xóa tài liệu cũ nhất khi đầy (FIFO - First In First Out). Phù hợp cho log, cache, metrics. Để chuyển collection thường thành Capped, dùng lệnh db.runCommand({ convertToCapped: ... }).
1. Tạo collection thường và chèn dữ liệu
> db.demo416.insertOne({ "StudentName": "David" });
> db.demo416.insertOne({ "StudentName": "Mike" });
> db.demo416.insertOne({ "StudentName": "Sam" });
2. Chuyển sang Capped Collection với size = 100 bytes
> db.runCommand({ convertToCapped: 'demo416', size: 100 });
{ "ok": 1 }
Lưu ý: size là dung lượng **tối đa tính bằng bytes** cho cả data + index. Giá trị 100 bytes rất nhỏ (chỉ demo), thực tế thường dùng MB/GB (ví dụ: 100 * 1024 * 1024 cho 100MB).
3. Kiểm tra trạng thái Capped
> db.demo416.stats();
Kết quả quan trọng:
{
"capped": true, // ĐÃ CHUYỂN THÀNH CAPPED
"maxSize": 256, // Kích thước tối đa thực tế (MongoDB căn chỉnh)
"max": -1 // Không giới hạn số document (-1 = vô hạn, chỉ giới hạn bằng size)
}
Đặc điểm Capped Collection:
- Không thể
deletetài liệu đơn lẻ (chỉdrop()cả collection). - Không thể
updatelàm tăng kích thước tài liệu. - Tự động xóa cũ khi insert mới làm vượt
maxSize. - Hiệu suất insert/read rất cao (vòng tròn - circular buffer).
- Hỗ trợ Tailable Cursor (theo dõi real-time như tail -f log).
Tạo mới Capped trực tiếp: db.createCollection("logs", { capped: true, size: 1000000, max: 5000 }).