Quản lý việc giữ lại dữ liệu bằng chỉ mục TTL

Trang này mô tả cách sử dụng API MongoDB, Google Cloud Console 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 dọn dẹp 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á

Thao tác xoá TTL sử dụng đơn vị xoá được quản lý. Để biết giá, hãy xem bài viết Giá của phiên bản Cloud Firestore Enterprise.

Giới hạn và quy định 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 ý các hành vi chính sau đây của tính năng xoá dựa trên TTL:

  • Xoá thông qua TTL không phải là một quy trình tức thời. Tài liệu đã hết hạ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á chúng. TTL đánh đổi tính kịp thời của việc xoá để đổi lấy 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 khi 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 ngay lập tức và phụ 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 bộ sưu tậ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à bắt đầu hoạt động.

  • TTL không nhất thiết phải xoá tài liệu theo cùng thứ tự với dấu thời gian hết hạn của tài liệu.

  • Thao tá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 cần 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 theo 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 Date hoặc giá trị Array chứa giá trị Date and time/BSON Date. Hãy để trống trường này hoặc đặt thành một giá trị như null để tắt tính năng hết hạn cho 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. Các thao tác xoá do TTL thực hiện sẽ đượ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 để giảm bớt lưu lượng truy cập tăng đột biến do các thao tác xoá dựa trên TTL.

Sự khác biệt với chỉ mục TTL

Không giống như các chỉ mục Firestore khác, chỉ mục TTL không được dùng trong quá trình lập kế hoạch truy vấn để nâng cao hiệu suất. Để cải thiện hiệu suất truy vấn trên một trường được dùng với TTL, bạn phải thêm trường đó vào một chỉ mục không phải TTL riêng biệt.

Điều quan trọng cần lưu ý là vì các trường TTL sử dụng dấu thời gian, nên việc thêm các trường này vào chỉ mục không phải TTL có thể dẫn đến điểm phát sóng. Điểm phát sóng xảy ra khi tỷ lệ ghi và xoá cao tập trung trong một phạm vi tài liệu hẹp, điều này có thể ảnh hưởng tiêu cực đến hiệu suất điều chỉnh tỷ lệ trong những khoảng thời gian có lưu lượng ghi cao.

Quyền

Chủ thể 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.list và 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ó datastore.operations.list và datastore.operations.get.

Để biết các vai trò chỉ định những quyền này, hãy xem bài viết Vai trò Quản lý danh tính và quyền truy cập của Cloud Firestore.

Tạo chỉ mục TTL

Khi tạo chỉ mục TTL, bạn 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 những 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 vào sau.

Hãy cân nhắc những điều sau trước khi bạn đặt giá trị cho 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à một thời điểm 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 bằng trường expireAt, sau đó thêm vào các tài liệu hiện có.

  • Nếu bạn sử dụng bất kỳ loại dữ liệu nào khác hoặc không đặt giá trị cho trường TTL, thì TTL sẽ bị tắt đối với 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 phương thức createIndex():

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 bằng giá trị dấu thời gian từ trường TTL.

Hãy lưu ý các giới hạn sau:

  • Chỉ mục TTL phải bao gồm đúng một trường.
  • Chỉ mục TTL không được dùng trong việc lập kế hoạch truy vấn và không cải thiện hiệu suất của 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 cho việc 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.

Bảng điều khiển Google Cloud

  1. Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến phần Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Thời gian tồn tại.

  4. Nhấp vào Tạo chính sách.

  5. Nhập tên tập hợp và tên trường dấu thời gian.

  6. Không bắt buộc: Định cấu hình Độ lệch hết hạn. Nhập một giá trị rồi chọn một đơn vị (ngày, giờ, phút hoặc giây). Theo mặc định, độ lệch là 0.

  7. Nhấp vào Tạo.

Bảng điều khiển sẽ quay lại trang Thời gian tồn tại. Nếu thao tác này bắt đầu thành công, trang sẽ thêm một mục vào bảng chỉ mục TTL. Nếu không thành công, trang sẽ hiển thị thông báo lỗi.

gcloud

  1. Cài đặt và khởi động gcloud CLI CLI.

  2. 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 

    Để bật chỉ mục TTL có độ lệch hết hạn, hãy thêm cờ --expiration-offset:

     gcloud firestore fields ttls update \
      ttl_field \
      --collection-group=collection_name \
      --enable-ttl \
      --expiration-offset=expiration_offset 

    Thay thế expiration_offset bằng một khoảng thời gian, ví dụ: 7d cho 7 ngày hoặc 24h cho 24 giờ. Nếu bạn bỏ qua cờ này, độ lệch hết hạn sẽ mặc định là 0.

Thời gian tạo chỉ mục TTL

Có thể mất ít nhất 10 phút để 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ả 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.

Bảng điều khiển Google Cloud

  1. Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến phần Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào 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

  1. Cài đặt và khởi động gcloud CLI CLI.

  2. Sử dụng lệnh firestore fields ttls list để định cấu hình chỉ mục TTL. Lệnh sau đây liệt kê tất cả cá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 lệnh sau:

    gcloud firestore fields ttls list  --collection-group=collection_name
    

Xem thông tin chi tiết về hoạt động

Bạn có thể sử dụng gcloud CLI để xem thêm thông tin chi tiết về chỉ mục TTL đang ở trạng thái CREATING.

Sử dụng lệnh operations list để xem tất cả các thao tác đang chạy và đã 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() để loại bỏ 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 cho việc xoá chỉ mục TTL bằng API MongoDB sử dụng tên phương thức google.firestore.admin.v1.FirestoreAdmin.UpdateField.

Bảng điều khiển Google Cloud

  1. Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến phần Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Thời gian tồn tại.

  4. Trong bảng chỉ mục TTL, hãy tìm hàng cho chỉ mục TTL. Trong hàng này của bảng, hãy nhấp vào nút Xoá (biểu tượng thùng rác).

  5. Xác nhận bằng cách nhấp vào Xoá.

Bảng điều khiển sẽ quay lại trang Thời gian tồn tại. Nếu thành công, Cloud Firestore sẽ xoá chỉ mục TTL khỏi bảng.

gcloud

  1. Cài đặt và khởi động gcloud CLI CLI.

  2. 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 --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ề việc xoá dựa trên TTL. Cloud Firestore cung cấp các chỉ số sau 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ần xoá theo thời gian tồn tại

Tổng số tài liệu bị chỉ mục TTL xoá.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Độ trễ từ khi hết thời gian tồn tại đến khi xoá

Thời gian trôi qua giữa thời điểm 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 có 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 vào trang tổng quan.