Trang này mô tả cách sử dụng MongoDB API, bảng điều khiển Cloud và Google Cloud CLI để định cấu hình chỉ mục thời gian tồn tại (TTL).
Tổng quan về thời gian tồn tại
Sử dụng chỉ mục TTL để tự động xoá dữ liệu cũ khỏi cơ sở dữ liệu. Chỉ mục TTL chỉ định một trường nhất định làm thời gian hết hạn cho các tài liệu trong một tập hợp nhất định. Với TTL, bạn có thể giảm chi phí lưu trữ bằng cách xoá dữ liệu lỗi thời. Dữ liệu thường bị xoá trong vòng 24 giờ sau thời gian hết hạn.
Giá
Các thao tác xoá TTL được tính vào chi phí xoá tài liệu. Để biết giá của các thao tác xoá, hãy xem phần Giá của phiên bản Cloud Firestore Enterprise.
Giới hạn và ràng buộc
- Bạn chỉ có thể tạo một chỉ mục TTL cho mỗi tập hợp.
- Bạn có thể có tối đa 500 chỉ mục TTL.
Xoá TTL
Hãy lưu ý những hành vi chính sau đây của việc xoá dựa trên TTL:
Việc xoá thông qua TTL không phải là một quy trình tức thời. Các tài liệu đã hết hạn vẫn tiếp tục xuất hiện trong các truy vấn và yêu cầu tra cứu cho đến khi quy trình TTL thực sự xoá các tài liệu đó. TTL đánh đổi tính kịp thời của việc xoá để mang lại lợi ích là giảm tổng chi phí sở hữu cho việc xoá. Dữ liệu thường bị xoá trong vòng 24 giờ sau thời gian hết hạn.
Việc tạo chỉ mục TTL trên một tập hợp hiện có sẽ dẫn đến việc xoá hàng loạt tất cả dữ liệu đã hết hạn theo chỉ mục TTL mới. Xin lưu ý rằng việc xoá hàng loạt này cũng không diễn ra tức thời và tuỳ thuộc vào lượng dữ liệu hiện có cho tập hợp đó.
Nếu một tài liệu có thời gian hết hạn trong quá khứ và bạn thêm một chỉ mục TTL mới vào tập hợp, thì tài liệu đó sẽ bị xoá trong vòng 24 giờ kể từ khi chỉ mục TTL hoàn tất quá trình thiết lập và trở nên hoạt động.
TTL không nhất thiết phải xoá tài liệu theo cùng thứ tự như dấu thời gian hết hạn của tài liệu.
Việc xoá không được thực hiện theo giao dịch. Các tài liệu có cùng thời gian hết hạn không nhất thiết phải bị xoá cùng một lúc. Nếu bạn yêu cầu hành vi này, hãy thực hiện việc xoá bằng thư viện ứng dụng.
Cloud Firestore sẽ luôn tuân thủ trường TTL mới nhất để xác định thời gian hết hạn. Ví dụ: nếu một tài liệu đã hết hạn nhưng chưa bị xoá có trường TTL được cập nhật thành một ngày sau đó, thì tài liệu đó sẽ không hết hạn và ngày mới sẽ được sử dụng.
Cloud Firestore chỉ hết hạn một tài liệu khi trường TTL được đặt thành giá trị
Date and time/BSON Datehoặc giá trịArraychứa giá trịDate and time/BSON Date. Để trống trường này hoặc đặt thành một giá trị nhưnullđể tắt thời gian hết hạn trên cơ sở từng tài liệu.TTL được thiết kế để giảm thiểu tác động đến các hoạt động khác của cơ sở dữ liệu. Việc xoá do TTL điều khiển được xử lý với mức độ ưu tiên thấp hơn. Các chiến lược khác cũng được áp dụng để làm giảm các đợt tăng đột biến lưu lượng truy cập do các thao tác xoá dựa trên TTL.
Trường TTL và chỉ mục không phải TTL
Bạn có thể lập chỉ mục hoặc không lập chỉ mục cho trường TTL. Tuy nhiên, vì trường TTL là dấu thời gian, nên việc đưa trường này vào chỉ mục không phải TTL có thể ảnh hưởng đến hiệu suất ở tốc độ lưu lượng truy cập cao hơn. Việc đưa trường dấu thời gian vào chỉ mục không phải TTL có thể tạo ra các điểm nóng, điều này trái với các phương pháp hay nhất. Điểm nóng là tốc độ đọc, ghi và xoá cao đối với một phạm vi tài liệu hẹp.
Quyền
Đối tượng chính tạo hoặc xoá chỉ mục TTL cần có quyền sau đây trong dự án:
- Để xem chỉ mục TTL, bạn cần có quyền
datastore.indexes.listvàdatastore.indexes.get. - Để tạo hoặc xoá chỉ mục TTL, bạn cần có quyền
datastore.indexes.update. - Để kiểm tra trạng thái của các thao tác TTL, bạn cần có quyền
datastore.operations.listvàdatastore.operations.get.
Để biết các vai trò chỉ định những quyền này, hãy xem Cloud Firestore Vai trò của Identity and Access Management.
Trước khi bắt đầu
Trước khi sử dụng gcloud CLI để quản lý chỉ mục TTL, hãy sử dụng
gcloud components update
lệnh để cập nhật các thành phần lên phiên bản mới nhất hiện có:
gcloud components update
Tạo chỉ mục TTL
Khi tạo chỉ mục TTL, bạn sẽ chỉ định một trường tài liệu làm thời gian hết hạn cho các tài liệu trong một tập hợp.
TTL sử dụng một trường được chỉ định để xác định các tài liệu đủ điều kiện để xoá.
Trường TTL phải được đặt thành giá trị Timestamp/BSON Date hoặc giá trị Array chứa giá trị Timestamp/BSON Date. Bạn có thể chọn một trường đã tồn tại hoặc chỉ định một trường mà bạn dự định thêm sau.
Hãy cân nhắc những điều sau đây trước khi đặt giá trị trường TTL:
Giá trị trường TTL có thể là thời gian trong tương lai, hiện tại hoặc trong quá khứ. Nếu giá trị là thời gian trong quá khứ, thì tài liệu sẽ đủ điều kiện để xoá ngay lập tức. Ví dụ: bạn có thể tạo chỉ mục TTL với trường
expireAt, sau đó thêm vào các tài liệu hiện có.Việc sử dụng bất kỳ kiểu dữ liệu nào khác hoặc không đặt giá trị trường TTL sẽ tắt TTL cho từng tài liệu.
Để tạo chỉ mục TTL, hãy làm theo các bước sau:
MongoDB API
Thêm tuỳ chọn chỉ mục expireAfterSeconds khi gọi createIndex() phương thức:
db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})
Ví dụ:
db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})
expireAfterSeconds xác định TTL là chỉ mục TTL và là độ lệch giữa giá trị dấu thời gian từ trường TTL và thời gian hết hạn. Nếu expireAfterSeconds được đặt thành 0, thì thời gian hết hạn sẽ được cung cấp trực tiếp theo giá trị dấu thời gian từ trường TTL.
Lưu ý các giới hạn sau:
- Chỉ mục TTL phải chứa chính xác một trường.
- Bạn không thể sử dụng chỉ mục TTL trong các truy vấn.
- Bạn chỉ có thể tạo một chỉ mục TTL cho mỗi tập hợp.
- Nhật ký kiểm tra để tạo chỉ mục TTL bằng MongoDB API sử dụng tên phương thức
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
Trong bảng điều khiển Cloud, hãy chuyển đến trang Databases (Cơ sở dữ liệu).
Chọn cơ sở dữ liệu bắt buộc trong danh sách cơ sở dữ liệu.
Trong trình đơn điều hướng, hãy nhấp vào Time-to-live (Thời gian tồn tại).
Nhấp vào Create Policy (Tạo chính sách).
Nhập tên tập hợp và tên trường dấu thời gian.
Nhấp vào Create (Tạo).
Bảng điều khiển sẽ quay lại trang Time-to-live (Thời gian tồn tại). Nếu thao tác bắt đầu thành công, trang này sẽ thêm một mục vào bảng chỉ mục TTL. Nếu không thành công, trang này sẽ hiển thị thông báo lỗi.
gcloud
Sử dụng lệnh
firestore fields ttls updateđể định cấu hình chỉ mục TTL. Thêm cờ--asyncđể ngăn gcloud CLI chờ thao tác hoàn tất.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
Thời gian tạo chỉ mục TTL
Ngay cả trên một cơ sở dữ liệu trống, bạn cũng có thể mất mười phút trở lên để tạo chỉ mục TTL. Sau khi bạn bắt đầu một thao tác, việc đóng thiết bị đầu cuối sẽ không huỷ thao tác đó.
Xem chỉ mục TTL
Để xem chỉ mục TTL, hãy làm theo các bước sau:
MongoDB API
Sử dụng phương thức listIndexes() để xem chỉ mục TTL. Ví dụ:
db.restaurants.listIndexes()
Xin lưu ý rằng kết quả đầu ra sẽ bao gồm cả chỉ mục TTL và chỉ mục không phải TTL. Chỉ mục TTL sẽ bao gồm tuỳ chọn expireAfterSeconds.
Google Cloud Console
Trong bảng điều khiển Cloud, hãy chuyển đến trang Databases (Cơ sở dữ liệu).
Chọn cơ sở dữ liệu bắt buộc trong danh sách cơ sở dữ liệu.
Trong trình đơn điều hướng, hãy nhấp vào Time-to-live (Thời gian tồn tại).
Bảng điều khiển liệt kê các chỉ mục TTL cho cơ sở dữ liệu của bạn và bao gồm trạng thái của từng chỉ mục.
gcloud
Sử dụng lệnh để định cấu hình chỉ mục TTL.
firestore fields ttls listLệnh sau đây liệt kê tất cả chỉ mục TTL.gcloud firestore fields ttls list
Để liệt kê các chỉ mục TTL trong một tập hợp cụ thể, hãy sử dụng như sau:
gcloud firestore fields ttls list --collection-group=collection_name
Xem thông tin chi tiết về thao tác
Bạn có thể sử dụng gcloud CLI để xem thêm thông tin chi tiết về chỉ mục TTL
ở trạng thái CREATING state.
Sử dụng lệnh operations list để xem tất cả các thao tác đang chạy và
các thao tác đã hoàn tất gần đây:
gcloud firestore operations list
Phản hồi bao gồm thông tin ước tính về tiến trình của thao tác.
Xoá chỉ mục TTL
Để xoá chỉ mục TTL, hãy làm theo các bước sau:
MongoDB API
Sử dụng phương thức dropIndex() để xoá chỉ mục TTL. Ví dụ:
Xoá chỉ mục TTL bằng tên chỉ mục
db.restaurants.dropIndex("ts_1")
Xoá chỉ mục TTL bằng định nghĩa chỉ mục
db.restaurants.dropIndex({"ts": 1})
Xin lưu ý rằng Nhật ký kiểm tra để xoá chỉ mục TTL bằng MongoDB API sử dụng tên phương thức google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
Trong bảng điều khiển Cloud, hãy chuyển đến trang Databases (Cơ sở dữ liệu).
Chọn cơ sở dữ liệu bắt buộc trong danh sách cơ sở dữ liệu.
Trong trình đơn điều hướng, hãy nhấp vào Time-to-live (Thời gian tồn tại).
Trong bảng chỉ mục TTL, hãy tìm hàng cho chỉ mục TTL. Trong hàng của bảng này, hãy nhấp vào nút Delete (Xoá) (thùng rác).
Xác nhận bằng cách nhấp vào Delete (Xoá).
Bảng điều khiển sẽ quay lại trang Time-to-live (Thời gian tồn tại). Khi thành công, Cloud Firestore sẽ xoá chỉ mục TTL khỏi bảng.
gcloud
Sử dụng lệnh để định cấu hình chỉ mục TTL.
firestore fields ttls updateThêm cờ--asyncđể ngăn gcloud CLI chờ thao tác hoàn tất.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
Theo dõi các thao tác xoá TTL
Bạn có thể sử dụng Cloud Monitoring để xem các chỉ số về các thao tác xoá dựa trên TTL. Cloud Firestore cung cấp các chỉ số sau đây cho TTL:
| Loại chỉ số | Tên chỉ số | Nội dung mô tả chỉ số |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | Số lượng thao tác xoá thời gian tồn tại |
Tổng số tài liệu bị xoá theo chỉ mục TTL. |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | Thời gian tồn tại hết hạn đến thời gian xoá bị trễ |
Thời gian trôi qua giữa thời điểm một tài liệu hết hạn theo chỉ mục TTL và thời điểm tài liệu đó thực sự bị xoá. |
Để thiết lập trang tổng quan bằng các chỉ số Cloud Firestore, hãy xem bài viết quản lý trang tổng quan tuỳ chỉnh và thêm tiện ích trang tổng quan.