TurboKV supera fjall por 4× em Rust
- TurboKV 0.6 atingiu 2,33 milhões de ops/s em lote de 1.000 chaves por transação, 4,07 vezes acima do fjall 2.11.2 em modo Durable nos benchmarks de 28 de agosto de 2026.
- A biblioteca oferece três predefinições de durabilidade — fast, durable e paranoid —, compressão configurável com LZ4, Snappy ou Zstd, e filtro de Bloom com aceleração AES de
- A comparação com o redb 2.6.3 é descrita pelos autores como contexto arquitetural, não paridade de durabilidade, pois o motor executa F_BARRIERFSYNC por transação no macOS.
O TurboKV 0.6, banco de dados de chave-valor embarcado escrito em Rust, registrou 2,33 milhões de operações por segundo em cargas de escrita em lote de mil chaves por transação — desempenho 4,07 vezes superior ao do concorrente fjall 2.11.2 — em testes realizados em 28 de agosto de 2026 sobre um Apple M4 com macOS 15.3.2 e 32 GiB de RAM.
O que é o TurboKV
TurboKV é um mecanismo de armazenamento assíncrono que opera inteiramente dentro do processo da aplicação, sem necessidade de servidor separado. A biblioteca oferece inserções e leituras atômicas em lote, varreduras de intervalo ordenadas lexicograficamente por bytes brutos, compactação em segundo plano e três predefinições de durabilidade: fast (sem WAL, adequado para caches), durable (recuperação após falha de processo, opção padrão recomendada) e paranoid (sincronização completa antes do retorno, sujeita às garantias do sistema de arquivos). Compressão com LZ4, Snappy ou Zstd é selecionável por abertura do banco. O filtro de Bloom persistido aproveita instruções AES de hardware, o que exige compilação com os flags +aes,+sse2 para alvos x86 e +aes,+neon para ARM.
Resultados dos benchmarks
Os testes foram conduzidos em modo Durable com 200.000 chaves de 20 bytes e valores de 400 bytes — 84 MB de entrada lógica, volume acima do limite de 64 MiB do memtable padrão —, com cache de blocos e compressão desabilitados e cache de páginas do sistema operacional não zerado. Em preenchimento sequencial de chave única, o TurboKV atingiu 1.407.678 ops/s contra 485.252 ops/s do fjall, razão de 2,9×. Em lote sequencial de 100 chaves por transação, a vantagem subiu para 4,4× (2.272.259 vs. 511.600 ops/s); com 1.000 chaves por transação, para 4,07× (2.333.582 vs. 572.671 ops/s).
O redb 2.6.3 apresentou números significativamente menores nas cargas de chave única — 1.397 ops/s no preenchimento sequencial —, mas os autores do benchmark advertem que isso reflete um comportamento específico do macOS: o redb executa um F_BARRIERFSYNC por transação nessa plataforma. A comparação direta de desempenho entre o redb e os demais motores é, portanto, descrita como contexto arquitetural, não como paridade de garantias de durabilidade. Cargas em lote atenuam esse efeito, pois amortizam a barreira fixa por transação.
Modelo de uso e pontos de atenção
A instalação é feita via cargo add turbokv. A abertura do banco exige propriedade exclusiva do diretório-alvo; o encerramento limpo deve ser feito com close() ou close_with_status(), pois o simples descarte do handle não oferece essa garantia. Com o WAL ativado, um único registro ou lote completo precisa caber no campo de payload de 32 bits do WAL; uma mutação cancelada pode já ter alcançado o WAL, e a operação deve ser inspecionada antes de qualquer nova tentativa não idempotente. A atenção explícita a esses cenários de recuperação contrasta com falhas documentadas em outras implementações que dependem de WAL — como a corrupção silenciosa descoberta no Tailscale por um bug de 16 anos no SQLite. Para desenvolvedores que avaliam alternativas de armazenamento embarcado, o segmento inclui também abordagens distintas, como a do BriskDB, que transforma o SQLite em banco shardado com escritas paralelas sem fork do motor.
A principal implicação dos resultados é que o TurboKV demonstra ganhos de desempenho expressivos sobretudo em cargas em lote, cenário comum em aplicações de alta ingestão de dados onde a amortização do custo de sincronização é determinante para a throughput efetiva.
Temas
Organizações