Catch up on highlights from Firebase at Google I/O 2023. Learn more

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 . Podczas używania i testowania aplikacji Cloud Firestore generuje komunikaty o błędach, które pomagają tworzyć dodatkowe indeksy wymagane przez aplikację. Na tej stronie opisano sposób zarządzania 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.

Podążaj za wygenerowanym linkiem do konsoli Firebase, przejrzyj automatycznie wypełnione informacje i kliknij Utwórz .

Role i uprawnienia

Zanim będziesz mógł utworzyć indeks w Cloud Firestore, upewnij się, że masz przypisaną jedną z następujących ról:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

Jeśli zdefiniowałeś role niestandardowe, przypisz wszystkie następujące uprawnienia do tworzenia indeksów:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

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. Wprowadź nazwę kolekcji i ustaw pola, według których chcesz uporządkować indeks.
  4. Kliknij Utwórz .

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

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ń w alercie.

Użyj interfejsu wiersza polecenia Firebase

Możesz też wdrażać indeksy za pomocą Firebase CLI . Aby rozpocząć, uruchom firebase init firestore w katalogu projektu. Podczas konfiguracji Firebase CLI generuje plik JSON z domyślnymi indeksami w odpowiednim formacie. Edytuj plik, aby dodać więcej indeksów i wdróż go za pomocą komendy firebase deploy . Jeśli chcesz wdrożyć tylko indeksy, dodaj flagę --only firestore:indexes . Jeśli wprowadzasz zmiany w indeksach za pomocą konsoli Firebase, upewnij się, że aktualizujesz również lokalny plik indeksów. Zapoznaj się z dokumentacją dotyczącą definicji indeksu JSON .

Czas budowania indeksu

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

  • Konfiguracja indeksu zajmuje kilka minut. Minimalny czas budowania indeksu to kilka minut, nawet dla 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 pasuje do definicji indeksu, tym dłużej trwa uzupełnianie indeksu.

Kompilacje indeksów to długotrwałe operacje .

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

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

Można jednak pominąć przedrostek 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ą wyświetlane przez kilka dni po zakończeniu:

gcloud firestore operations list

Sprawdź status operacji

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

gcloud firestore operations describe operation-name

Szacowanie czasu realizacji

Podczas działania operacji sprawdź wartość pola state dla ogólnego stanu operacji.

Żądanie stanu długotrwałej operacji zwraca również metryki workEstimated i workCompleted . Te metryki są zwracane dla liczby dokumentów. workEstimated pokazuje szacunkową całkowitą liczbę dokumentów, które operacja będzie przetwarzać. 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 być inna niż wartość workEstimated .

Podziel workCompleted według workEstimated aby uzyskać przybliżone oszacowanie postępu. Oszacowanie może być niedokładne, ponieważ zależy od opóźnionego gromadzenia statystyk.

Oto przykładowy stan postępu w budowaniu 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 zakończeniu 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ścią jest false . Nie polegaj na istnieniu done wartości dla operacji w toku.

Błędy budowania indeksu

Podczas zarządzania indeksami złożonymi i wykluczeniami indeksu pojedynczego pola mogą wystąpić błędy budowania indeksu. Operacja indeksowania może zakończyć się niepowodzeniem, jeśli Cloud Firestore napotka problem z danymi, które indeksuje. 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 utworzenie indeksu nie powiedzie się, w konsoli zostanie wyświetlony komunikat o błędzie. Po upewnieniu się, że nie przekraczasz żadnych limitów indeksowania , spróbuj ponownie wykonać operację indeksowania.