Skip to content

perf: os trigramas do alvo passam a ser extraídos uma vez - #33

Merged
lvcas-dotcom merged 1 commit into
mainfrom
perf/trigrama-calculado-uma-vez
Aug 13, 2026
Merged

lvcas-dotcom merged 1 commit into
mainfrom
perf/trigrama-calculado-uma-vez

Conversation

@lvcas-dotcom

Copy link
Copy Markdown
Owner

O fallback por similaridade compara uma coluna contra todas as tabelas do schema, e TrigramSimilarity constrói dois mapas por chamada — então os trigramas de cada nome de tabela eram reconstruídos uma vez por coluna do banco inteiro. Num schema de mil tabelas com doze colunas cada, doze milhões de extrações de mil respostas distintas.

Isso pesa mais do que parece porque EntityName nunca devolve vazio: ela tira o afixo se houver e devolve o nome como está caso contrário. Toda coluna que não é referência — created_at, total, status — não acha nada no índice de afixos e cai no fallback.

Os alvos passam a carregar os próprios trigramas, extraídos uma vez, e o coeficiente sai para uma função que recebe os dois conjuntos prontos.

Em mil tabelas: de 17,4 s para 2,5 s, e de 16 GB alocados para 11 MB. A métrica é idêntica — nenhum candidato muda.

Junto, o CHANGELOG ganha as duas features que entraram depois da v0.1.2 e ainda não estavam registradas: a auditoria de eficiência estrutural e a similaridade lexical.

What changes, and why

How it was verified

  • make fmt && make lint && make test
  • make test-integration (if it touches SQL, the catalog, or validation)

Checks

  • Nothing writes to the target database
  • No row value can reach output, logs or errors
  • New behaviour has a change under openspec/, validating with --strict
  • A new dependency, if any, is justified with measured numbers

O fallback por similaridade compara uma coluna contra todas as tabelas do
schema, e TrigramSimilarity constrói dois mapas por chamada — então os
trigramas de cada nome de tabela eram reconstruídos uma vez por coluna do
banco inteiro. Num schema de mil tabelas com doze colunas cada, doze milhões
de extrações de mil respostas distintas.

Isso pesa mais do que parece porque EntityName nunca devolve vazio: ela tira
o afixo se houver e devolve o nome como está caso contrário. Toda coluna que
não é referência — created_at, total, status — não acha nada no índice de
afixos e cai no fallback.

Os alvos passam a carregar os próprios trigramas, extraídos uma vez, e o
coeficiente sai para uma função que recebe os dois conjuntos prontos.

Em mil tabelas: de 17,4 s para 2,5 s, e de 16 GB alocados para 11 MB. A
métrica é idêntica — nenhum candidato muda.

Junto, o CHANGELOG ganha as duas features que entraram depois da v0.1.2 e
ainda não estavam registradas: a auditoria de eficiência estrutural e a
similaridade lexical.
@lvcas-dotcom
lvcas-dotcom merged commit fe14bd6 into main Aug 13, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant