TTL MongoDB

- [Người hướng dẫn] Một chỉ mục cung cấp một cách có tổ chức để tra cứu dữ liệu bằng cách lưu trữ một tập hợp con của dữ liệu với các con trỏ tới vị trí của các bản ghi đầy đủ. Có nhiều loại chỉ mục mà bạn có thể sử dụng để tăng tốc độ truy xuất dữ liệu dựa trên loại dữ liệu bạn lưu trữ trong bộ sưu tập của mình. Và cũng có các chỉ mục chuyên biệt, như chỉ mục thời gian tồn tại hoặc viết tắt là chỉ mục TTL. Chỉ mục TTL tăng tốc truy vấn giống như chỉ mục thông thường, nhưng chúng cũng tự động xóa tài liệu khỏi bộ sưu tập sau một khoảng thời gian nhất định đã trôi qua. Chúng đặc biệt hữu ích khi bạn đang tạo nhiều dữ liệu, chẳng hạn như có khóa và muốn dọn sạch dữ liệu đó sau một thời gian nhất định. Và chúng cũng có thể hữu ích với dữ liệu cần xóa sau một khoảng thời gian nhất định vì lý do quy định. Vì vậy, hãy tạo một trong những chỉ mục TTL này. Để tạo một chỉ mục TTL, chúng ta sẽ gọi phương thức createIndex và chúng ta sẽ phải gọi nó trên một…

Tải xuống các khóa học và học mọi lúc, mọi nơi

Xem các khóa học trên thiết bị di động của bạn mà không cần kết nối internet. Tải xuống các khóa học bằng ứng dụng LinkedIn Learning trên iOS hoặc Android của bạn

Gần đây tôi cần xóa một số tài liệu mà tôi đã lưu trong MongoDB sau một thời gian. Tôi có thể nghĩ ra một vài ví dụ về lý do tại sao chúng tôi muốn xóa dữ liệu sau một thời gian

  • nhật ký/sự kiện
  • khóa api/mã thông báo truy cập
  • người dùng không hoạt động
  • vân vân

Chúng tôi có thể làm điều đó bằng cách chạy một cronjob xóa dữ liệu, xóa dữ liệu mỗi khi chúng tôi chèn dữ liệu mới hoặc bất kỳ giải pháp nào khác

May mắn cho tôi, vợ tôi nói với tôi rằng MongoDB đã tích hợp sẵn cơ chế đó

Các chỉ mục TTL (Time-To-Live) là các chỉ mục trường đơn đặc biệt mà MongoDB có thể sử dụng để tự động xóa tài liệu khỏi bộ sưu tập sau một khoảng thời gian nhất định

Chuỗi nền trong MongoDB đọc các giá trị trong chỉ mục và xóa các tài liệu đã hết hạn khỏi bộ sưu tập (thường là mỗi phút)

Ví dụ: để tạo chỉ mục TTL trên

lastModifiedDate
trường của
eventlog
bộ sưu tập, hãy sử dụng thao tác sau trong trình bao mongo

db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

  • Trường được lập chỉ mục phải là loại ngày BSON hoặc một mảng ngày BSON
  • Nếu trường được lập chỉ mục trong tài liệu không phải là ngày hoặc mảng chứa (các) giá trị ngày, thì tài liệu sẽ không hết hạn
  • Nếu tài liệu không chứa trường được lập chỉ mục, tài liệu sẽ không hết hạn

xóa có điều kiện

Kể từ MongoDB 3. 2, một bộ sưu tập có thể được lập chỉ mục một phần bằng cách sử dụng biểu thức bộ lọc được chỉ định,

partialFilterExpression
. Chỉ mục TTL cũng có thể được sử dụng với chỉ mục một phần

Ví dụ

Xóa tài liệu đã tạo 1 giờ trước nếu

state
bằng với
TMP

db.eventlog.createIndex(
  { created_at: 1 },
  { expireAfterSeconds: 3600, partialFilterExpression: { state: 'TMP' } }
);

Xóa tài liệu đã tạo 1 ngày trước nếu

count
thấp hơn
5

db.eventlog.createIndex(
  { created_at: 1 },
  { expireAfterSeconds: 86400, partialFilterExpression: { count: { $lt: 5 } } }
);

Thông tin bổ sung về các chỉ mục một phần

Ví dụ thực tế

Gần đây tôi đã hoàn thành việc phát triển BundleMon, một công cụ miễn phí giúp bạn theo dõi kích thước gói ứng dụng của mình

Một trong những thành phần trong BundleMon là dịch vụ lưu các báo cáo lịch sử để so sánh kích thước gói giữa các nhánh. Vì vậy, khi bạn mở PR, BundleMon sẽ lưu một bản ghi với báo cáo kích thước gói hiện tại

Không cần lưu báo cáo quá 30 ngày nên mình mới thêm chỉ số TTL

eventlog
0

Cũng được xuất bản tại https. // nhà phát triển. đến/lironer/xóa-hết hạn-tài liệu-tự động-với-mongodb-ttl-index-l44

Chỉ số Thời gian tồn tại (TTL) được xác định cho mỗi bộ sưu tập dựa trên giá trị

eventlog
3 được cung cấp. Theo mặc định, các bộ sưu tập không có chỉ mục TTL

Ví dụ, bạn có thể sử dụng trình trợ giúp

eventlog
4 trong MongoDB Shell để lấy thông tin chỉ mục

eventlog
1

Ví dụ: bạn có thể sửa đổi thời hạn sử dụng cho chỉ mục TTL bằng cách sử dụng lệnh

eventlog
5

eventlog
2

Nếu đó không phải là thông tin bạn đang tìm kiếm, vui lòng cung cấp thêm một số chi tiết về môi trường của bạn

TTL trong MongoDB là gì?

Chỉ mục TTL là chỉ mục trường đơn đặc biệt mà MongoDB có thể sử dụng để tự động xóa tài liệu khỏi bộ sưu tập sau một khoảng thời gian nhất định hoặc tại một thời điểm đồng hồ cụ thể.

Làm cách nào để hết hạn dữ liệu trong MongoDB?

Tài liệu hết hạn vào một thời điểm đồng hồ cụ thể . Nếu trường ngày được lập chỉ mục chứa một ngày trong quá khứ, MongoDB coi tài liệu đã hết hạn. set the indexed date field to a value corresponding to the time the document should expire. If the indexed date field contains a date in the past, MongoDB considers the document expired.

Làm cách nào để tạo một phần chỉ mục trong MongoDB?

Để tạo chỉ mục một phần, hãy sử dụng db. bộ sưu tập. phương thức createIndex() với tùy chọn partialFilterExpression .