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

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

Omówienie czasu życia danych (TTL)

Używaj indeksów TTL, aby automatycznie usuwać z baz danych nieaktualne dane. Indeks TTL wyznacza określone pole jako czas wygaśnięcia 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 daty ważności.

Ceny

Operacje usuwania na podstawie TTL wykorzystują zarządzane jednostki usuwania. Ceny znajdziesz w artykule Cloud Firestore Ceny wersji Enterprise.

Limity i ograniczenia

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

Usuwanie na podstawie TTL

Zwróć uwagę na te kluczowe sposoby działania usuwania opartego na TTL:

  • Usuwanie za pomocą TTL nie jest procesem natychmiastowym. Wygasłe dokumenty nadal będą się pojawiać w zapytaniach i żądaniach wyszukiwania, dopóki proces TTL ich nie usunie. TTL stawia na szybkość usuwania kosztem niższego całkowitego kosztu 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. Uwaga: to zbiorcze usuwanie również nie jest natychmiastowe i zależy od ilości danych w danej kolekcji.

  • Jeśli dokument ma datę ważności w przeszłości, a do kolekcji dodasz nowy indeks TTL, dokument zostanie usunięty w ciągu 24 godzin od momentu, w którym indeks TTL zostanie skonfigurowany i aktywny.

  • TTL niekoniecznie usuwa dokumenty w tej samej kolejności co ich sygnatury czasowe wygaśnięcia.

  • Usuwanie nie jest przeprowadzane w ramach transakcji. Dokumenty z tym samym czasem wygaśnięcia niekoniecznie są usuwane w tym samym czasie. Jeśli potrzebujesz takiego działania, usuń elementy za pomocą biblioteki klienta.

  • Cloud Firestore zawsze będzie uwzględniać najnowsze pole TTL, aby określić datę wygaśnięcia. Jeśli np. w wygasłym, ale jeszcze nieusuniętym dokumencie pole TTL zostanie zaktualizowane do późniejszej daty, dokument nie wygaśnie i zostanie użyta nowa data.

  • Cloud Firestore wygasa dokument tylko wtedy, gdy pole TTL ma wartość Date and time/BSON Date lub wartość Array zawierającą wartość Date and time/BSON Date. Pozostaw to pole puste lub ustaw wartość, np. null, aby wyłączyć wygasanie poszczególnych dokumentów.

  • TTL ma na celu zminimalizowanie wpływu na inne działania w bazie danych. Usuwanie spowodowane przez TTL ma niższy priorytet. Stosujemy też inne strategie, aby wygładzać skoki natężenia ruchu spowodowane usuwaniem danych na podstawie czasu życia.

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 czasem TTL, musisz dodać je do osobnego indeksu bez czasu TTL.

Pamiętaj, że pola TTL używają sygnatur czasowych, więc dodanie ich do indeksu innego niż TTL może prowadzić do powstawania hotspotów. Punkty krytyczne występują, gdy wysokie współczynniki zapisów i usuwań są skoncentrowane w wąskim zakresie dokumentów, co może negatywnie wpływać 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 to uprawnienie:

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

Listę ról, które przyznają te uprawnienia, znajdziesz w sekcji Cloud Firestore Role Identity and Access Management.

Tworzenie indeksu TTL

Gdy tworzysz indeks TTL, wyznaczasz pole dokumentu jako czas wygaśnięcia dokumentów w kolekcji.

TTL używa określonego pola do identyfikowania dokumentów, które kwalifikują się do usunięcia. Pole TTL musi mieć wartość Timestamp/BSON Date lub 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 datą w przeszłości, dokument kwalifikuje się do natychmiastowego usunięcia. Możesz na przykład utworzyć indeks TTL z polem expireAt, który następnie dodasz do istniejących dokumentów.

  • Użycie innego typu danych lub nieustawienie wartości pola TTL spowoduje wyłączenie TTL dla poszczególnych dokumentów.

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 określa TTL jako indeks TTL i jest przesunięciem między wartością sygnatury czasowej z pola TTL a czasem wygaśnięcia. Jeśli wartość expireAfterSeconds jest ustawiona na 0, czas wygaśnięcia 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ą wydajności zapytań.
  • W każdej kolekcji możesz utworzyć tylko jeden 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 Bazy danych

  2. Wybierz z listy baz danych odpowiednią bazę.

  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 wróci na stronę Czas życia. Jeśli operacja rozpocznie się prawidłowo, 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 polecenia firestore fields ttls update. Dodaj flagę --async, aby zapobiec czekaniu 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 okresem, np. 7d na 7 dni lub 24h na 24 godziny. Jeśli pominiesz tę flagę, domyślna wartość przesunięcia wygaśnięcia to 0.

Czas tworzenia indeksu TTL

Utworzenie indeksu TTL może potrwać co najmniej 10 minut. Po rozpoczęciu operacji zamknięcie terminala nie powoduje 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 Bazy danych

  2. Wybierz z listy baz danych odpowiednią bazę.

  3. W menu nawigacyjnym kliknij Czas życia.

Konsola wyświetla listę indeksów TTL w Twojej bazie danych, w tym 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świetl szczegóły operacji

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

Użyj polecenia operations list, aby wyświetlić wszystkie trwające i niedawno 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 za pomocą 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 Bazy danych

  2. Wybierz z listy baz danych odpowiednią bazę.

  3. W menu nawigacyjnym kliknij Czas życia.

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

  5. Aby potwierdzić, kliknij Usuń.

Konsola wróci na stronę Czas życia. W przypadku powodzenia Cloud Firestore usuwa z tabeli indeks TTL.

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 czekaniu przez gcloud CLI na zakończenie operacji.

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

Monitorowanie usunięć TTL

Aby wyświetlić dane o usuwaniu danych na podstawie wartości TTL, kliknij Cloud Monitoring. 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ęć z powodu czasu życia danych

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Opóźnienia od wygaśnięcia czasu życia danych (TTL) do usunięcia

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

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