Smart2Raw
Início Aplicações Como funciona Desempenho Comece

Comercial

Premium Licenciamento Investimento

Mais

Escopo técnico Citar Sobre
Fale conosco

Uma biblioteca C de um arquivo só. E não, não é um compressor.

O servidor que você não precisa comprar.

Sua coluna de inteiros ocupa 8 bytes por elemento porque ninguém perguntou de quanto ela precisa. O Smart2Raw pergunta: mede a amplitude real e guarda a coluna na menor classe nativa que essa amplitude exige — 8, 16, 32 ou 64 bits, com ou sem sinal. Depois ele para. Sem dicionário, sem empacotamento de bits, sem passo de decodificação, porque não ficou nada codificado para desfazer.

E é aí que a economia vira velocidade: como os bytes guardados continuam sendo inteiros que a máquina já sabe ler, um registrador de 512 bits processa 64 deles por instrução, em vez de 8. O formato compacto não é um custo pago na leitura — é o que destrava a largura.

menos bytes numa coluna de telemetria de 0..200 — 30,52 MB viram 3,81 MB
13,4×o maior ganho medido: count_gt com sinal em i8, de 1402 para 18833 Mval/s
7áreas onde a coluna de inteiros já está — de banco de dados a microcontrolador
0dependências. Um header C11, e ~3,4 KB de código no microcontrolador

Onde isso se encaixa: banco de dados, telemetria, IoT, IA, embarcado

A pergunta é sempre a mesma — onde está a coluna de inteiros? Quando você começa a procurar, ela está em quase tudo, e quase sempre com oito bytes por elemento, porque a largura foi escolhida pela declaração do tipo e não pelo dado.

Bancos de dados e colunar

Ids, códigos de status, datas como número de dia, contadores, ids de partição. Num layout colunar a coluna é a unidade de armazenamento — o encaixe mais direto que existe.

Sistemas operacionais e Linux

Contadores de /proc, métricas de eBPF, PIDs, inodes, uids, timestamps de log. Um header sem dependência entra dentro de daemon e de agente sem arrastar biblioteca.

Observabilidade, IoT, telemetria

Série temporal de intervalo fixo, sensores, contadores. É aqui que o passo comum e o quadro de referência por bloco atuam juntos: 4 milhões de timestamps saem de 15,26 MB para 4,11 MB.

IA e aprendizado de máquina

Token ids, índices de vocabulário, ids de feature, offsets de dataset, cache KV. A inferência é limitada por banda de memória, não por FLOPs — e aqui não há desquantização para pagar na entrada.

Embarcado, MCU, edge, automotivo

Qualquer buffer de leitura. Caber quatro vezes mais amostras no mesmo buffer não é otimização, é outro produto. O modo enxuto — sem stdio, sem mmap, sem SIMD — é uma das suítes de teste.

Mercado financeiro

Preço em centavos (um passo!), timestamp de nanossegundo, id de instrumento, volumes. Dado de tick é o retrato do caso ideal.

Ferramentas de desenvolvedor

Tabelas de símbolos, offsets, índices em compiladores, linkers e formatos binários. Um header único entra em qualquer build.

Cada uma delas em detalhe, com por onde começar →

Bytes é só um eixo. O outro é o que decide o custo de rodar.

Guardar menos byte é metade da história, e é a metade que todo mundo conta. A outra é o que dá para perguntar aos bytes sem antes transformá-los em outra coisa — e ela só aparece quando você tira os bytes da equação.

Este gráfico faz exatamente isso. A coluna é a mesma, e os dois formatos ocupam praticamente o mesmo espaço: 11,44 MB contra 11,45 MB. Com os bytes empatados, o que sobra no desenho é só processamento.

12 milhões de elementos · os dois formatos ocupam o mesmo tamanho: 11,44 contra 11,45 MB 12 milhões de elementos · os dois formatos ocupam o mesmo tamanho: 11,44 contra 11,45 MB 12 milhões de elementos · os dois formatos ocupam o mesmo tamanho: 11,44 contra 11,45 MB Smart2Raw dicionário, implementado no seu melhor 0 2 4 6 8 milissegundos, um núcleo COUNT(x > 100) 0,60 0,63 empate COUNT(x > 100) — Smart2Raw 0,60 ms, dicionário, implementado no seu melhor 0,63 ms SUM(x) 0,44 7,52 SUM(x) — Smart2Raw 0,44 ms, dicionário, implementado no seu melhor 7,52 ms chegar a um kernel que não é SQL * 0,00 · já está contíguo 7,90 chegar a um kernel que não é SQL — Smart2Raw 0,00 ms, dicionário, implementado no seu melhor 7,90 ms

O par está implementado no seu melhor, com o dicionário sobre valores distintos ordenados — por isso o COUNT empata. É dizer isso que dá crédito às outras duas linhas. O SUM não tem esse atalho: um código não é um operando que se some. E os 7,9 ms da última linha não se movem com implementação melhor — é a definição do formato.

Um código de dicionário só faz sentido para o mecanismo que possui o dicionário. Um inteiro de largura nativa faz sentido para toda instrução da máquina — inclusive as que o formato de armazém não alcança sem antes materializar um buffer.

Todos os números, com o comando que reproduz cada um →

wasm

Como funciona, em três passos

1

Medir a amplitude real

Uma passagem, sem alocar. Para 0..200 a resposta é S2R_8; para −500..500 é S2R_I16.

int8_t cls = s2r_classify_array(v, n);
2

Guardar nessa classe, nativamente

Os elementos viram uint8_t de verdade na memória — não "códigos de 8 bits". Um vetor que qualquer compilador C já sabe ler.

s2r_pool_init(&p, cls, n);
3

Operar sem materializar

O predicado roda em cima dos bytes como estão. Sem decodificação, sem consulta a dicionário, sem buffer intermediário.

s2r_count_gt_fast(&p, 100);

São três formas, e a biblioteca escolhe entre elas medindo em vez de chutando: o pool plano, a forma afim (v = base + passo·i, com o passo achado por gcd) e a forma em blocos, cada bloco relativo ao próprio mínimo. O s2r_recommend() mede as três — porque a porta de entrada óbvia costuma ser a pior.

O mecanismo inteiro, e por que ele não pode aumentar o seu dado →

Contra o que você já tem hoje

Comparar contra "um dicionário" é comparar contra uma abstração. Quase ninguém tem uma em produção; quase todo mundo tem um SQLite. O repositório traz um comparador que roda no seu CSV e imprime a tabela inteira:

o quêSQLiteSmart2Rawganho
SUM2635 µs16,3 µs161×
COUNT com filtro3900 µs69,5 µs56×
tamanho em disco412,0 KB275,7 KB1,49× menor
memória residente934,8 KB (int64/float64) → 342,2 KB2,73×
dado movido por varredura868,1 KB → 275,4 KB3,15×
python benchmarks/maestro/smart2raw_bench.py os_seus_dados.csv

Python aqui é só o maestro: usa a biblioteca padrão para o SQLite e chama os kernels C reais por ctypes. Colunas que de fato precisam de 64 bits, ou que são ponto flutuante, aparecem com 0% de propósito — porque isso é escolher o tipo nativo certo, não comprimir.

A tabela completa, o que os 161× não são, e a linha de 1,18× em que quase não ganhamos →

Por que isso importa agora

Estes três números não são nossos. Vêm de terceiros, e cada um traz a sua fonte. Os números que nós medimos ficam acima, e você reproduz cada um deles aqui mesmo — a separação é de propósito.

3,0× contra 1,6×

O gargalo deixou de ser cálculo

Em 20 anos, o pico de computação do hardware cresceu 3,0× a cada 2 anos. A banda de memória DRAM cresceu 1,6×; a de interconexão, 1,4×. A distância aumenta todo ano.

IEEE Micro · arXiv:2403.14123

→ Somar FLOP parou de resolver. Ler menos byte, sem pagar decodificação, ataca exatamente o lado que ficou estreito.

+58% a 63%

Em um único trimestre

Foi quanto subiu o preço de contrato da DRAM no 2º trimestre de 2026, na pior escassez em quase 15 anos. Um servidor de IA usa de 8 a 10 vezes a memória de um servidor comum.

TrendForce, abril de 2026

→ Byte que você não guarda é dinheiro que você não gasta — e memória que sobra para outra coisa.

945 TWh

Data centers em 2030

O consumo de eletricidade dos data centers deve mais que dobrar até 2030, chegando a cerca de 945 TWh, com a IA como principal motor.

Agência Internacional de Energia

→ Mover menos byte é gastar menos energia por consulta. Não é slogan: é a mesma conta, vista do outro lado.

Aberta sob AGPL-3.0. E existe uma versão que não é publicada.

A versão deste site é a completa e auditável: todo o núcleo, o formato .s2r, os predicados SIMD, a camada de análise, os ports e as 31 suítes de teste. Ela é livre para usar, estudar, modificar e redistribuir — sob AGPL-3.0-or-later, o que significa que tudo o que você construir em cima, inclusive software oferecido pela rede, é liberado sob a mesma licença.

Essa cláusula não é armadilha: é o que torna possível publicar uma versão inteira, auditável e citável sem abrir mão do direito comercial. Se o que você constrói não é publicado sob AGPL — produto vendido a clientes, SaaS, firmware, um dispositivo — então é uma licença comercial, e é uma conversa curta.

Aberta · AGPL-3.0-or-later

Tudo o que está neste site, sem recorte. Pesquisa, estudo, avaliação e ferramenta interna quase sempre param aqui.

A AGPL afeta você? →

Comercial

O direito de embutir em software que você não publica sob AGPL, mais suporte e prioridade em correções.

Como funciona →

Smart2Raw Premium

A versão que não é publicada. Ela vai além do que a menor classe nativa alcança sozinha, e responde perguntas compostas e sobre mais de uma coluna.

O que ela acrescenta →

31 suítes de teste, 0 falhas · 100.950 checagens de fuzz diferencial com sementes fixas · 6 versões depositadas com DOI próprio · 2 defeitos encontrados e publicados com o caso mínimo que reproduz cada um

Por que dá para conferir tudo o que está nesta página

A demonstração acima não é uma imitação escrita em JavaScript. É o próprio include/smart2raw.h, compilado para WebAssembly e rodando no seu navegador. Quando ela informa um tamanho, quem respondeu foi o s2r_pool_bytes(); quando oferece um .s2r para baixar, quem escreveu aqueles bytes foi o s2r_blocked_save().

E todo número que pode ser conferido contra um laço ingênuo é conferido, antes de ser impresso. Uma divergência acende um selo vermelho em vez de imprimir um número bonito.

Por onde seguir

Escreva as três linhas

Um header, sem sistema de build, sem configuração. Ou baixe a demonstração em arquivo único e rode sem internet.

Comece →

Veja onde ele perde

A menor classe nativa tem 8 bits, e isso tem preço. A página de escopo diz qual, com o número.

Escopo técnico →

Fale com quem escreveu

Licença comercial, avaliação com o seu dado, investimento — ou um defeito, que é sempre bem-vindo.

Contato →