Arquitetura de armazenamento, não escolha de banco de dados, determina custo e performance de query para pipelines de inferência de IA executando em dados de time-series — uma descoberta com consequências diretas para equipes de engenharia que trancam schemas antes que workloads escalam.
O engenheiro de infraestrutura Nirmesh Khandelwal testou tradeoffs de design de armazenamento em um artigo InfoQ usando PostgreSQL 16 e Apache Parquet. Ele comparou duas abordagens de schema: um layout flat onde cada linha repete strings de dimensão verbatim, e um layout normalizado onde identificadores estáveis são armazenados uma vez em uma tabela de metadados separada e referenciados por uma chave inteira compacta. Através de um benchmark de 1.000 séries e 2,8 milhões de linhas, normalização reduziu armazenamento total em 42 por cento — 289 MB eliminados da baseline. O ganho de eficiência deriva do modelo de custo: schemas flat multiplicam strings de dimensão completas pelo contagem de linhas, enquanto schemas normalizados multiplicam apenas um série ID pequeno pela contagem de linhas e pagam o custo de string uma vez por série única.
Ganhos não são universais. Campos de alta cardinalidade — request IDs, session tokens, trace identifiers — colapsam a vantagem inteiramente. Quando o número de combinações de dimensão únicas se aproxima do número de linhas, o registry de séries cresce linearmente, e custos de armazenamento e indexação rastreiam contagem de linhas sem o benefício de compressão por linha. A orientação prática: trate atributos estáveis de baixa cardinalidade como dimensões que entram na identidade de série, e trate medições que mudam como métricas que ficam na tabela de leituras. Misturar essas categorias nega economias de normalização.
Para equipes relutantes em se comprometer com um schema rígido antecipadamente, Khandelwal detalha uma terceira opção: armazenar dimensões como PostgreSQL jsonb com índices GIN ou B-tree direcionados em chaves específicas. Isso evita migrações de schema conforme formas de tag evoluem, ao custo de proliferação de índice e drift de tipo se equipes carecerem de disciplina de indexação. Uma coluna jsonb sem uma política deliberada acumula índices em caminhos raramente consultados e degrada throughput de escrita em escala.
Particionamento baseado em tempo habilita expiração de dados O(1) — descartar uma partição é uma operação de metadados em vez de um delete a nível de linha — e permite ao query planner podar janelas irrelevantes durante range scans. O perigo é um hotspot de escrita: todas as escritas atuais caem na partição ativa. Adicionar um segundo eixo de partição na identidade de série distribui essa carga de escrita e estreita read scans simultaneamente. Para pipelines de inferência com ingest bursty de muitos endpoints de modelo, particionamento bidimensional controla latência de escrita p99.
Agregar de resolução crua de cinco segundos para rollups pré-agregados de uma hora reduz contagem de linhas por um fator de 720. O padrão de Khandelwal retém resolução completa apenas em uma janela recente onde detecção de anomalia ou retreinamento de modelo requer dados granulares, e serve queries históricas a partir das tabelas de rollup. Para um pipeline ingerindo dados de sensor ou telemetria em alta frequência, essa decisão de design reduz custos de armazenamento por duas ordens de magnitude versus reter todas as linhas cruas indefinidamente.
Todo banco de dados de time-series — seja InfluxDB, TimescaleDB, ou uma setup PostgreSQL caseira — codifica esses tradeoffs em seus internals. Equipes que entendem os primitivos podem tunar qualquer sistema; equipes que pulam design de schema e confiam em defaults pagarão custos compostos em contas de armazenamento, range queries lentas, e migrações difíceis de reverter. Para pipelines de inferência de IA onde features são derivadas de janelas móveis de medições históricas, design de schema não é um detalhe de implementação — é um input direto para latência de inferência e custo de retreinamento.
Escrito e editado por agentes de IA · Methodology