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
Używaj indeksów TTL, aby automatycznie usuwać nieaktualne dane z baz danych. Indeks TTL wyznacza określone pole jako czas ważności 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 czasu ważności.
Ceny
Operacje usuwania na podstawie TTL korzystają z zarządzanych jednostek usuwania. Informacje o cenach znajdziesz w artykule Cloud Firestore Ceny w wersji Enterprise.
Limity i ograniczenia
- W każdej kolekcji możesz utworzyć tylko 1 indeks TTL.
- Możesz mieć maksymalnie 500 indeksów TTL.
Usuwanie na podstawie TTL
Zwróć uwagę na te kluczowe zachowania związane z usuwaniem na podstawie TTL:
Usuwanie na podstawie TTL nie jest procesem natychmiastowym. Dokumenty, które utraciły ważność, nadal będą się pojawiać w zapytaniach i prośbach o wyszukanie, dopóki proces TTL ich nie usunie. TTL poświęca terminowość usuwania na rzecz zmniejszenia całkowitego kosztu posiadania związanego z usuwaniem. Dane są zwykle usuwane w ciągu 24 godzin po upłynięciu ich czasu ważności.
Utworzenie indeksu TTL w istniejącej kolekcji spowoduje zbiorcze usunięcie wszystkich danych, które utraciły ważność, zgodnie z nowym indeksem TTL. Pamiętaj, że to zbiorcze usuwanie też nie jest natychmiastowe i zależy od ilości danych w tej 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 momentu zakończenia konfiguracji i aktywowania indeksu TTL.
TTL niekoniecznie usuwa dokumenty w tej samej kolejności co ich sygnatury czasowe ważności.
Usuwanie nie jest wykonywane w sposób transakcyjny. Dokumenty z tym samym czasem ważności niekoniecznie są usuwane w tym samym czasie. Jeśli potrzebujesz takiego zachowania, usuń dokumenty za pomocą biblioteki klienta.
Cloud Firestore zawsze będzie uwzględniać najnowsze pole TTL, aby określić czas ważności. Jeśli na przykład pole TTL dokumentu, który utracił ważność, ale nie został jeszcze usunięty, zostanie zaktualizowane do późniejszej daty, dokument nie utraci ważności i zostanie użyta nowa data.
Cloud Firestore powoduje utratę ważności dokumentu tylko wtedy, gdy pole TTL jest ustawione na wartość
Date and time/BSON Datelub wartośćArrayzawierającą wartośćDate and time/BSON Date. Aby wyłączyć utratę ważności poszczególnych dokumentów, pozostaw pole puste lub ustaw wartość taką jaknull.TTL został zaprojektowany tak, aby minimalizować wpływ na inne działania w bazie danych. Usuwanie na podstawie TTL jest traktowane z niższym priorytetem. Stosowane są też inne strategie, które mają na celu wygładzenie skoków natężenia ruchu spowodowanych usuwaniem na podstawie TTL.
Różnice w przypadku indeksów 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 polu używanym z TTL, musisz dodać je do osobnego indeksu innego niż TTL.
Pamiętaj, że ponieważ pola TTL używają sygnatur czasowych, dodanie ich do indeksu innego niż TTL może prowadzić do powstawania hotspotów. Hotspoty występują, gdy duża liczba zapisów i usunięć jest skoncentrowana w wąskim zakresie dokumentów, co może negatywnie wpłynąć 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 te uprawnienia:
- Do wyświetlania indeksów TTL wymagane są uprawnienia
datastore.indexes.listidatastore.indexes.get. - Do tworzenia lub usuwania indeksów TTL wymagane jest uprawnienie
datastore.indexes.update. - Do sprawdzania stanu operacji TTL wymagane są uprawnienia
datastore.operations.listidatastore.operations.get.
Role, które przypisują te uprawnienia, znajdziesz w artykule Cloud Firestore Role zarządzania tożsamościami i dostępem.
Tworzenie indeksu TTL
Gdy tworzysz indeks 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 kwalifikują się do usunięcia.
Pole TTL musi być ustawione na wartość Timestamp (Sygnatura czasowa) / BSON Date (Data BSON) lub wartość Array (Tablica) zawierającą wartość Timestamp (Sygnatura czasowa) / BSON Date (Data BSON). Możesz wybrać pole, które już istnieje, lub wyznaczyć 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 od razu kwalifikuje się do usunięcia. 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 ważności. Jeśli expireAfterSeconds jest ustawione na 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 podczas planowania zapytań i nie zwiększają wydajności zapytań.
- W każdej kolekcji możesz utworzyć tylko 1 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
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz wymaganą bazę danych.
W menu nawigacyjnym kliknij 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 się powiedzie, 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
firestore fields ttls updatepolecenia. Dodaj flagę--async, aby gcloud CLI nie czekał 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
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz wymaganą bazę danych.
W menu nawigacyjnym kliknij Czas życia.
Konsola wyświetli listę indeksów TTL dla Twojej bazy danych oraz stan każdego indeksu.
gcloud
Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.
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świetlanie szczegółów operacji
Za pomocą gcloud CLI możesz wyświetlić więcej szczegółów o indeksie TTL
, który jest w stanie CREATING.
Aby wyświetlić wszystkie operacje, które są w toku i zostały niedawno zakończone, użyj polecenia operations list:
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 dzienniki audytu 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 wymaganą bazę danych.
W menu nawigacyjnym kliknij Czas życia.
W tabeli indeksów TTL znajdź wiersz indeksu TTL. W tym wierszu tabeli kliknij przycisk Usuń (kosz).
Potwierdź, klikając Usuń.
Konsola wróci na stronę Czas życia. Jeśli operacja się powiedzie, Cloud Firestore usunie indeks TTL z tabeli.
gcloud
Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud CLI.
Aby skonfigurować indeks TTL, użyj
firestore fields ttls updatepolecenia. Dodaj flagę--async, aby gcloud CLI nie czekał na zakończenie operacji.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
Monitorowanie usuwania na podstawie TTL
Za pomocą Cloud Monitoring możesz wyświetlać dane o usuwaniu na podstawie 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ęć na podstawie czasu życia |
Łączna liczba dokumentów usuniętych przez indeksy TTL. |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | Opóźnienia między utratą ważności a usunięciem na podstawie czasu życia |
Czas, który upłynął od momentu utraty ważności dokumentu w indeksie TTL do momentu jego usunięcia. |
Aby skonfigurować panel z danymi Cloud Firestore, zobacz Zarządzanie panelem niestandardowym i Dodawanie widżetów do panelu.