stamatios
← Voltar ao feed
Lupa acoplada a elefante de banco de dados, extensão de busca full-text TIN para Postgres da PlanetScale
Dev & Engenharia

PlanetScale lança TIN, extensão de busca full-text para Postgres

resumo de ~3 min

O que é o TIN

A PlanetScale anunciou o TIN ("Text INdex"), uma extensão de busca full-text para Postgres. A empresa apresenta o TIN como uma busca de texto rápido, completa e confiável, e destaca que busca full-text é uma das funcionalidades mais pedidas por seus clientes. O produto acompanha o lançamento do Neki, Postgres sharded da PlanetScale, que tem planos a partir de US$ 5/mês.

O TIN serve para construir funcionalidades de busca em aplicações. A empresa cita dois exemplos distintos: uma plataforma de e-commerce que precisa retornar os dez melhores produtos contendo todas as palavras-chave buscadas, e uma plataforma de descoberta jurídica (legal discovery) que precisa retornar todos os documentos que contenham uma ou mais palavras-chave de um conjunto, sem se importar com ranking.

Benchmarks

A PlanetScale rodou benchmarks para avaliar o desempenho em vários desses casos de uso. O corpus usado nos testes é um export de perguntas e respostas do Stack Exchange: 85 GB com 150 milhões de documentos. Cada substring foi interpretada de três formas - como conjunção, como disjunção e como consulta de frase - somando 3.762 consultas. Os testes foram executados em uma instância EC2 AWS i7i.8xlarge com armazenamento NVMe local e CPU moderna com suporte a AVX-512. A empresa afirma que padronizou overhead e replicação para que qualquer pessoa possa reproduzir os benchmarks de índices concorrentes usando o mesmo tipo de instância e limites de container.

Os resultados publicados cobrem quatro cenários:

  1. Consultas mistas (conjunção, disjunção e frase), top-10 por score BM25, sem escritas concorrentes - comparando TIN contra ParadeDB.
  2. Consultas de conjunção e frase, top-10, sem escritas concorrentes - comparando TIN contra ParadeDB e o GIN do Postgres.
  3. Consultas de disjunção, top-10 por BM25, com um cliente concorrente alvo de 1.000 escritas - comparando TIN contra ParadeDB e pg_textsearch; o GIN fica ausente aqui porque estoura memória em consultas de disjunção.
  4. Cenário em que o índice cabe inteiro nos shared buffers, comparando TIN, ParadeDB e GIN.

A empresa reconhece que o desempenho do TIN nos benchmarks "pode ser difícil de acreditar" e dedica uma seção a explicar os motivos técnicos.

Por que o TIN é rápido

A explicação técnica do artigo cobre vários mecanismos:

  • Identificação de documentos: a maioria dos sistemas de busca full-text organiza os índices em segmentos e precisa consultar identificadores de documentos em estruturas externas ao índice. Segundo a PlanetScale, se uma busca casa com 10 milhões de linhas, o ParadeDB e o pg_textsearch precisam procurar 10 milhões de identificadores. O TIN usa identificadores de 48 bits, descritos pela empresa como extremamente eficientes, de modo que consultas de conjunção e disjunção se reduzem a operações mais diretas. Quando o TIN pede ao Postgres os dados físicos das tuplas por trás de cada resultado, evita-se parte dessa indireção.

  • MVCC: o TIN implementa uma solução própria para lidar com o controle de concorrência multiversão (MVCC) do Postgres.

  • Segmentos e merge: na criação de um novo índice para uma tabela, o TIN adota uma abordagem que reduz write amplification e elimina a maior parte do custo de CPU e I/O normalmente associado à fusão de segmentos.

A PlanetScale conclui convidando os leitores a testar o TIN em seus próprios dados de texto e diz que espera ver o que será construído com a extensão.

Correção

Uma errata de 20 de setembro de 2026 informa que o número originalmente divulgado de consultas no benchmark do Stack Exchange estava errado: eram 3.762 consultas, e não as 1.719 reportadas na primeira versão do artigo.