W tej sekcji opisujemy indeksowanie w wersji Cloud Firestore Enterprise. W wersji Enterprise usługi Cloud Firestore domyślnie nie są tworzone żadne indeksy. Aby zwiększyć wydajność bazy danych, utwórz indeksy dla najczęściej używanych zapytań.
Indeksy mają duży wpływ na wydajność bazy danych. Jeśli dla zapytania istnieje indeks, baza danych może wydajnie zwracać wyniki, zmniejszając ilość danych, które należy przeskanować, oraz nakład pracy potrzebny do posortowania wyników. Wpisy indeksu zwiększają jednak koszty przechowywania i ilość pracy wykonywanej podczas operacji zapisu w polach indeksowanych.
Różnice między wersjami
W tabeli poniżej znajdziesz omówienie najważniejszych różnic w indeksowaniu między Cloud Firestore w wersji standardowej a Cloud Firestore w wersji Enterprise.
| Funkcja | Cloud Firestore w wersji standardowej | Cloud Firestore w wersji Enterprise |
|---|---|---|
| Wymagania dotyczące indeksowania | Wszystkie zapytania wymagają indeksów do wykonania. Zapytania są zwykle wydajne ze względu na to wymaganie. | Indeksy nie są wymagane w przypadku zapytań. Możliwe są odczyty nieindeksowane, co eliminuje barierę dla prototypowania. |
| Automatyczne indeksowanie | Domyślnie indeksy oparte na pojedynczych polach są tworzone automatycznie dla wszystkich pól w dokumentach. | Brak automatycznych indeksów. Musisz ręcznie zarządzać wszystkimi indeksami. |
| Gęstość indeksu | Domyślnie rzadkie. Dokument w grupie kolekcji jest indeksowany tylko wtedy, gdy zawiera wartość każdego zindeksowanego pola. | Domyślnie nie są rzadkie. Indeksowane są wszystkie dokumenty w grupie kolekcji.
Pola indeksowane bez wartości są ustawiane na NULL. Działanie
można zmienić za pomocą opcji indeksu rzadkiego. |
| Obsługiwane typy indeksów i opcje |
|
|
Definicja i struktura indeksu
Indeks składa się z tych elementów:
- identyfikator kolekcji,
- listę pól w danej kolekcji,
- kolejność (rosnącą lub malejącą) dla każdego pola;
Indeks może też włączyć opcje sparse lub unique.
Kolejność indeksów
Kolejność i kierunek sortowania każdego pola jednoznacznie definiują indeks. Na przykład te indeksy są odrębnymi indeksami i nie można ich zamieniać:
| Kolekcja | Pola |
|---|---|
| miejscowości | kraj (rosnąco), populacja (malejąco) |
| miejscowości | populacja (malejąco), kraj (rosnąco), |
Podczas tworzenia indeksu na potrzeby zapytania uwzględnij pola w tej samej kolejności co w zapytaniu.
Gęstość indeksu
Domyślnie wpisy indeksu przechowują dane ze wszystkich dokumentów w kolekcji. Jest to tzw. indeks niepełny. Wpis indeksu zostanie dodany do dokumentu niezależnie od tego, czy zawiera on którekolwiek z pól określonych w indeksie. Podczas generowania wpisów indeksu nieistniejące pola są traktowane jako mające wartość NULL. Aby zmienić to działanie, możesz zdefiniować indeks jako indeks rzadki.
Indeksy rzadkie
Indeks rzadki indeksuje tylko dokumenty w kolekcji, które zawierają wartość (w tym wartość null) w co najmniej 1 z zindeksowanych pól. Indeks rzadki obniża koszty przechowywania i może zwiększyć wydajność.
Indeksy unikalne
Ustaw opcję unikalnego indeksu, aby wymusić unikalne wartości w zindeksowanych polach. W przypadku indeksów w wielu polach każda kombinacja wartości musi być unikalna w ramach indeksu. Baza danych odrzuca wszystkie operacje aktualizacji i wstawiania, które próbują utworzyć wpisy indeksu z powtórzonymi wartościami. Jeśli dane w zindeksowanych polach zawierają zduplikowane wartości i spróbujesz utworzyć unikalny indeks, jego budowanie zakończy się niepowodzeniem, a w szczegółach operacji pojawi się komunikat o błędzie.
Pola nieobecne w indeksie unikalnym
Jeśli wstawisz dokument z brakującymi polami dla unikalnego indeksu, indeks ustawi dla tych pól wartości null. Wynikowy wpis indeksu musi być unikalny. W przeciwnym razie operacja się nie powiedzie.
Na przykład w przypadku tego indeksu:
| Kolekcja | Zindeksowane pola | Zakres zapytania |
|---|---|---|
| miejscowości | nazwa (rosnąco) | Kolekcja |
Jeśli dodasz do kolekcji dokument {"abbreviation": "LA"}, unikalny indeks utworzy wpis z wartością name ustawioną na null. Jeśli następnie spróbujesz dodać dokument {"abbreviation": "NYC"}, operacja się nie powiedzie, ponieważ wynikowy wpis w indeksie unikalnym będzie taki sam.
To samo zachowanie dotyczy indeksów unikalnych z wieloma polami.
Podczas tworzenia lub aktualizowania dokumentu brakujące pola indeksowane są ustawiane na null, a wynikowy wpis indeksu musi być w nim unikalny.
Rozwiązywanie problemów z błędami tworzenia indeksu
Podczas zarządzania indeksami mogą wystąpić błędy tworzenia indeksu. Operacja indeksowania może się nie powieść, jeśli w bazie danych wystąpi problem z danymi. Operacje indeksowania mogą się nie powieść z tych powodów:
- Osiągnięto limit indeksu. Na przykład operacja mogła osiągnąć maksymalną liczbę wpisów indeksu na dokument. Jeśli tworzenie indeksu się nie powiedzie, zobaczysz komunikat o błędzie. Jeśli nie osiągnięto limitu indeksowania, spróbuj ponownie wykonać operację indeksowania.
- Ustawisz opcję unikalnego indeksu, a dane indeksowanych pól utworzą zduplikowane wpisy indeksu. Aby kontynuować, usuń z danych zduplikowane kombinacje wartości.
Co dalej?
Dowiedz się, jak tworzyć indeksy i nimi zarządzać.