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 danych

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 usunięcia na podstawie TTL wykorzystują zarządzane jednostki usuwania. Cennik znajdziesz na stronie 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

Pamiętaj o tych kluczowych zachowaniach usuwania opartego na TTL:

  • Usuwanie za pomocą TTL nie jest natychmiastowe. Wygasłe dokumenty nadal pojawiają się w zapytaniach i prośbach o wyszukiwanie, dopóki proces TTL ich nie usunie. TTL wymienia terminowość usuwania transakcji na korzyść 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 zakończenia konfiguracji i aktywacji indeksu TTL.

  • 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 nie muszą być usuwane w tym samym czasie. Jeśli chcesz, aby tak się działo, 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 na przykład w przypadku dokumentu, który utracił ważność, ale nie został jeszcze usunięty, pole TTL zostanie zaktualizowane do późniejszej daty, dokument nie utraci ważności i zostanie użyta nowa data.

  • Cloud Firestore wygasa dokument tylko wtedy, gdy w polu TTL ustawiona jest wartość Date and time/BSON Date lub wartość Array zawierająca 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 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. Hotspoty 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 ruchu związanego z zapisem.

Uprawnienia

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

  • Wyświetlanie indeksów TTL wymaga uprawnień datastore.indexes.listdatastore.indexes.get.
  • Do tworzenia i usuwania indeksów TTL wymagane jest uprawnienie datastore.indexes.update.
  • Sprawdzanie stanu operacji TTL wymaga datastore.operations.listdatastore.operations.get.

Role, które przypisują 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 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 datą w przeszłości, dokument kwalifikuje się do natychmiastowego usunięcia. Możesz na przykład utworzyć indeks TTL z polem expireAt, a następnie dodać go 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 kontroli 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 tę, której potrzebujesz.

  3. W menu nawigacyjnym kliknij Time-to-live (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 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 

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 Bazy danych

  2. Wybierz z listy baz danych tę, której potrzebujesz.

  3. W menu nawigacyjnym kliknij Time-to-live (Czas życia).

Konsola wyświetla listę indeksów TTL w 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. Poniższe 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 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 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 tę, której potrzebujesz.

  3. W menu nawigacyjnym kliknij Time-to-live (Czas życia).

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

  5. Potwierdź, klikając 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 (TTL)

Łą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 wygaśnięcia dokumentu w indeksie TTL do jego faktycznego usunięcia.

Aby skonfigurować panel z Cloud Firestore danymi, przeczytaj artykuły zarządzanie panelem niestandardowymdodawanie widżetów do panelu.