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

Comercial

Premium Licenciamento Investimento

Mais

Escopo técnico Citar Sobre
Fale conosco

Todo sistema desta lista já tem uma coluna de inteiros dentro.

Onde isso se encaixa

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, porque ninguém mediu. Cada seção abaixo diz três coisas: a coluna que já existe naquele sistema, o que muda quando ela é classificada, e por onde começar.

Sete áreas, e a lista não é exaustiva — é só onde a coluna é mais fácil de achar. Se a sua não estiver aqui, o teste é o mesmo: cole a coluna na demonstração e veja qual classe ela pede.

7áreas em que a coluna de inteiros já está lá, com oito bytes, porque ninguém mediu
menos bytes numa coluna de telemetria de 0..200 — 30,52 MB viram 3,81 MB
4,11 MBcontra 15,26 MB em 4 milhões de timestamps: a forma certa contra a forma óbvia
0dependências. Um header C11 entra em daemon, em firmware e em build alheio

Sete áreas, e elas não têm o mesmo lastro. Onde existe um exemplo que roda e imprime números, ele está linkado na seção. Onde o encaixe é argumentado — o mecanismo se aplica, mas ainda não há um exemplo medido no repositório — a seção diz isso. A diferença importa: uma coisa é a medição, outra é a dedução, e misturar as duas é o começo de todo exagero.

Bancos de dados e mecanismos colunares

A coluna que já está lá. Chaves primárias e estrangeiras, códigos de status, ordinais de enum, datas como número de dia, contadores, ids de partição. Num layout colunar a coluna é a unidade de armazenamento, então este é o encaixe mais direto que existe.

O que muda. Mecanismos colunares já codificam inteiros — dicionário, empacotamento de bits, delta. O que todos têm em comum é um passo de decodificação: os bytes em disco não são os valores, então alguma coisa precisa reconstruí-los antes de um predicado rodar. O Smart2Raw elimina esse passo por construção. Uma coluna uint8_t é um vetor de uint8_t, então o count_gt caminha nele direto e uma varredura custa exatamente o tráfego de memória do tipo mais estreito — sem buffer de materialização, sem dicionário residente em RAM, sem indireção por valor.

A segunda coisa que muda é a cauda. Toda codificação clássica tem uma forma em que ela aumenta a entrada: medido em 4 milhões de elementos, o dicionário numa coluna de timestamps de alta cardinalidade produz 41,01 MB contra uma linha de base int64 de 30,52 MB. O pior caso do Smart2Raw empata com a linha de base, nunca fica acima dela.

Exemplo que roda: examples/analytics.c

Por onde começar. A coluna quente de uma tabela. Classifique, mantenha o pool residente e rode o seu predicado mais pesado nos dois caminhos — as respostas têm de bater, e a demonstração da página inicial faz exatamente essa comparação antes de você escrever qualquer código.

Sistemas operacionais e Linux

A coluna que já está lá. Contadores de /proc, valores de mapas eBPF, PIDs, inodes, uids e gids, tabelas de socket e de descritor de arquivo, timestamps de log, contagens de syscall. Todos são inteiros com amplitude muito menor do que os 64 bits em que são carregados.

O que muda. A restrição em software de sistema raramente é velocidade bruta — é contra o que você tem permissão de linkar. Um agente que vai rodar na máquina de outra pessoa não pode arrastar junto uma biblioteca de compressão, um runtime e um sistema de build. O Smart2Raw é um header C11 sem dependência, e tem um modo enxuto (-DS2R_NO_STDIO -DS2R_NO_MMAP -DS2R_NO_SIMD) que compila onde quase não há nada.

Encaixe argumentado — o mecanismo se aplica, mas ainda não há exemplo medido no repositório para esta área.

Por onde começar. Um buffer de métricas dentro de um daemon. Copie o header, troque o anel de uint64_t* por um pool classificado, e meça a memória residente.

Observabilidade, IoT e telemetria

A coluna que já está lá. Série temporal de intervalo fixo: um timestamp a cada 60 segundos, um sensor amostrado a taxa fixa, contadores monotônicos, ids de dispositivo, enums de status.

O que muda. É nesta forma que dois mecanismos independentes se somam. Uma coluna de timestamps amostrada a cada 60 s tem um passo comum, então v = base + 60·i e o passo é dividido de forma exata — não por aproximação, por gcd. E a amplitude local é muito menor que a global, então a forma em blocos guarda cada bloco relativo ao próprio mínimo. Medido em 4 milhões de timestamps: o pool plano ingênuo dá 15,26 MB e 0,73 ms; a forma em blocos dá 4,11 MB e 0,04 ms.

Há um terceiro ganho que na prática pesa mais que os dois: quando os metadados de um bloco já decidem o bloco inteiro, o payload não é lido. Numa coluna que para em 200, o count_gt(220) sai de 0,1435 ms para 0,000034 ms — porque não foi preciso olhar para nada.

Exemplo que roda: examples/telemetry.c

Exemplo que roda: examples/iot_edge.c

Por onde começar. Sua janela de retenção. Pegue um dia de uma métrica, rode o s2r_recommend() e compare com o que você guarda hoje.

IA e aprendizado de máquina

A coluna que já está lá. Token ids e índices de vocabulário, ids de feature numa feature store esparsa, offsets de dataset e de shard, listas de vizinhos saindo de um índice vetorial, vetores de rótulo, contabilidade de atenção e de cache. São vetores de inteiros com amplitude conhecida e normalmente estreita — um vocabulário de 50.000 tokens precisa de 16 bits, não de 64.

O que muda. A inferência moderna é limitada por banda de memória, não por aritmética. É por isso que quantização funciona. O Smart2Raw aplica a mesma lógica ao lado inteiro do pipeline, com uma propriedade que a quantização não tem: ele é exato. Não há aproximação nem calibração, porque a classe é escolhida a partir da amplitude real e nada é arredondado. E como os bytes guardados são inteiros nativos, eles entram direto em quem os lê — não há passo de desquantização para pagar na entrada.

Exemplo que roda: examples/ai_kv_cache.c

Exemplo que roda: examples/ai_zeropoint.c

Por onde começar. Os vetores de token id de um dataset, ou as listas de vizinhos de um índice vetorial. Os dois são grandes, os dois são inteiros, e os dois quase sempre são carregados em 64 bits.

Embarcado, MCU, edge e automotivo

A coluna que já está lá. Qualquer buffer de leitura: amostras de ADC, valores de barramento CAN, contadores, temporizadores.

O que muda. Memória é o orçamento, e o orçamento é fechado no projeto. Caber quatro vezes mais amostras no mesmo buffer ali não é otimização — é outro produto. E a restrição que normalmente mata uma biblioteca num microcontrolador não se aplica aqui: não exige alocador, não exige stdio, não exige sistema de arquivos, não exige SIMD, não exige sistema de build. O modo enxuto não é uma promessa, é uma das suítes de teste.

Exemplo que roda: tests/mcu_core.c

Por onde começar. O buffer de amostras. Classifique uma vez, na amplitude que o seu sensor de fato produz.

Mercado financeiro

A coluna que já está lá. Preços em centavos — o que é um passo de 1, 5 ou 25 conforme o tick size. Timestamps de nanossegundo. Ids de instrumento. Volumes. Níveis de livro de ofertas.

O que muda. Dado de tick é o retrato do caso ideal: preço com passo, timestamp com passo, id de amplitude pequena, e volumes muito mais estreitos que 64 bits. Medido em 12 milhões de elementos, uma coluna com passo sai de 22,89 MB e 1,033 ms para 11,44 MB e 0,468 ms — metade do espaço e metade do tempo, por dividir um passo que já estava no dado.

Encaixe argumentado — o mecanismo se aplica, mas ainda não há exemplo medido no repositório para esta área.

Por onde começar. Um instrumento, um dia. O passo é detectado numa única passagem, então em segundos você sabe se o seu dado tem um.

Ferramentas de desenvolvedor

A coluna que já está lá. Tabelas de símbolos, offsets de string, índices de relocação, tabelas de número de linha, contadores de cobertura, amostras de profiling — o interior de todo compilador, linker, depurador e formato binário.

O que muda. São exatamente as colunas em que a amplitude é conhecida no projeto e ignorada mesmo assim. E um header único sem dependência entra num build que já tem opinião formada sobre a própria toolchain.

Encaixe argumentado — o mecanismo se aplica, mas ainda não há exemplo medido no repositório para esta área.

Por onde começar. A tabela de offsets do formato que você já lê.


O que os sete têm em comum

Os bytes continuam executáveis

Sem passo de decodificação, sem materialização, sem dicionário na memória. O que está guardado é o que o processador lê.

Ele não pode aumentar o seu dado

A classificação é por amplitude, e a classe mais larga é o int64 de entrada. O pior caso empata com a linha de base — nunca a excede.

Não há o que instalar

Um header C11. Sem dependência, sem sistema de build, sem configuração, e um modo enxuto para máquinas que quase não têm nada.

O jeito mais rápido de saber se a sua coluna é uma dessas é colar ela na demonstração — ela roda no seu navegador, na sua máquina, e nada do que você colar sai de lá.

Por onde seguir

Veja o mecanismo

As três formas e por que não existe passo de decodificação.

Como funciona →

Veja os números

A mesma coluna em sete formatos, com o comando que reproduz cada linha.

Desempenho →

Teste com o seu dado

Cole uma coluna na demonstração. Ela roda no seu navegador e nada sai de lá.

Ir para a demonstração →