Zarządzanie przechowywaniem danych za pomocą indeksów TTL

Na tej stronie opisaliśmy, jak skonfigurować indeksy czasu życia (TTL) za pomocą interfejsu MongoDB API, konsoli Google Cloud i Google Cloud CLI

Omówienie czasu życia

Używaj indeksów TTL, aby automatycznie usuwać nieaktualne dane z baz danych. Indeks TTL wyznacza określone pole jako czas ważności dokumentów w danej kolekcji. Dzięki TTL możesz zmniejszyć koszty przechowywania, usuwając przestarzałe dane. Dane są zwykle usuwane w ciągu 24 godzin po upłynięciu ich czasu ważności.

Ceny

Operacje usuwania na podstawie TTL korzystają z zarządzanych jednostek usuwania. Informacje o cenach znajdziesz w artykule Cloud Firestore Ceny w wersji Enterprise.

Limity i ograniczenia

  • W każdej kolekcji możesz utworzyć tylko 1 indeks TTL.
  • Możesz mieć maksymalnie 500 indeksów TTL.

Usuwanie na podstawie TTL

Zwróć uwagę na te kluczowe zachowania związane z usuwaniem na podstawie TTL:

  • Usuwanie na podstawie TTL nie jest procesem natychmiastowym. Dokumenty, które utraciły ważność, nadal będą się pojawiać w zapytaniach i prośbach o wyszukanie, dopóki proces TTL ich nie usunie. TTL poświęca terminowość usuwania na rzecz zmniejszenia całkowitego kosztu posiadania związanego z usuwaniem. Dane są zwykle usuwane w ciągu 24 godzin po upłynięciu ich czasu ważności.

  • Utworzenie indeksu TTL w istniejącej kolekcji spowoduje zbiorcze usunięcie wszystkich danych, które utraciły ważność, zgodnie z nowym indeksem TTL. Pamiętaj, że to zbiorcze usuwanie też nie jest natychmiastowe i zależy od ilości danych w tej kolekcji.

  • Jeśli dokument ma czas ważności w przeszłości i dodasz do kolekcji nowy indeks TTL, dokument zostanie usunięty w ciągu 24 godzin od momentu zakończenia konfiguracji i aktywowania indeksu TTL.

  • TTL niekoniecznie usuwa dokumenty w tej samej kolejności co ich sygnatury czasowe ważności.

  • Usuwanie nie jest wykonywane w sposób transakcyjny. Dokumenty z tym samym czasem ważności niekoniecznie są usuwane w tym samym czasie. Jeśli potrzebujesz takiego zachowania, usuń dokumenty za pomocą biblioteki klienta.

  • Cloud Firestore zawsze będzie uwzględniać najnowsze pole TTL, aby określić czas ważności. Jeśli na przykład pole TTL dokumentu, który utracił ważność, ale nie został jeszcze usunięty, zostanie zaktualizowane do późniejszej daty, dokument nie utraci ważności i zostanie użyta nowa data.

  • Cloud Firestore powoduje utratę ważności dokumentu tylko wtedy, gdy pole TTL jest ustawione na wartość Date and time/BSON Date lub wartość Array zawierającą wartość Date and time/BSON Date. Aby wyłączyć utratę ważności poszczególnych dokumentów, pozostaw pole puste lub ustaw wartość taką jak null.

  • TTL został zaprojektowany tak, aby minimalizować wpływ na inne działania w bazie danych. Usuwanie na podstawie TTL jest traktowane z niższym priorytetem. Stosowane są też inne strategie, które mają na celu wygładzenie skoków natężenia ruchu spowodowanych usuwaniem na podstawie TTL.

Różnice w przypadku indeksów TTL

W przeciwieństwie do innych indeksów Firestore indeksy TTL nie są używane podczas planowania zapytań w celu zwiększenia wydajności. Aby zwiększyć wydajność zapytań w polu używanym z TTL, musisz dodać je do osobnego indeksu innego niż TTL.

Pamiętaj, że ponieważ pola TTL używają sygnatur czasowych, dodanie ich do indeksu innego niż TTL może prowadzić do powstawania hotspotów. Hotspoty występują, gdy duża liczba zapisów i usunięć jest skoncentrowana w wąskim zakresie dokumentów, co może negatywnie wpłynąć na wydajność skalowania w okresach dużego natężenia ruchu związanego z zapisem.

Uprawnienia

Podmiot zabezpieczeń tworzący lub usuwający indeks TTL musi mieć w projekcie te uprawnienia:

  • Do wyświetlania indeksów TTL wymagane są uprawnienia datastore.indexes.list i datastore.indexes.get.
  • Do tworzenia lub usuwania indeksów TTL wymagane jest uprawnienie datastore.indexes.update.
  • Do sprawdzania stanu operacji TTL wymagane są uprawnienia datastore.operations.list i datastore.operations.get.

Role, które przypisują te uprawnienia, znajdziesz w artykule Cloud Firestore Role zarządzania tożsamościami i dostępem.

Tworzenie indeksu TTL

Gdy tworzysz indeks TTL, wyznaczasz pole dokumentu jako czas ważności dokumentów w kolekcji.

TTL używa określonego pola do identyfikowania dokumentów, które kwalifikują się do usunięcia. Pole TTL musi być ustawione na wartość Timestamp (Sygnatura czasowa) / BSON Date (Data BSON) lub wartość Array (Tablica) zawierającą wartość Timestamp (Sygnatura czasowa) / BSON Date (Data BSON). Możesz wybrać pole, które już istnieje, lub wyznaczyć pole, które planujesz dodać później.

Zanim ustawisz wartość pola TTL, weź pod uwagę te kwestie:

  • Wartość pola TTL może być czasem w przyszłości, teraźniejszości lub przeszłości. Jeśli wartość jest czasem w przeszłości, dokument od razu kwalifikuje się do usunięcia. Możesz na przykład utworzyć indeks TTL z polem expireAt, które następnie dodasz do istniejących dokumentów.

  • Użycie innego typu danych lub nieustawienie wartości pola TTL spowoduje wyłączenie TTL dla danego dokumentu.

Aby utworzyć indeks TTL, wykonaj te czynności:

MongoDB API

Podczas wywoływania metody createIndex() uwzględnij opcję indeksu expireAfterSeconds:

db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})

Przykład:

db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})

expireAfterSeconds identyfikuje TTL jako indeks TTL i jest przesunięciem między wartością sygnatury czasowej z pola TTL a czasem ważności. Jeśli expireAfterSeconds jest ustawione na 0, czas ważności jest podawany bezpośrednio przez wartość sygnatury czasowej z pola TTL.

Pamiętaj o tych ograniczeniach:

  • Indeksy TTL muszą zawierać dokładnie 1 pole.
  • Indeksy TTL nie są używane podczas planowania zapytań i nie zwiększają wydajności zapytań.
  • W każdej kolekcji możesz utworzyć tylko 1 indeks TTL.
  • Dzienniki audytu dotyczące tworzenia indeksu TTL za pomocą interfejsu MongoDB API używają nazwy metody google.firestore.admin.v1.FirestoreAdmin.UpdateField.

Google Cloud Console

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz stronę Bazy danych

  2. Na liście baz danych wybierz wymaganą bazę danych.

  3. W menu nawigacyjnym kliknij Czas życia.

  4. Kliknij Utwórz zasadę.

  5. Wpisz nazwę kolekcji i nazwę pola sygnatury czasowej.

  6. Kliknij Utwórz.

Konsola wróci na stronę Czas życia. Jeśli operacja się powiedzie, na stronie zostanie dodany wpis do tabeli indeksów TTL. W przypadku niepowodzenia na stronie wyświetli się komunikat o błędzie.

gcloud

  1. Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.

  2. Aby skonfigurować indeks TTL, użyj firestore fields ttls update polecenia. Dodaj flagę --async, aby gcloud CLI nie czekał na zakończenie operacji.

     gcloud firestore fields ttls update
    ttl_field --collection-group=collection_name
    --enable-ttl 

Czas tworzenia indeksu TTL

Utworzenie indeksu TTL może potrwać co najmniej 10 minut. Po rozpoczęciu operacji zamknięcie terminala nie spowoduje jej anulowania.

Wyświetlanie indeksów TTL

Aby wyświetlić indeksy TTL, wykonaj te czynności:

MongoDB API

Aby wyświetlić indeksy TTL, użyj metody listIndexes(). Przykład:

db.restaurants.listIndexes()

Pamiętaj, że dane wyjściowe będą zawierać zarówno indeksy TTL, jak i indeksy inne niż TTL. Indeksy TTL będą zawierać opcję expireAfterSeconds.

Google Cloud Console

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz stronę Bazy danych

  2. Na liście baz danych wybierz wymaganą bazę danych.

  3. W menu nawigacyjnym kliknij Czas życia.

Konsola wyświetli listę indeksów TTL dla Twojej bazy danych oraz stan każdego indeksu.

gcloud

  1. Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.

  2. Aby skonfigurować indeks TTL, użyj polecenia firestore fields ttls list. To polecenie wyświetla listę wszystkich indeksów TTL.

    gcloud firestore fields ttls list
    

    Aby wyświetlić listę indeksów TTL w określonej kolekcji, użyj tego polecenia:

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

Wyświetlanie szczegółów operacji

Za pomocą gcloud CLI możesz wyświetlić więcej szczegółów o indeksie TTL , który jest w stanie CREATING.

Aby wyświetlić wszystkie operacje, które są w toku i zostały niedawno zakończone, użyj polecenia operations list:

gcloud firestore operations list

Odpowiedź zawiera szacunkowy postęp operacji.

Usuwanie indeksu TTL

Aby usunąć indeks TTL, wykonaj te czynności:

MongoDB API

Aby usunąć indeks TTL, użyj metody dropIndex(). Przykład:

Usuwanie indeksu TTL za pomocą nazwy indeksu

db.restaurants.dropIndex("ts_1")

Usuwanie indeksu TTL za pomocą definicji indeksu

db.restaurants.dropIndex({"ts": 1})

Pamiętaj, że dzienniki audytu dotyczące usuwania indeksu TTL za pomocą interfejsu MongoDB API używają nazwy metody google.firestore.admin.v1.FirestoreAdmin.UpdateField.

Google Cloud Console

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz stronę Bazy danych

  2. Na liście baz danych wybierz wymaganą bazę danych.

  3. W menu nawigacyjnym kliknij Czas życia.

  4. W tabeli indeksów TTL znajdź wiersz indeksu TTL. W tym wierszu tabeli kliknij przycisk Usuń (kosz).

  5. Potwierdź, klikając Usuń.

Konsola wróci na stronę Czas życia. Jeśli operacja się powiedzie, Cloud Firestore usunie indeks TTL z tabeli.

gcloud

  1. Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.

  2. Aby skonfigurować indeks TTL, użyj firestore fields ttls update polecenia. Dodaj flagę --async, aby gcloud CLI nie czekał na zakończenie operacji.

    gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
    

Monitorowanie usuwania na podstawie TTL

Za pomocą Cloud Monitoring możesz wyświetlać dane o usuwaniu na podstawie TTL. Cloud Firestore udostępnia te dane dotyczące TTL:

Typ wskaźnika Nazwa wskaźnika Opis danych
firestore.googleapis.com/document/ttl_deletion_count Liczba usunięć na podstawie czasu życia

Łączna liczba dokumentów usuniętych przez indeksy TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Opóźnienia między utratą ważności a usunięciem na podstawie czasu życia

Czas, który upłynął od momentu utraty ważności dokumentu w indeksie TTL do momentu jego usunięcia.

Aby skonfigurować panel z danymi Cloud Firestore, zobacz Zarządzanie panelem niestandardowym i Dodawanie widżetów do panelu.