Zarządzaj indeksami w Cloud Firestore

Cloud Firestore zapewnia wydajność zapytań, wymagając indeksu dla każdego zapytania. Indeksy wymagane do najbardziej podstawowych pytań są tworzone automatycznie dla Ciebie. 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ę. Ta strona opisuje jak zarządzać single-pole i złożonych indeksów.

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.

Śledź wygenerowany link do konsoli Firebase przeglądu automatycznie wypełniane informacje, a następnie kliknij przycisk 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 Chmura FireStore z konsoli Firebase .
  2. Przejdź do zakładki indeksów i kliknij Dodaj Index.
  3. Wprowadź 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 Chmura FireStore z konsoli Firebase .
  2. Kliknij kartę Indeksy.
  3. Najedź 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

Można także wdrożyć indeksy z Firebase CLI . Aby rozpocząć, należy uruchomić 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 wdrożyć go z firebase deploy polecenia. Jeśli chcesz tylko wdrożyć indeksów, dodaj --only firestore:indexes flagę. Jeśli edytujesz indeksy za pomocą konsoli Firebase, pamiętaj, aby zaktualizować również lokalny plik indeksów. Zapoznaj się z uwzględnieniem definicji indeksu JSON .

Czas kompilacji indeksu

Aby utworzyć 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.

Indeks opiera się operacji długo pracuje.

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

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

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

Lista wszystkich długotrwałych operacji

Aby lista operacji długo działa, użyj listy operacji gcloud FireStore polecenie. 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

Jak przebiega operacja, patrz wartość state pola dla ogólnego stanu operacji.

Wniosek o statusie długotrwałych operacji zwraca również metryki workEstimated i workCompleted . Te metryki są zwracane dla liczby dokumentów. workEstimated przedstawia szacowaną łączną liczbę dokumentów operacja będzie przetwarzać. workCompleted pokazuje liczbę dokumentów przetwarzane tak daleko. Po uzupełnia działania, workCompleted odzwierciedla całkowitą liczbę dokumentów, które zostały faktycznie przetworzone, które mogą się różnić od wartości workEstimated .

Podzielić workCompleted przez workEstimated dla szacunkowe 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"
        }
       },
    },
    ...

Kiedy operacja jest wykonywana, opis operacji będzie zawierać "done": true . Zobacz wartość state pola dla wyniku operacji. Jeśli done pole nie jest ustawiony w odpowiedzi, a następnie jego wartość jest false . Nie zależy od istnienia done wartości dla operacji w toku.

Błędy budowania indeksu

Podczas zarządzania indeksami złożonymi i wykluczeniami 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 trafisz 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 napotyka żadnych granic indeksów , ponownie spróbować swoich operacji indeksu.