Dotyczy tylko wersji Cloud Firestore Enterprise. |
Na tej stronie dowiesz się, jak zarządzać indeksami. Więcej informacji o indeksach znajdziesz w omówieniu indeksów.
Zanim zaczniesz
Zanim utworzysz indeks w Cloud Firestore w trybie zgodności z MongoDB, upewnij się, że masz przypisaną jedną z tych ról:
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Informacje o przyznawaniu ról znajdziesz w artykule Przyznawanie pojedynczej roli. Więcej informacji o rolach Cloud Firestore i powiązanych z nimi uprawnieniach znajdziesz w artykule Wstępnie zdefiniowane role.
Jeśli masz zdefiniowane role niestandardowe, przypisz wszystkie te uprawnienia, aby utworzyć indeksy:
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Utwórz indeks
Aby utworzyć indeks, wykonaj te czynności:
MongoDB API
Aby utworzyć indeks, użyj metody createIndex()
. Przykład:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
Tworzenie indeksu za pomocą
db.runCommand()
jest też obsługiwane w przypadku maksymalnie 1 indeksu.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
Pamiętaj o tych ograniczeniach:
- Każda prośba może dotyczyć utworzenia tylko jednego indeksu.
db.collection.createIndexes()
nie jest obsługiwany. - Dzienniki kontroli tworzenia indeksu za pomocą interfejsu MongoDB API używają nazwy metody
google.firestore.admin.v1.FirestoreAdmin.CreateIndex
. - Listę obsługiwanych opcji indeksu znajdziesz w sekcji Indeksy i właściwości indeksu.
Firebase konsola
-
W konsoli Firebase otwórz stronę Baza danych Firestore.
- Wybierz bazę danych z listy baz danych.
- Na karcie Indeksy kliknij Utwórz indeks.
- Wpisz identyfikator kolekcji.
- Dodaj co najmniej jedną ścieżkę pola i wybierz dla każdej z nich opcję indeksu.
- Wybierz opcję obecności pola: niepełne lub pełne.
- Opcjonalnie możesz ustawić opcję indeksu wielokluczowego.
- Kliknij Utwórz.
- Nowy indeks pojawi się na liście indeksów, a Cloud Firestore w trybie zgodności z MongoDB rozpocznie jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielony znacznik wyboru. Jeśli indeks nie zostanie utworzony, zapoznaj się z sekcją Błędy tworzenia indeksu, aby poznać możliwe przyczyny.
gcloud CLI
Aby utworzyć indeks, użyj polecenia
gcloud firestore indexes composite create
. Ustaw wartość api-scope
na mongodb-compatible-api
.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
Zastąp następujące elementy:
- DATABASE_ID: identyfikator bazy danych.
- COLLECTION: nazwa kolekcji.
- FIELD_CONFIGURATION: konfiguracja pola. W przypadku każdego pola dodaj
--field-config=field-path=
. Przykład:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descending
Więcej informacji o konfigurowaniu tych pól znajdziesz w artykule
--field-config
.
Aby utworzyć indeks rzadki, ustaw --density=sparse-any
.
Aby utworzyć indeks wielokluczowy, dodaj flagę --multikey
.
Aby utworzyć unikalny indeks, dodaj flagę --unique
.
Terraform
Użyj zasobu google_firestore_index
i ustaw api_scope
na MONGODB_COMPATIBLE_API
oraz query_scope
na COLLECTION_GROUP
.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
Zastąp następujące elementy:
- DATABASE_ID: identyfikator bazy danych wybranej przez Ciebie bazy danych.
- COLLECTION: nazwa kolekcji do indeksowania.
- FIELD_PATH: nazwa pola do indeksowania.
- ORDER: jedna z wartości
ASCENDING
lubDESCENDING
- DENSITY: jedna z wartości
SPARSE_ANY
lubDENSE
Usuwanie indeksu
Aby usunąć indeks, wykonaj te czynności:
MongoDB API
Aby usunąć indeks, użyj metody dropIndex()
. Przykład:
Usuwanie indeksu za pomocą nazwy indeksu
db.restaurants.dropIndex("cuisine_index")
Usuwanie indeksu za pomocą definicji indeksu
db.restaurants.dropIndex({"cuisine" : 1})
Firebase konsola
-
W konsoli Firebase otwórz stronę Baza danych Firestore.
- Wybierz bazę danych z listy baz danych.
- Kliknij kartę Indeksy.
- Na liście indeksów kliknij Usuń w menu Więcej obok indeksu, który chcesz usunąć.
- Kliknij Usuń indeks.
gcloud CLI
Aby znaleźć nazwę indeksu, użyj polecenia
gcloud firestore indexes composite list
.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Zastąp DATABASE_ID identyfikatorem bazy danych.
-
Aby usunąć indeks, użyj polecenia
gcloud firestore indexes composite delete
.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Zastąp następujące elementy:
- INDEX_NAME: nazwa indeksu
- DATABASE_ID: identyfikator bazy danych
Czas tworzenia indeksu
Aby utworzyć indeks, Firestore w trybie zgodności z MongoDB musi go utworzyć, a następnie wypełnić wpisy indeksu istniejącymi danymi. Czas potrzebny na utworzenie indeksu zależy od tych czynników:
Minimalny czas tworzenia indeksu wynosi kilka minut, nawet w przypadku pustej bazy danych.
Czas potrzebny na uzupełnienie wpisów indeksu zależy od ilości istniejących danych, które mają się znaleźć w nowym indeksie. Im więcej wartości pól pasuje do definicji indeksu, tym dłużej trwa wypełnianie wsteczne wpisów indeksu.
Zarządzanie długo trwającymi operacjami
Tworzenie indeksu to długo trwająca operacja. W sekcjach poniżej znajdziesz informacje o tym, jak korzystać z długotrwałych operacji dotyczących indeksów.
Gdy zaczniesz tworzyć indeks, Cloud Firestore w trybie zgodności z MongoDB przypisze operacji unikalną nazwę. Nazwy działań mają prefiks projects/PROJECT_ID/databases/DATABASE_ID/operations/
, np.:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Podczas określania nazwy operacji dla polecenia describe
możesz pominąć prefiks.
Wyświetlanie listy wszystkich długo trwających operacji
Aby wyświetlić listę długotrwałych operacji, użyj polecenia
gcloud firestore operations list
. To polecenie wyświetla listę trwających i niedawno zakończonych operacji.
Operacje są wyświetlane przez kilka dni po zakończeniu:
gcloud firestore operations list
Sprawdzanie stanu operacji
Zamiast wyświetlać listę wszystkich długo trwających operacji, możesz wyświetlić szczegóły jednej operacji:
gcloud firestore operations describe operation-name
Szacowanie czasu ukończenia
Podczas działania operacji sprawdzaj wartość pola state
, aby poznać ogólny stan operacji.
Żądanie stanu długo trwającej operacji zwraca też dane workEstimated
i workCompleted
. workEstimated
– szacowana łączna liczba dokumentów, które zostaną przetworzone w ramach operacji. workCompleted
wyświetla liczbę przetworzonych do tej pory dokumentów. Po zakończeniu operacji wartość workCompleted
odzwierciedla łączną liczbę faktycznie przetworzonych dokumentów, która może się różnić od wartości workEstimated
.
Aby oszacować postęp operacji, podziel workCompleted
przez workEstimated
.
Oto przykład postępu tworzenia 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 jej opis będzie zawierać "done": true
. Sprawdź wartość pola state
, aby poznać wynik operacji. Jeśli w odpowiedzi nie ma pola done
, oznacza to, że operacja nie została ukończona.