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árioRecomendado
App PostgreSQL simples com custo reduzidogcp-cloud-sql
Performance OLTP superior, cargas mistas OLTP + analíticasAlloyDB
Busca por similaridade com embeddings (RAG, recomendação)AlloyDB
Escala global, transações distribuídas multi-regiãogcp-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-east1

Conexã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_banco

També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 plano

AlloyDB 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:latest

Inclui 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-vpc

Monitoramento

  • 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