Esta página fornece práticas recomendadas e exemplos de código específicos do idioma para ajudar a criar aplicações que usam ligações à base de dados do Cloud SQL de forma eficaz.
Estas amostras são excertos de uma aplicação Web completa disponível para si no GitHub. Saiba mais.
Para ver instruções passo a passo sobre como executar uma aplicação Web de exemplo ligada ao Cloud SQL, siga o link para o seu ambiente:
- Início rápido para estabelecer ligação a partir do seu computador local
- Início rápido para estabelecer ligação a partir do Compute Engine
- Início rápido para estabelecer ligação a partir do Cloud Run
- Início rápido para estabelecer ligação a partir de funções do Cloud Run
- Início rápido para estabelecer ligação a partir do Google Kubernetes Engine
Conjuntos de ligações
Um conjunto de ligações é uma cache de ligações à base de dados que são partilhadas e reutilizadas para melhorar a latência e o desempenho das ligações. Quando a sua aplicação precisa de uma ligação à base de dados, pede uma emprestada ao respetivo conjunto temporariamente. Quando a aplicação termina de usar a ligação, devolve-a ao conjunto, onde pode ser reutilizada da próxima vez que a aplicação precisar de uma ligação à base de dados.
Abrir e fechar ligações
Quando usa uma pool de ligações, tem de abrir e fechar as ligações corretamente, para que as ligações sejam sempre devolvidas à pool quando terminar de as usar. As ligações não devolvidas ou "roubadas" não são reutilizadas, o que desperdiça recursos e pode causar gargalos de desempenho para a sua aplicação.
Python
Java
Node.js
C#
Ir
Ruby
PHP
Número de ligações
Todas as ligações à base de dados usam recursos do lado do cliente e do lado do servidor. Além disso, o Cloud SQL impõe limites de ligação gerais que não podem ser excedidos. Criar e usar menos ligações reduz a sobrecarga e ajuda a manter-se abaixo do limite de ligações.
Python
Java
Node.js
C#
Ir
Ruby
PHP
Atualmente, o PDO não oferece qualquer funcionalidade para configurar limites de ligação.
Retirada exponencial
Se a sua aplicação tentar estabelecer ligação à base de dados e não o conseguir, a base de dados pode estar temporariamente indisponível. Neste caso, o envio de pedidos de ligação repetidos desperdiça recursos. É preferível aguardar antes de enviar pedidos de ligação adicionais para permitir que a base de dados volte a ficar acessível. A utilização de uma retirada exponencial ou outro mecanismo de atraso atinge este objetivo.
Esta nova tentativa só faz sentido quando se estabelece a ligação pela primeira vez ou quando se obtém uma ligação do conjunto pela primeira vez. Se ocorrerem erros a meio de uma transação, a aplicação tem de tentar novamente e tem de o fazer desde o início de uma transação. Assim, mesmo que o conjunto esteja configurado corretamente, a aplicação pode continuar a detetar erros se as ligações forem perdidas.
Python
Java
Node.js
C#
Ir
Atualmente, o pacote database/sql não oferece nenhuma funcionalidade para configurar o recuo exponencial.
Ruby
PHP
Atualmente, o PDO não oferece nenhuma funcionalidade para configurar o recuo exponencial.
Limite de tempo da ligação
Existem muitos motivos pelos quais uma tentativa de ligação pode não ter êxito. A comunicação de rede nunca é garantida e a base de dados pode não conseguir responder temporariamente. Certifique-se de que a sua aplicação processa as ligações danificadas ou sem êxito de forma adequada.
Python
Java
Node.js
C#
Ir
Atualmente, o pacote database/sql não oferece nenhuma funcionalidade para configurar o limite de tempo da ligação. O limite de tempo é configurado ao nível do controlador.
Ruby
PHP
Termine uma associação
Os utilizadores com o privilégio PROCESS
no Cloud SQL podem listar ligações que não gerem. No MySQL 5.7.x, os utilizadores têm de ter o privilégio SUPER
e, no MySQL 8.0.x, os utilizadores têm de ter o privilégio CONNECTION_ADMIN
para executar uma declaração KILL
nestas ligações. A declaração KILL
termina a ligação de qualquer outro utilizador do MySQL (exceto utilizadores administrativos do Cloud SQL). Os utilizadores sem estes privilégios só podem listar e terminar as associações que gerem.
Pode listar as ligações a uma instância através do cliente mysql e executar o comando SHOW PROCESSLIST
. Use o Id
para terminar a associação.
Por exemplo:
mysql> SHOW PROCESSLIST;
mysql> KILL 6;
Duração da ligação
Limitar a duração de uma ligação pode ajudar a evitar a acumulação de ligações abandonadas. Pode usar o conjunto de ligações para limitar a duração das ligações.
Python
Java
Node.js
Atualmente, a biblioteca Node.js "mysql" não oferece qualquer funcionalidade para controlar a duração de uma ligação.
C#
Ir
Ruby
Atualmente, o ActiveRecord não oferece qualquer funcionalidade para controlar a duração de uma ligação.
PHP
Atualmente, o PDO não oferece qualquer funcionalidade para controlar a duração de uma ligação.
Veja a candidatura completa
Para ver a candidatura completa, clique no link abaixo.
Python
Veja a aplicação completa para a linguagem de programação Python.
Java
Veja a aplicação completa para a linguagem de programação Java.
Node.js
Veja a aplicação completa para a linguagem de programação Node.js.
C#
Veja a aplicação completa para a linguagem de programação C#.
Ir
Veja a aplicação completa para a linguagem de programação Go.
Ruby
Veja a aplicação completa para a linguagem de programação Ruby.
PHP
Veja a candidatura completa para a linguagem de programação PHP.
O que se segue?
- Saiba mais sobre o IP privado.
- Saiba mais acerca das quotas e dos limites do Cloud SQL e do App Engine.
- Saiba mais sobre as práticas recomendadas para trabalhar com o Cloud SQL.
- Saiba como estabelecer ligação a partir de uma aplicação externa.