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 usuwania TTL wliczają się do kosztów usuwania dokumentów. Ceny operacji usuwania znajdziesz w sekcji Cloud Firestore Cennik 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 TTL

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

  • 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 czas wygaśnięcia 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 niekoniecznie są 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ć termin ważności. 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.

Pola TTL i indeksy inne niż TTL

Pole TTL może być indeksowane lub nieindeksowane. Jednak ponieważ pole TTL jest sygnaturą czasową, uwzględnienie go w indeksie innym niż TTL może wpływać na wydajność przy większym natężeniu ruchu. Uwzględnienie pola sygnatury czasowej w indeksie innym niż TTL może spowodować powstanie punktów dostępu, co jest niezgodne ze sprawdzonymi metodami. Hotspoty to wysokie wskaźniki odczytu, zapisu i usuwania w wąskim zakresie dokumentów.

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.

Zanim zaczniesz

Zanim zaczniesz używać gcloud CLI do zarządzania indeksami TTL, użyj polecenia gcloud components update aby zaktualizować komponenty do najnowszej dostępnej wersji:

gcloud components update

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.
  • Indeksów TTL nie można używać w zapytaniach.
  • 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 stronę Bazy danych

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

  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

Nawet w przypadku pustej bazy danych utworzenie indeksu TTL może zająć 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 stronę Bazy danych

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

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

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

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