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 Datelub wartośćArrayzawierają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.listidatastore.indexes.get. - Do tworzenia i usuwania indeksów TTL wymagane jest uprawnienie
datastore.indexes.update. - Sprawdzanie stanu operacji TTL wymaga
datastore.operations.listidatastore.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
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz odpowiednią bazę danych.
W menu nawigacyjnym kliknij Time-to-live (Czas życia).
Kliknij Utwórz zasadę.
Wpisz nazwę kolekcji i nazwę pola sygnatury czasowej.
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
Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.
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
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz odpowiednią bazę danych.
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
Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.
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
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz odpowiednią bazę danych.
W menu nawigacyjnym kliknij Time-to-live (Czas życia).
W tabeli indeksu TTL odszukaj wiersz indeksu TTL. W tym wierszu tabeli kliknij przycisk Usuń (kosz).
Potwierdź, klikając Usuń.
Konsola wróci na stronę Czas życia. W przypadku powodzenia Cloud Firestore usuwa z tabeli indeks TTL.
gcloud
Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.
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 niestandardowym i dodawanie widżetów do panelu.