Zarządzaj indeksami w Cloud Firestore

Cloud Firestore zapewnia wydajność zapytań, wymagając indeksu dla każdego zapytania. Indeksy wymagane dla najbardziej podstawowych zapytań są tworzone automatycznie . Gdy używasz i testujesz swoją aplikację, Cloud Firestore generuje komunikaty o błędach, które ułatwiają tworzenie dodatkowych indeksów wymaganych przez Twoją aplikację. Na tej stronie opisano, jak zarządzać indeksami jednopolowymi i złożonymi .

Utwórz brakujący indeks za pomocą komunikatu o błędzie

Jeśli spróbujesz wykonać zapytanie złożone z klauzulą ​​zakresu, która nie jest mapowana na istniejący indeks, pojawi się błąd. Komunikat o błędzie zawiera bezpośredni link do utworzenia brakującego indeksu w konsoli Firebase.

Kliknij wygenerowany link do konsoli Firebase, przejrzyj automatycznie wypełnione informacje i kliknij Utwórz .

Użyj konsoli Firebase

Aby ręcznie utworzyć nowy indeks z konsoli Firebase:

obraz interfejsu indeksowania firestore w konsoli firebase

  1. Przejdź do sekcji Cloud Firestore w konsoli Firebase .
  2. Przejdź do zakładki Indeksy i kliknij Dodaj indeks .
  3. Wpisz nazwę kolekcji i ustaw pola, według których chcesz uporządkować indeks.
  4. Kliknij Utwórz .

Tworzenie indeksów może potrwać kilka minut, w zależności od rozmiaru zapytania. Po ich utworzeniu możesz zobaczyć swoje indeksy i ich status w sekcji Indeksy złożone. Jeśli nadal budują, konsola Firebase zawiera pasek stanu budynku.

Usuń indeksy

Aby usunąć indeks:

  1. Przejdź do sekcji Cloud Firestore w konsoli Firebase .
  2. Kliknij kartę Indeksy .
  3. Najedź kursorem na indeks, który chcesz usunąć, i wybierz Usuń z menu kontekstowego.
  4. Potwierdź, że chcesz go usunąć, klikając Usuń z alertu.

Użyj interfejsu wiersza polecenia Firebase

Indeksy można również wdrażać za pomocą interfejsu Firebase CLI . Aby rozpocząć, uruchom firebase init firestore w katalogu projektu. Podczas konfiguracji Firebase CLI generuje plik JSON z domyślnymi indeksami w poprawnym formacie. Edytuj plik, aby dodać więcej indeksów, i wdróż go za pomocą polecenia firebase deploy . Jeśli chcesz wdrażać tylko indeksy, dodaj --only firestore:indexes . Jeśli edytujesz indeksy za pomocą konsoli Firebase, pamiętaj, aby zaktualizować również lokalny plik indeksów. Zapoznaj się z dokumentacją dotyczącą definicji indeksu JSON .

Czas kompilacji indeksu

Aby zbudować indeks, Cloud Firestore musi go skonfigurować, a następnie uzupełnić indeks istniejącymi danymi. Czas budowy indeksu to suma czasu konfiguracji i czasu uzupełniania:

  • Konfiguracja indeksu zajmuje kilka minut. Minimalny czas kompilacji indeksu to kilka minut, nawet w przypadku pustej bazy danych.

  • Czas uzupełniania zależy od tego, ile istniejących danych należy do nowego indeksu. Im więcej wartości pól jest zgodnych z definicją indeksu, tym dłużej trwa wypełnianie indeksu.

Kompilacje indeksu to długotrwałe operacje .

Po uruchomieniu budowania indeksu Cloud Firestore przypisuje operacji unikalną nazwę. Nazwy operacji mają przedrostek projects/[PROJECT_ID]/databases/(default)/operations/ , na przykład:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Można jednak pominąć prefiks podczas określania nazwy operacji dla polecenia describe .

Lista wszystkich długotrwałych operacji

Aby wyświetlić listę długotrwałych operacji, użyj polecenia listy operacji gcloud firestore . To polecenie wyświetla listę trwających i ostatnio zakończonych operacji. Operacje są wymienione przez kilka dni po zakończeniu:

gcloud firestore operations list

Sprawdź stan pracy

Zamiast wymieniać wszystkie długotrwałe operacje, możesz wyświetlić szczegóły pojedynczej operacji:

gcloud firestore operations describe operation-name

Szacowanie czasu realizacji

W trakcie wykonywania operacji sprawdź wartość pola state , aby uzyskać ogólny stan operacji.

Żądanie stanu długotrwałej operacji zwraca również metryki workEstimated i workCompleted . Te metryki są zwracane dla liczby dokumentów. workEstimated pokazuje szacowaną łączną liczbę dokumentów, które przetworzy operacja. workCompleted pokazuje liczbę dokumentów przetworzonych do tej pory. Po zakończeniu operacji workCompleted odzwierciedla łączną liczbę faktycznie przetworzonych dokumentów, która może różnić się od wartości workEstimated .

Podziel workCompleted przez workEstimated dla przybliżonego oszacowania postępu. Oszacowanie może być niedokładne, ponieważ zależy od opóźnionego zbierania statystyk.

Na przykład, oto stan postępu budowania indeksu:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

Po wykonaniu operacji opis operacji będzie zawierał "done": true . Zobacz wartość pola state dla wyniku operacji. Jeśli pole done nie jest ustawione w odpowiedzi, to jego wartość to false . Nie polegaj na istnieniu wartości done dla operacji w toku.

Błędy budowania indeksu

Podczas zarządzania indeksami złożonymi i wyłączeniami indeksów jednopolowych mogą wystąpić błędy budowania indeksu. Operacja indeksowania może się nie powieść, jeśli Cloud Firestore napotka problem z indeksowanymi danymi. Najczęściej oznacza to osiągnięcie limitu indeksu . Na przykład operacja mogła osiągnąć maksymalną liczbę wpisów indeksu na dokument.

Jeśli tworzenie indeksu nie powiedzie się, w konsoli zostanie wyświetlony komunikat o błędzie. Po upewnieniu się, że nie osiągasz żadnych limitów indeksowania , ponów operację indeksowania.