AlloyDB é o banco de dados PostgreSQL-compatível totalmente gerenciado do GCP. Combina compatibilidade total com PostgreSQL com uma arquitetura que separa log de storage, engine colunar integrada para analytics e recursos de IA vetorial.
Posiciona-se acima do gcp-cloud-sql em performance e abaixo do gcp-spanner em distribuição global.
Quando usar AlloyDB vs alternativas
| Cenário | Recomendado |
|---|---|
| App PostgreSQL simples com custo reduzido | gcp-cloud-sql |
| Performance OLTP superior, cargas mistas OLTP + analíticas | AlloyDB |
| Busca por similaridade com embeddings (RAG, recomendação) | AlloyDB |
| Escala global, transações distribuídas multi-região | gcp-spanner |
Arquitetura
graph LR App --> Primary[Instância Primária<br/>R/W] App --> RP[Read Pool<br/>R apenas] Primary -->|log WAL| LS[Log Storage<br/>Colossus - gerenciado pelo GCP] LS -->|replicação em ms| RP LS --> Primary
- Instância primária: aceita leituras e escritas, failover automático em ~60s
- Read pool: instâncias de leitura que recebem WAL em milissegundos (lag menor que read replicas tradicionais), autoscalável
- Storage: desacoplado do compute, cresce automaticamente, sem provisionar espaço
Criar cluster e instâncias
# Criar cluster AlloyDB
gcloud alloydb clusters create meu-cluster \
--region=southamerica-east1 \
--network=projects/PROJETO/global/networks/minha-vpc \
--password=SENHA_POSTGRES_INICIAL
# Criar instância primária
gcloud alloydb instances create instancia-primaria \
--instance-type=PRIMARY \
--cpu-count=4 \
--cluster=meu-cluster \
--region=southamerica-east1
# Criar read pool com 2 nós
gcloud alloydb instances create read-pool \
--instance-type=READ_POOL \
--cpu-count=2 \
--read-pool-node-count=2 \
--cluster=meu-cluster \
--region=southamerica-east1Conexão
AlloyDB usa o AlloyDB Auth Proxy, similar ao Cloud SQL Auth Proxy:
# Baixar e executar o proxy
./alloydb-auth-proxy \
"projects/PROJETO/locations/REGIAO/clusters/CLUSTER/instances/INSTANCIA" \
--port=5432
# Conectar via psql enquanto o proxy está rodando
psql -h 127.0.0.1 -p 5432 -U postgres -d meu_bancoTambém suporta conexão direta via IP privado dentro da VPC (sem proxy):
import psycopg2
# Via proxy local ou IP privado da instância
conn = psycopg2.connect(
host="127.0.0.1", # ou IP privado da instância
port=5432,
dbname="meu_banco",
user="usuario",
password="senha"
)
cursor = conn.cursor()
cursor.execute("SELECT version()")
print(cursor.fetchone())Para Cloud Run e GKE, o processo é idêntico ao gcp-cloud-sql, usando AlloyDB Auth Proxy como sidecar ou o Connector SDK.
Engine colunar (Columnar Engine)
Mantém automaticamente uma réplica colunar em memória dos dados para queries analíticas. O planner do PostgreSQL decide quando usar row store vs columnar store:
-- Habilitar extensão
CREATE EXTENSION IF NOT EXISTS google_columnar_engine;
-- Adicionar tabela específica ao engine colunar
SELECT google_columnar_engine_add('pedidos');
-- Modo automático: engine decide quais tabelas/colunas colocar no cache colunar
ALTER SYSTEM SET google_columnar_engine.enabled = on;
ALTER SYSTEM SET google_columnar_engine.relations = 'auto';
SELECT pg_reload_conf();
-- Verificar o que está no cache colunar
SELECT * FROM g_columnar_relations;
-- Verificar se uma query usou o engine colunar
EXPLAIN ANALYZE SELECT regiao, SUM(valor) FROM pedidos GROUP BY regiao;
-- procurar "Custom Scan (columnar scan)" no planoAlloyDB AI (busca vetorial)
Integração nativa com pgvector otimizada para embeddings de alta dimensão:
-- Habilitar pgvector
CREATE EXTENSION IF NOT EXISTS vector;
-- Habilitar engine de busca vetorial AlloyDB
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
-- Tabela com campo de embedding
CREATE TABLE documentos (
id SERIAL PRIMARY KEY,
titulo TEXT,
conteudo TEXT,
embedding vector(768) -- dimensão depende do modelo (text-embedding-004: 768)
);
-- Inserir embedding (gerado por Vertex AI)
INSERT INTO documentos (titulo, conteudo, embedding)
VALUES (
'Política de privacidade',
'Este documento descreve...',
'[0.12, -0.05, 0.34, ...]'::vector
);
-- Busca por similaridade coseno (vizinhos mais próximos)
SELECT titulo,
1 - (embedding <=> $1::vector) AS similaridade
FROM documentos
ORDER BY embedding <=> $1::vector
LIMIT 5;
-- Índice ScaNN para busca eficiente em milhões de vetores
CREATE INDEX idx_docs_scann ON documentos
USING scann (embedding cosine)
WITH (num_leaves = 500);Geração de embeddings com Vertex AI
from google.cloud import aiplatform
from vertexai.language_models import TextEmbeddingModel
aiplatform.init(project="meu-projeto", location="us-central1")
model = TextEmbeddingModel.from_pretrained("text-embedding-004")
def get_embedding(texto: str) -> list[float]:
embeddings = model.get_embeddings([texto])
return embeddings[0].values
# Inserir com embedding
embedding = get_embedding("Política de privacidade corporativa")
cursor.execute(
"INSERT INTO documentos (titulo, embedding) VALUES (%s, %s)",
("Política de privacidade", embedding)
)AlloyDB Omni
Versão containerizada do AlloyDB para rodar on-premises ou em outras clouds (multicloud):
# Rodar AlloyDB Omni via Docker
docker run --name alloydb-omni \
-e POSTGRES_PASSWORD=senha \
-p 5432:5432 \
-d google/alloydbomni:latestInclui a mesma engine colunar e suporte a alloydb_scann. Útil para desenvolvimento local com paridade com produção.
Backups e PITR
# Backup manual
gcloud alloydb backups create meu-backup \
--cluster=meu-cluster \
--region=southamerica-east1
# Listar backups
gcloud alloydb backups list --region=southamerica-east1
# Restaurar com PITR para um novo cluster
gcloud alloydb clusters restore cluster-restaurado \
--source-cluster=projects/PROJETO/locations/REGIAO/clusters/meu-cluster \
--point-in-time="2026-05-04T18:00:00Z" \
--region=southamerica-east1 \
--network=projects/PROJETO/global/networks/minha-vpcMonitoramento
- AlloyDB Insights: query insights com planos de execução, queries mais lentas, recomendações de índice
- Columnar engine metrics: hit rate do cache colunar, cobertura de tabelas
- Cloud Monitoring:
alloydb.googleapis.com/instance/cpu/utilization,alloydb.googleapis.com/instance/memory/usage - Replication lag do read pool:
alloydb.googleapis.com/instance/replication/lag
Ver também: gcp | gcp-cloud-sql | gcp-spanner | gcp-boas-praticas | db-tipos-de-bancos-de-dados