En esta página, se describen las lecturas dirigidas de Spanner y cómo usarlas.
Las lecturas dirigidas en Spanner proporcionan la flexibilidad para enrutar transacciones de solo lectura y lecturas únicas a una región o tipo de réplica específico dentro de una configuración de instancia multirregional o una configuración regional personalizada con regiones de solo lectura opcionales.
Casos de uso habituales
Estos son algunos casos de uso comunes para las lecturas dirigidas:
- Balanceo de cargas de cargas de trabajo en varias regiones para lograr un uso de CPU más uniforme
- Aislar las estadísticas en tu aplicación minimizando el impacto en las cargas de trabajo transaccionales.
- Proporcionar aislamiento parcial para las lecturas de flujos de cambios Si usas la API de Spanner para transmitir cambios de datos de Spanner, puedes ayudar a minimizar el impacto en las cargas de trabajo transaccionales mediante el uso de lecturas dirigidas.
Operaciones de consulta compatibles
Operaciones de consulta | ¿Se admiten las operaciones de lectura dirigidas? |
---|---|
Lectura inactiva | Sí |
Lectura sólida | Sí |
Transacción de lectura y escritura | No |
Las lecturas directas no son compatibles con las transacciones de lectura y escritura ni los tipos de DML particionado de actualizaciones masivas. Esto se debe a que las transacciones de lectura y escritura deben procesarse en la región líder. Si se usan lecturas dirigidas en una transacción de lectura y escritura, la transacción falla con un error BAD_REQUEST
.
Limitaciones
Las lecturas dirigidas de Spanner tienen las siguientes limitaciones:
- Solo puedes usar lecturas dirigidas en una instancia de Spanner que esté en una configuración de instancia multirregional o en una configuración regional personalizada con regiones opcionales de solo lectura.
- No puedes usar lecturas dirigidas con solicitudes de lectura y escritura porque la región líder siempre entrega las solicitudes de escritura.
- No puedes usar lecturas dirigidas en la consola de Google Cloud ni en Google Cloud CLI. Está disponible mediante las APIs de REST y RPC, y las bibliotecas cliente de Spanner.
- Puedes especificar un máximo de 10 réplicas en una sola lectura dirigida.
- Si usas el panel de estadísticas del sistema o el Explorador de métricas, en los gráficos de Operaciones por segundo, Operaciones por segundo por base de datos y Operaciones por segundo por método de API, es posible que veas la solicitud de lectura dirigida en una ubicación que no sea la que designaste. En este caso, la información de los gráficos podría ser incorrecta. Puedes confirmar que las solicitudes de lectura se enruten a las regiones elegidas con las métricas de uso de CPU. Estas métricas muestran la información más precisa sobre dónde se enruta el tráfico de lectura dirigido.
Antes de comenzar
Ten en cuenta lo siguiente antes de usar las lecturas dirigidas:
- La aplicación puede incurrir en latencia adicional si enrutas las lecturas a una réplica o región que no sea la más cercana a la aplicación.
- Puedes enrutar el tráfico en función de lo siguiente:
- Nombre de la región (por ejemplo:
us-central1
). - Tipo de réplica (valores posibles:
READ_ONLY
yREAD_WRITE
).
- Nombre de la región (por ejemplo:
- La opción de conmutación por error automática en las lecturas dirigidas está habilitada de forma predeterminada. Cuando la opción de conmutación por error automática está habilitada y todas las réplicas especificadas no están disponibles o en mal estado, Spanner enruta las solicitudes a una réplica fuera de la lista
includeReplicas
. Si inhabilitas la opción de conmutación por error automática y todas las réplicas especificadas no están disponibles o en mal estado, la solicitud de lectura dirigida fallará.
Parámetros de lecturas directas
Si usas la API de REST o RPC para realizar lecturas dirigidas, debes definir estos campos en el parámetro directedReadOptions
. Solo puedes incluir un valor de includeReplicas
o excludeReplicas
, pero no ambos.
includeReplicas
: Contiene un conjunto repetido dereplicaSelections
. Esta lista indica el orden en el que se deben considerar las lecturas dirigidas a regiones o tipos de réplica específicos. Puedes especificar un máximo de 10includeReplicas
.replicaSelections
: Consiste en eltype
delocation
o la réplica que entrega la solicitud de lectura dirigida. Si usasincludeReplicas
, debes proporcionar al menos uno de los siguientes campos:location
: La ubicación que entrega la solicitud de lectura dirigida. La ubicación debe ser una de las regiones dentro de la configuración multirregional de tu base de datos. Si la ubicación no corresponde a una de las regiones dentro de la configuración multirregional de la base de datos, las solicitudes no se enrutarán como se espera. En cambio, reciben servicios de la región más cercana. Por ejemplo, puedes dirigir las lecturas a la ubicaciónus-central1
en una base de datos en la configuración de instancia multirregionalnam6
.type
: Es el tipo de réplica que entrega la solicitud de lectura dirigida. Los tipos posibles incluyenREAD_WRITE
yREAD_ONLY
.
autoFailoverDisabled
: De forma predeterminada, se establece enFalse
, lo que significa que la conmutación por error automática está habilitada. Cuando la opción de conmutación por error automática está habilitada y todas las réplicas especificadas no están disponibles o en mal estado, Spanner enruta las solicitudes a una réplica fuera de la listaincludeReplicas
. Si inhabilitas la opción de conmutación por error automática y todas las réplicas especificadas no están disponibles o en mal estado, la solicitud de lectura dirigida fallará. Entre los valores posibles, se incluyenTRUE
para inhabilitado yFALSE
para habilitado.
excludeReplicas
: Contiene un conjunto repetido dereplicaSelections
que se excluye de las solicitudes de entrega. Spanner no enruta las solicitudes a las réplicas de esta lista.replicaSelections
: Es la ubicación o el tipo de réplica que se excluye de la entrega de la solicitud de lectura dirigida. Si usasexcludeReplicas
, debes proporcionar al menos uno de los siguientes campos:location
: Es la ubicación que se excluye de entregar la solicitud de lecturas dirigidas.type
: Es el tipo de réplica que se excluye de la entrega de la solicitud de lecturas dirigidas. Los tipos posibles incluyenREAD_WRITE
yREAD_ONLY
.
Para ver un ejemplo de cómo se ve el cuerpo de una solicitud de REST, haz clic en la pestaña REST en la sección Usa lecturas dirigidas.
Usa lecturas dirigidas
Puedes usar las bibliotecas cliente de Spanner y las APIs de REST y RPC para realizar lecturas dirigidas.
Bibliotecas cliente
C++
C#
Go
Java
Node.js
PHP
Python
Rita
REST
Puedes usar las siguientes APIs de REST para realizar lecturas dirigidas:
Por ejemplo, para realizar lecturas dirigidas en us-central1
con executeSQL
, usa lo siguiente:
Haz clic en
projects.instances.databases.sessions.executeSql
.En sesión, ingresa lo siguiente:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
Reemplaza lo siguiente:
- PROJECT-ID: El ID del proyecto.
- INSTANCE-ID: El ID de la instancia.
- DATABASE-ID: Es el ID de la base de datos.
- SESSION-ID: Es el ID de sesión.
Recibirás el valor
SESSION-ID
cuando crees una sesión.
En el cuerpo de la solicitud, usa lo siguiente:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Haz clic en Ejecutar. En la respuesta, se muestran los resultados de la consulta.
RPC
Puedes usar las siguientes APIs de RPC para realizar lecturas dirigidas:
¿Qué sigue?
- Obtén más información sobre cómo realizar lecturas fuera de transacciones.