Lecturas dirigidas

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 un tipo o región de réplica específico dentro de una configuración de instancia birregional o multirregional o una configuración regional personalizada con regiones de solo lectura opcionales.

Beneficios

Las lecturas dirigidas ofrecen los siguientes beneficios:

  • Proporcionan más control sobre las cargas de trabajo de balanceo de cargas en varias regiones para lograr un uso más uniforme de la CPU y evitar el aprovisionamiento excesivo de instancias de Spanner.
  • Habilitan el aislamiento de la carga de trabajo. Puedes dirigir tus cargas de trabajo de estadísticas y lecturas de flujos de cambios a réplicas específicas de Spanner para minimizar el impacto en las cargas de trabajo transaccionales que se ejecutan en la misma base de datos de Spanner.

Operaciones de consulta compatibles

Operaciones de consulta ¿Se admiten las lecturas dirigidas?
Lectura inactiva
Lectura sólida
Transacción de lectura y escritura No

Las lecturas dirigidas no se admiten para 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 se encuentre en una configuración de instancia birregional o multirregional o una configuración regional personalizada con regiones de solo lectura opcionales.
  • 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 Google Cloud consola de Google Cloud ni en Google Cloud CLI. Está disponible con 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.

Antes de comenzar

Ten en cuenta lo siguiente antes de usar las lecturas dirigidas:

  • La aplicación puede incurrir en una latencia adicional si enrutas lecturas a una réplica o región que no sea la más cercana a la aplicación.
  • Puedes enrutar el tráfico según lo siguiente:
    • Nombre de la región (por ejemplo, us-central1).
    • Tipo de réplica (valores posibles: READ_ONLY y READ_WRITE).
  • 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 no son correctas, 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 no son correctas, falla la solicitud de lecturas dirigidas.

Parámetros de lecturas dirigidas

Si usas la API de REST o RPC para realizar lecturas dirigidas, debes definir estos campos en el parámetro directedReadOptions. Solo puedes incluir uno de includeReplicas o excludeReplicas, no ambos.

  • includeReplicas: Contiene un conjunto repetido de replicaSelections. Esta lista indica el orden en el que se deben considerar las lecturas dirigidas a regiones o tipos de réplicas específicos. Puedes especificar un máximo de 10 includeReplicas.

    • replicaSelections: Consta de la location o el type de réplica que entrega la solicitud de lecturas dirigidas. Si usas includeReplicas, debes proporcionar al menos uno de los siguientes campos:

      • location: La ubicación que entrega la solicitud de lecturas dirigidas. La ubicación debe ser una de las regiones dentro de la configuración birregional o multirregional de tu base de datos. Si la ubicación no es una de las regiones dentro de la configuración birregional o multirregional de tu base de datos, las solicitudes no se enrutarán como se espera. En cambio, se entregan en la región más cercana. Por ejemplo, puedes dirigir lecturas a la ubicación us-central1 en una base de datos en la configuración de instancia multirregional nam6.

        También puedes especificar el location parámetro con un leader o non-leader literal de cadena. Si ingresas el valor leader, Spanner dirige tus solicitudes a la réplica líder de la base de datos. Por el contrario, si ingresas el valor non-leader, Spanner cumple con la solicitud en la réplica no líder más cercana.

      • type: El tipo de réplica que entrega la solicitud de lecturas dirigidas. Entre los tipos posibles, se incluyen READ_WRITE y READ_ONLY.

    • autoFailoverDisabled: De forma predeterminada, se establece en False, 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 no son correctas, 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 no son correctas, falla la solicitud de lecturas dirigidas. Los valores posibles incluyen TRUE para inhabilitado y FALSE para habilitado.

  • excludeReplicas: Contiene un conjunto repetido de replicaSelections que se excluye de la entrega de solicitudes. Spanner no enruta solicitudes a réplicas en esta lista.

    • replicaSelections: La ubicación o el tipo de réplica que se excluye de la entrega de la solicitud de lecturas dirigidas. Si usas excludeReplicas, debes proporcionar al menos uno de los siguientes campos:
      • location: La ubicación que se excluye de la entrega de la solicitud de lecturas dirigidas.
      • type: El tipo de réplica que se excluye de la entrega de la solicitud de lecturas dirigidas. Entre los tipos posibles, se incluyen READ_WRITE y READ_ONLY.

Para ver un ejemplo de cómo se ve un cuerpo de 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++

void DirectedRead(std::string const& project_id, std::string const& instance_id,
                  std::string const& database_id) {
  namespace spanner = ::google::cloud::spanner;

  // Create a client with a DirectedReadOption.
  auto client = spanner::Client(