Administra índices
En esta página, se describe cómo administrar tus índices. Para obtener más información sobre los índices, consulta Descripción general de los índices.
Antes de comenzar
Antes de crear un índice en Firestore compatible con MongoDB, asegúrate de tener asignado alguno de los siguientes roles:
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Para otorgar un rol, consulta Otorga un solo rol. Para obtener más información sobre los roles de Firestore y los permisos asociados, consulta Roles predefinidos.
Si definiste roles personalizados, asigna todos los permisos siguientes para crear índices:
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Crea un índice
Para crear un índice, completa los siguientes pasos:
Google Cloud console
-
En la Google Cloud consola, ve a la página Bases de datos.
- Selecciona una base de datos de la lista.
- En el menú de navegación, haz clic en Índices.
- Haz clic en Crear índice.
- Ingresa un ID de colección.
- Agrega una o más rutas de campo y selecciona una opción de índice para cada una.
- Selecciona una opción de presencia de campo, ya sea no dispersa o dispersa.
- De manera opcional, establece la opción de índice de varias claves.
- Haz clic en Crear.
- Tu índice nuevo se mostrará en la lista de índices y Firestore con compatibilidad con MongoDB comenzará a crearlo. Cuando se cree, verás una marca de verificación verde junto al índice. Si no se crea el índice, consulta Errores en la compilación de índices para conocer las posibles causas.
gcloud CLI
Para crear un índice, usa el comando
gcloud firestore indexes composite create
. Establece api-scope
en 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
Reemplaza lo siguiente:
- DATABASE_ID: Un ID de base de datos.
- COLLECTION: Es un nombre de colección.
- FIELD_CONFIGURATION: Es una configuración de campo. Para cada campo, agrega
--field-config=field-path=
. Por ejemplo:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descending
Para obtener más información sobre la configuración de estos campos, consulta
--field-config
.
Para crear un índice disperso, establece --density=sparse-any
.
Para crear un índice de varias claves, agrega la marca --multikey
.
Terraform
Usa el recurso google_firestore_index
y establece api_scope
en MONGODB_COMPATIBLE_API
y query_scope
en 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" }
Reemplaza lo siguiente:
- DATABASE_ID: El ID de la base de datos que elegiste
- COLLECTION: Es el nombre de la colección que se indexará.
- FIELD_PATH: Es el nombre del campo que se indexará.
- ORDER: Es
ASCENDING
oDESCENDING
. - DENSITY: Es
SPARSE_ALL
odense
.
Borra un índice
Para borrar un índice, completa los siguientes pasos:
Google Cloud console
-
En la Google Cloud consola, ve a la página Bases de datos.
- En la lista de bases de datos, selecciona una.
- En el menú de navegación, haz clic en Índices.
- En la lista de índices, elige Borrar en el botón Más del índice que deseas borrar.
- Haz clic en Borrar índice.
gcloud CLI
Para encontrar el nombre del índice, usa el comando
gcloud firestore indexes composite list
.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Reemplaza DATABASE_ID por el ID de la base de datos.
-
Para borrar el índice, usa el comando
gcloud firestore indexes composite delete
.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Reemplaza lo siguiente:
- INDEX_NAME: Es el nombre de un índice.
- DATABASE_ID: Un ID de base de datos
Tiempo de compilación de índices
Para compilar un índice, Firestore compatible con MongoDB debe crear el índice y, luego, reabastecer las entradas del índice con los datos existentes. El tiempo necesario para crear un índice se determina según lo siguiente:
El tiempo de compilación mínimo de un índice es de unos minutos, incluso para una base de datos vacía.
El tiempo necesario para reabastecer las entradas de índice depende de la cantidad de datos existentes que pertenezcan al índice nuevo. Cuantos más valores de campo coincidan con la definición del índice, más tiempo tardará el reabastecimiento de las entradas del índice.
Administra operaciones de larga duración
Las compilaciones de índices son operaciones de larga duración. En las siguientes secciones, se describe cómo trabajar con operaciones de larga duración para los índices.
Después de comenzar a crear un índice, Firestore con compatibilidad con MongoDB le asigna un nombre único a la operación. Los nombres de las operaciones incluyen el prefijo projects/PROJECT_ID/databases/DATABASE_ID/operations/
. Por ejemplo:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Puedes omitir el prefijo cuando especifiques el nombre de una operación para el comando describe
.
Cómo enumerar todas las operaciones de larga duración
Para enumerar las operaciones de larga duración, usa el comando gcloud firestore operations list
. Este comando enumera las operaciones en curso y las que se completaron recientemente.
Las operaciones se enumeran durante algunos días luego de completarse:
gcloud firestore operations list
Verifica el estado de la operación
En lugar de enumerar todas las operaciones de larga duración, puedes enumerar los detalles de una sola operación:
gcloud firestore operations describe operation-name
Estima la hora de finalización
A medida que se ejecuta tu operación, mira el valor del campo state
para conocer el estado general.
Una solicitud del estado de una operación de larga duración también muestra las métricas workEstimated
y workCompleted
. workEstimated
muestra la cantidad total estimada de documentos que procesará una operación. workCompleted
muestra la cantidad de documentos procesados hasta el momento. Una vez que se completa la operación, workCompleted
refleja la cantidad total de documentos que se procesaron, que podría ser diferente del valor de workEstimated
.
Para estimar el progreso de una operación, divide workCompleted
entre workEstimated
.
El siguiente es un ejemplo del progreso de la creación de un índice:
{ "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" } }, }, ...
Cuando se completa una operación, la descripción de la operación contiene "done": true
. Consulta el valor del campo state
para ver el resultado de la operación. Si el campo done
no está establecido en la respuesta, significa que la operación no se completó.