Trong MongoDB, chúng ta có thể ghi đọc các thông tin vào một collection mà không nhất thiết phải thực hiện tạo nó trước hết. Tuy nhiên, chúng ta hoàn toàn có thể tạo collection trước khi thao tác với dữ liệu trên chính collection này như việc sử dụng một database và bảng trong Transaction SQL vậy bằng cách sử dụng capped collection trong MongoDB.

1. Capped Collection là gì?

Chúng 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 CRUD. Nó có nghĩa là khi kích cỡ được cấp phát hết cho Collection thì các document cũ nhất trong nó sẽ bị xóa mà không cần 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 chúng có thể làm tăng kích cỡ của document. Khi collection lưu giữ các document theo trật tự của ổ đĩa, nó sẽ đảm bảo 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 đĩa.

Với các thông tin ở trên, chúng ta có thể dễ dàng thấy được là Capped Collection sẽ là một giải pháp tốt để thực hiện lưu các thông tin log hay cache.

2. Cách 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.

>>> Xem thêm bài viết về MongoDB:

Tìm hiểu về cơ sở dữ liệu phi quan hệ MongoDB

Sử dụng map reduce trong MongoDB

Giới thiệu về GridFS trong MongoDB

3. 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ị kết quả theo thứ tự chèn. Trong trường hợp cần lấy các document theo thức tự ngược lại thì chúng ta sẽ cần định nghĩa lệnh $sort vào trong truy vấn. Cụ thể sẽ như thế này:

>db.cappedLogCollection.find().sort({$natural:-1})

Một điều lưu ý là chúng ta không thể xóa các document từ một Capped Collection. Ngay cả chỉ mục mặc định của một document cũng là thứ không tồn tại trong một Capped Collection. 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.

Kết

Trên đây là những thông tin rất hữu ích về một loại collection có thể coi là có khả năng tự động dọn dẹp các dữ liệu quá cũ mà chúng ta có thể không dùng đến. Một trong những use case cụ thể nhất của Capped Collection trên thực tiễn là việc sử dụng nó để lưu trữ một số lượng dòng log cụ thể mới nhất, log cũ hơn sẽ được tự động dọn dẹp mà không cần admin phải can thiệp một cách tường minh.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: