Capped collections là các Circular Collection có kích cỡ cố định mà theo sau thứ tự chèn để làm tăng cao hiệu suất của các hoạt động create, read và delete. Với Circular, nó nghĩa là khi kích cỡ cố định được cấp phát hết cho Collection, thì nó sẽ bắt đầu xóa Document cũ nhất trong Collection đó mà không cần cung cấp bất kỳ lệnh tường minh nào.
Capped Collection giới hạn các hoạt động cập nhật tới Document nếu các cập nhật đó làm tăng kích cỡ của Document. Khi Capped Collection lưu giữ các Document theo trật tự của Disk Storage, nó bảo đảm rằng kích cỡ tài liệu không tăng hơn kích cỡ được cấp phát trên Disk. Capped Collection là tốt nhất để lưu giữ thông tin log, cache data, …
Tạo Capped Collection trong MongoDB
Để tạo một Capped Collection, chúng ta sử dụng lệnh thường dùng là createCollection nhưng với tùy chọn capped là true và xác định kích cỡ tối đa (bằng byte) cho Collection đó.
>db.createCollection("cappedLogCollection",{capped:true,size:10000})
Với size của Collection, chúng ta cũng có thể giới hạn số Document trong Collection đó bởi sử dụng tham số max:
>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
Nếu bạn muốn kiểm tra xem một Collection là capped hoặc không, sử dụng lệnh isCapped:
>db.cappedLogCollection.isCapped()
Nếu có một Collection đang tồn tại mà bạn có ý định muốn chuyển đổi thành capped, bạn sử dụng code sau:
>db.runCommand({"convertToCapped":"posts",size:10000})
Code này sẽ chuyển đổi posts collection đang tồn tại thành một Capped Collection.
Truy vấn trên Capped Collection
Theo mặc định, một truy vấn find trên một Capped Collection sẽ hiển thị các kết quả trong thứ tự chèn. Nhưng nếu bạn muốn lấy các Document theo thứ tự ngược lại, sử dụng lệnh sort như sau:
>db.cappedLogCollection.find().sort({$natural:-1})
Dưới đây là một số điều cần lưu ý trong khi làm việc với Capped Collection:
- Chúng ta không thể xóa các Document từ một Capped Collection.
- Không có chỉ mục mặc định có mặt trong một Capped Collection, ngay cả trên trường _id.
- Trong khi chèn một Document mới, MongoDB không thực sự phải nhìn vào vị trí đặt Document mới đó trên Disk. Nó có thể chèn Document mới đó tại đuôi của Collection. Điều này làm cho hoạt động chèn trong Capped Collection diễn ra rất nhanh.
- Tương tự, khi đọc các Document, MongoDB chỉ phải trả về các Document theo cùng thứ tự như trên Disk. Điều này làm cho hoạt động đọc diễn ra rất nhanh.