Na tej stronie dowiesz się, jak zarządzać indeksami. Więcej informacji o indeksach znajdziesz w artykule Omówienie indeksów.
Zanim zaczniesz
Zanim utworzysz indeks w Cloud Firestore, upewnij się, że masz przypisaną jedną z tych ról:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Aby przyznać rolę, przeczytaj artykuł 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 móc tworzyć indeksy:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Tworzenie indeksu
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 co najwyżej 1 indeksu.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
Pamiętaj o tych ograniczeniach:
- W ramach 1 żądania możesz utworzyć tylko 1 indeks.
db.collection.createIndexes()nie jest obsługiwane. - Dzienniki audytu dotyczące tworzenia indeksu za pomocą interfejsu MongoDB API używają nazwy metody
google.firestore.admin.v1.FirestoreAdmin.CreateIndex. - Obsługiwane opcje indeksu znajdziesz w sekcji Indeksy i właściwości indeksu.
Firebase konsola
-
W konsoli Firebase otwórz stronę Baza danych Firestore.
- Na liście baz danych wybierz bazę danych.
- Na karcie Indeksy kliknij Utwórz indeks.
- Wpisz Identyfikator kolekcji.
- Dodaj co najmniej 1 ścieżkę pola i wybierz dla każdej z nich opcję indeksu.
- Wybierz opcję obecności pola: niepełny lub pełny.
- Opcjonalnie możesz ustawić opcję indeksu wielokluczowego.
- Kliknij Utwórz.
- Nowy indeks pojawi się na liście indeksów, a Cloud Firestore rozpocznie jego tworzenie. Gdy indeks zostanie utworzony, obok niego pojawi się zielony znacznik wyboru. Jeśli indeks nie zostanie utworzony, możliwe przyczyny znajdziesz w sekcji Błędy podczas tworzenia indeksu.
gcloud CLI
Aby utworzyć indeks, użyj
gcloud firestore indexes composite create
polecenia. Ustaw 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=descendingWięcej informacji o konfigurowaniu tych pól znajdziesz w sekcji
--field-config.
Aby utworzyć indeks pełny, ustaw --density=sparse-any.
Aby utworzyć indeks wielokluczowy, dodaj flagę --multikey.
Aby utworzyć indeks unikalny, dodaj flagę --unique.
Terraform
Użyj zasobu
google_firestore_index
i ustaw api_scope na MONGODB_COMPATIBLE_API, a 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.
- COLLECTION: nazwa kolekcji do indeksowania.
- FIELD_PATH: nazwa pola do indeksowania.
- ORDER: jedna z wartości:
ASCENDINGlubDESCENDING. - DENSITY: jedna z wartości:
SPARSE_ANYlubDENSE.
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.
- Na liście baz danych wybierz bazę danych.
- Kliknij kartę Indeksy.
- Na liście indeksów kliknij Usuń pod przyciskiem 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 kompilacji indeksu
Aby utworzyć indeks, Cloud Firestore 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 kompilacji indeksu to kilka minut, nawet w przypadku pustej bazy danych.
Czas potrzebny na wypełnienie wpisów indeksu 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 wypełnianie wpisów indeksu.
Zarządzanie długo trwającymi operacjami
Tworzenie indeksu to długo trwająca operacja. W sekcjach poniżej dowiesz się, jak pracować z długo trwającymi operacjami w przypadku indeksów.
Gdy zaczniesz tworzyć indeks, Cloud Firestore przypisze
do operacji unikalną nazwę. Nazwy operacji mają prefiks projects/PROJECT_ID/databases/DATABASE_ID/operations/,
na przykład:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Podczas określania nazwy operacji w poleceniu describe możesz pominąć prefiks.
Wyświetlanie listy wszystkich długo trwających operacji
Aby wyświetlić listę długo trwających operacji, użyj
gcloud firestore operations list
polecenia. To polecenie wyświetla operacje w toku i te, które zostały niedawno zakończone.
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 pojedynczej operacji:
gcloud firestore operations describe operation-name
Szacowanie czasu zakończenia
Podczas wykonywania operacji sprawdzaj wartość pola state field
aby poznać ogólny stan operacji.
Żądanie stanu długo trwającej operacji zwraca też dane workEstimated i workCompleted. workEstimated pokazuje szacunkową łączną liczbę dokumentów, które operacja przetworzy. workCompleted
pokazuje liczbę dokumentów, które zostały już przetworzone. Po zakończeniu operacji workCompleted odzwierciedla łączną liczbę dokumentów, które zostały faktycznie przetworzone. Może się ona 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. Wynik operacji znajdziesz w wartości pola state
Jeśli w odpowiedzi nie ma pola done, oznacza to, że operacja nie została zakończona.