Nesta página, descrevemos as leituras direcionadas do Spanner e como usá-las.
As leituras direcionadas no Spanner oferecem a flexibilidade de rotear transações somente leitura e leituras únicas para um tipo de réplica ou região específica em uma configuração de instância multirregional ou uma configuração regional personalizada com regiões somente leitura opcionais.
Casos de uso comuns
Alguns casos de uso comuns para leituras direcionadas incluem:
- Faça o balanceamento de carga de cargas de trabalho em várias regiões para conseguir uma utilização mais uniforme da CPU.
- Isolar a análise no aplicativo minimizando o impacto sobre as cargas de trabalho transacionais.
- Fornecer isolamento parcial para leituras de fluxos de mudanças. Se você usa a API Spanner para transmitir alterações de dados do Spanner, pode ajudar a minimizar o impacto nas cargas de trabalho transacionais usando leituras direcionadas.
Operações de consulta compatíveis
Operações de consulta | Há suporte para leituras direcionadas? |
---|---|
Leitura desatualizada | Sim |
Leitura forte | Sim |
Transação de leitura/gravação | No |
As leituras direcionadas não são compatíveis com transações de leitura/gravação e tipos de DML particionado de atualizações em massa. Isso
acontece porque as transações de leitura/gravação precisam ser processadas na região líder. Se as leituras direcionadas forem usadas em uma transação de leitura/gravação, a transação falhará com um erro BAD_REQUEST
.
Limitações
As leituras direcionadas do Spanner têm as seguintes limitações:
- Só é possível usar leituras direcionadas em uma instância do Spanner que esteja em uma configuração de instância multirregional ou em uma configuração regional personalizada com regiões somente leitura opcionais.
- Não é possível usar leituras direcionadas com solicitações de leitura/gravação porque essas solicitações são sempre exibidas pela região líder.
- Não é possível usar leituras direcionadas no console do Google Cloud ou na Google Cloud CLI. Ele está disponível usando as APIs REST e RPC e as bibliotecas de cliente do Spanner.
- É possível especificar no máximo 10 réplicas em uma única leitura direcionada.
- Se você usa o painel de insights do sistema ou o Metrics Explorer, nos gráficos de operações por segundo, operações por segundo por banco de dados e operações por segundo por método da API, talvez veja sua solicitação de leitura direcionada em um local diferente do designado. Nesse caso, as informações dos gráficos podem estar incorretas. Use as métricas de utilização da CPU para confirmar se as solicitações de leitura são roteadas para as regiões escolhidas. Essas métricas mostram as informações mais precisas sobre para onde o tráfego de leituras direcionadas é roteado.
Antes de começar
Considere o seguinte antes de usar leituras direcionadas:
- O aplicativo poderá gerar mais latência se você estiver roteando leituras para uma réplica ou região diferente da mais próxima do aplicativo.
- É possível rotear o tráfego com base em:
- Nome da região (por exemplo:
us-central1
). - Tipo de réplica (valores possíveis:
READ_ONLY
eREAD_WRITE
).
- Nome da região (por exemplo:
- A opção de failover automático em leituras direcionadas é ativada por padrão. Quando a opção de failover automático está ativada e todas as réplicas especificadas estão indisponíveis ou não íntegras, o Spanner encaminha solicitações para uma réplica fora da lista
includeReplicas
. Se você desativar a opção de failover automático e todas as réplicas especificadas não estiverem disponíveis ou não estiverem íntegras, a solicitação de leitura direcionada falhará.
Parâmetros de leituras direcionadas
Se você estiver usando a API REST ou RPC para executar leituras direcionadas, defina
esses campos no parâmetro directedReadOptions
. Só é possível incluir includeReplicas
ou excludeReplicas
, não ambos.
includeReplicas
: contém um conjunto repetido dereplicaSelections
. Essa lista indica a ordem em que as leituras direcionadas a regiões ou tipos de réplica específicos precisam ser consideradas. É possível especificar no máximo 10includeReplicas
.replicaSelections
: consiste nolocation
ou na réplicatype
que atende à solicitação de leitura direcionada. Se você usarincludeReplicas
, precisará fornecer pelo menos um destes campos:location
: o local que atende à solicitação de leitura direcionada. O local precisa ser uma das regiões na configuração multirregional do seu banco de dados. Se o local não for uma das regiões na configuração multirregional do seu banco de dados, as solicitações não serão roteadas como esperado. Em vez disso, eles são atendidos pela região mais próxima. Por exemplo, é possível direcionar leituras para o localus-central1
em um banco de dados na configuração da instância multirregionalnam6
.type
: o tipo de réplica que atende à solicitação de leitura direcionada. Os tipos possíveis incluemREAD_WRITE
eREAD_ONLY
.
autoFailoverDisabled
: por padrão, é definido comoFalse
, o que significa que o failover automático está ativado. Quando a opção de failover automático está ativada e todas as réplicas especificadas estão indisponíveis ou não íntegras, o Spanner encaminha solicitações para uma réplica fora da listaincludeReplicas
. Se você desativar a opção de failover automático e todas as réplicas especificadas estiverem indisponíveis ou não íntegras, a solicitação de leitura direcionada falhará. Os valores possíveis incluemTRUE
para desativado eFALSE
para ativado.
excludeReplicas
: contém um conjunto repetido dereplicaSelections
que é excluído das solicitações de veiculação. O Spanner não encaminha solicitações para réplicas nesta lista.replicaSelections
: o local ou tipo de réplica que está excluído da solicitação de leitura direcionada. Se você usarexcludeReplicas
, será necessário fornecer pelo menos um destes campos:location
: o local que foi excluído da veiculação da solicitação de leitura direcionada.type
: o tipo de réplica que é excluído da solicitação de leituras direcionadas. Os tipos possíveis incluemREAD_WRITE
eREAD_ONLY
.
Para ver um exemplo de corpo de solicitação REST, clique na guia REST na seção Usar leituras direcionadas.
Usar leituras direcionadas
É possível usar as bibliotecas de cliente do Spanner e as APIs REST e RPC para executar leituras direcionadas.
Bibliotecas de cliente
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
É possível usar as seguintes APIs REST para realizar leituras direcionadas:
Por exemplo, para executar leituras direcionadas em us-central1
usando executeSQL
:
Para a sessão, digite:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
Substitua:
- PROJECT-ID: o ID do projeto;
- INSTANCE-ID: o ID da instância
- DATABASE-ID: o ID do banco de dados.
- SESSION-ID: o ID da sessão.
Você recebe o valor
SESSION-ID
ao criar uma sessão.
Para o Corpo de solicitação, use o seguinte:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Clique em Executar. A resposta exibe os resultados da consulta.
RPC
É possível usar as seguintes APIs RPC para realizar leituras direcionadas:
A seguir
- Saiba como realizar leituras fora de transações.