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

Na tej stronie opisano, jak używać interfejsu MongoDB API, konsoli Google Cloud i Google Cloud CLI do konfigurowania indeksów czasu życia (TTL).

Omówienie czasu życia danych

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

Ceny

Operacje usunięcia na podstawie TTL korzystają z zarządzanych jednostek usunięcia. Ceny znajdziesz w artykule Ceny Cloud Firestore Enterprise.

Limity i ograniczenia

  • Możesz utworzyć tylko 1 indeks TTL na kolekcję.
  • Możesz mieć maksymalnie 500 indeksów TTL.

Usunięcie na podstawie TTL

Zwróć uwagę na te kluczowe zachowania usuwania opartego na TTL:

  • Usuwanie za pomocą TTL nie jest procesem natychmiastowym. Dokumenty, które wygasły, będą nadal pojawiać się w zapytaniach i żądaniach wyszukiwania, dopóki proces TTL ich nie usunie. Zasady TTL pozwalają na usunięcie danych w określonym czasie, co pozwala obniżyć całkowity koszt posiadania w przypadku usuwania. Dane są zwykle usuwane w ciągu 24 godzin po upłynięciu ich daty ważności.

  • Utworzenie indeksu TTL w istniejącej kolekcji powoduje zbiorcze usunięcie wszystkich wygasłych danych zgodnie z nowym indeksem TTL. Pamiętaj, że to zbiorcze usuwanie nie jest natychmiastowe i zależy od ilości danych w 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 zakończenia konfiguracji indeksu TTL i jego aktywacji.

  • TTL nie musi usuwać dokumentów w tej samej kolejności co ich sygnatury czasowe wygaśnięcia.

  • Usuwanie nie jest wykonywane transakcyjnie. Dokumenty z tym samym czasem ważności niekoniecznie są usuwane w tym samym czasie. Jeśli potrzebujesz takiego działania, wykonaj usunięcia za pomocą biblioteki klienta.

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

  • Cloud Firestore powoduje wygaśnięcie 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. Pozostaw pole puste lub ustaw wartość na null, aby wyłączyć wygasanie dla poszczególnych dokumentów.

  • Funkcja TTL została zaprojektowana tak, aby zminimalizować wpływ na inne działania bazy danych. Usunięcia spowodowane przez TTL są traktowane z niższym priorytetem. Stosowane są też inne strategie, które pozwalają wygładzić skoki ruchu spowodowane usuwaniem danych na podstawie TTL.

Różnice w indeksach 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 przypadku pola używanego z TTL, musisz dodać je do osobnego indeksu bez TTL.

Pamiętaj, że pola TTL używają sygnatur czasowych, więc dodanie ich do indeksu bez TTL może prowadzić do powstawania hotspotów. Punkty aktywne występują, gdy wysokie współczynniki zapisu i usuwania są skoncentrowane w wąskim zakresie dokumentów, co może negatywnie wpływać na wydajność skalowania w okresach dużego ruchu związanego z zapisem.

Uprawnienia

Podmiot zabezpieczeń, który tworzy lub usuwa indeks TTL, musi mieć w projekcie te uprawnienia:

  • Wyświetlanie indeksów TTL wymaga uprawnień datastore.indexes.list i datastore.indexes.get.
  • Tworzenie lub usuwanie indeksów TTL wymaga uprawnienia datastore.indexes.update.
  • Sprawdzanie stanu operacji TTL wymaga uprawnień datastore.operations.list i datastore.operations.get.

Role, które przypisują te uprawnienia, znajdziesz w artykule Role Identity and Access Management w Cloud Firestore.

Tworzenie indeksu TTL

Podczas tworzenia indeksu 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 można usunąć. Pole TTL musi być ustawione na wartość Timestamp/BSON Date lub wartość Array zawierającą wartość Timestamp/BSON Date. Możesz wybrać pole, które już istnieje, lub wskazać 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 można natychmiast usunąć. 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 wygaśnięcia. Jeśli parametr expireAfterSeconds ma wartość 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 w planowaniu zapytań i nie zwiększają ich wydajności.
  • Możesz utworzyć tylko 1 indeks TTL na kolekcję.
  • Logi kontrolne 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. Wybierz wymaganą bazę danych z listy baz danych.

  3. W menu nawigacyjnym kliknij Czas życia.

  4. Kliknij Utwórz zasadę.

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

  6. Opcjonalnie: skonfiguruj Przesunięcie daty ważności. Wpisz wartość i wybierz jednostkę (dni, godziny, minuty lub sekundy). Domyślnie przesunięcie wynosi 0.

  7. Kliknij Utwórz.

Konsola powróci do strony Czas życia. Jeśli operacja rozpocznie się pomyślnie, strona doda 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 polecenia firestore fields ttls update. Dodaj flagę --async, aby zapobiec oczekiwaniu przez gcloud CLI na zakończenie operacji.

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

    Aby włączyć indeks TTL z przesunięciem wygaśnięcia, dodaj flagę --expiration-offset:

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

    Zastąp expiration_offset czasem trwania, na przykład 7d (7 dni) lub 24h (24 godziny). Jeśli pominiesz tę flagę, przesunięcie wygaśnięcia będzie domyślnie wynosić 0.

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. Wybierz wymaganą bazę danych z listy baz danych.

  3. W menu nawigacyjnym kliknij Czas życia.

W konsoli zostanie wyświetlona lista indeksów TTL bazy danych wraz ze stanem każdego z nich.

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świetl szczegóły operacji

Możesz użyć gcloud CLI, aby wyświetlić więcej informacji o indeksie TTL, który jest w stanie CREATING.

Użyj polecenia operations list, aby wyświetlić wszystkie uruchomione i ostatnio zakończone operacje:

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 przy użyciu nazwy indeksu

db.restaurants.dropIndex("ts_1")

Usuwanie indeksu TTL za pomocą definicji indeksu

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

Pamiętaj, że logi kontrolne 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. Wybierz wymaganą bazę danych z listy 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 powróci do strony Czas życia. W przypadku powodzenia Cloud Firestore usuwa indeks TTL z tabeli.

gcloud

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

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

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

Monitorowanie usunięć TTL

Możesz użyć Cloud Monitoring, aby wyświetlić dane o usunięciach opartych na 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ęć danych z czasem życia

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Opóźnienia między wygaśnięciem czasu życia a usunięciem

Czas, który upłynął od momentu wygaśnięcia dokumentu w indeksie TTL do momentu jego faktycznego usunięcia.

Aby skonfigurować panel ze wskaźnikami Cloud Firestore, zapoznaj się z artykułami o zarządzaniu panelem niestandardowym i dodawaniu widżetów do panelu.