TurboKV 0.6 llega como base de datos embebida asíncrona en Rust
TurboKV 0.6 ofrece un almacén clave‑valor embebido, con lotes atómicos, escaneos ordenados y compresión, listo para usarse con Tokio.
TurboKV 0.6 se ha publicado en GitHub como una base de datos clave‑valor embebida escrita en Rust. La librería funciona de forma asíncrona, permite lotes atómicos, escaneos de rangos ordenados, durabilidad configurable, compresión y compactación en segundo plano. Se distribuye como crate de Cargo y se integra fácilmente con Tokio mediante la característica full.
[dependencies]
turbokv = "0.6"
tokio = { version = "1", features = ["full"] }
El formato persistente de filtros Bloom de TurboKV aprovecha las instrucciones AES del hardware. Para compilar en x86/x86_64 se recomienda RUSTFLAGS="-C target-feature=+aes,+sse2"; en ARM/AArch64, RUSTFLAGS="-C target-feature=+aes,+neon". También es posible usar -C target-cpu=native cuando el binario se ejecutará exclusivamente en la misma arquitectura.
Uso rápido
use turbokv::{Db, DbOptions, WriteBatch};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let db = Db::open_with_options("./my-database", DbOptions::durable()).await?;
db.insert(b"user:1", b"Ada").await?;
assert_eq!(db.get(b"user:1").await?, Some(b"Ada".to_vec()));
let mut batch = WriteBatch::new();
batch.put(b"user:2", b"Grace");
batch.put(b"user:3", b"Linus");
batch.delete(b"user:1");
db.write_batch(&batch).await?;
for (k, v) in db.scan_prefix(b"user:").await? {
println!("{} = {}", String::from_utf8_lossy(&k), String::from_utf8_lossy(&v));
}
db.close().await?;
Ok(())
}
Configuración de durabilidad
TurboKV expone tres presets a través de DbOptions:
- fast(): sin registro WAL, ideal para datos en memoria.
- durable(): WAL con escritura periódica, recomendado por defecto.
- paranoid(): sincroniza el WAL antes de cada reconocimiento, garantizando la mayor seguridad frente a fallos de energía.
Con los valores por defecto, el memtable rota a los 64 MiB, el caché de bloques a 64 MiB y el segmento WAL a 1 GiB. Los checkpoints permiten que la mayoría de escrituras sobrevivan a un apagón, siempre que el sistema de archivos respete las llamadas fsync.
API principal
insert(key, value)yinsert_many(iter)para escrituras simples o por lotes.get(key)devuelveOption<Vec<u8>>.remove(key)escribe una tumba,take(key)elimina y devuelve el valor en una operación atómica.write_batch(batch)publica todas las operaciones del lote de forma atómica.scan_prefix(prefix)yrange_queriespermiten recorridos ordenados y prefijos.
Todas las claves y valores son secuencias de bytes arbitrarias (AsRef<[u8]>). La API copia los datos de entrada, por lo que el llamador no necesita preocuparse por la vida útil de los buffers.
TurboKV está pensado para aplicaciones que requieren un motor de almacenamiento local rápido y fiable sin depender de un servidor externo. Su integración con Tokio lo hace apto para servicios micro‑servicio y aplicaciones de alto rendimiento que ya usan runtime asíncrono.
Queda por ver cómo evoluciona el ecosistema Rust en torno a bases de datos embebidas y si la comunidad adoptará TurboKV como alternativa a RocksDB o sled. La documentación está en crecimiento y la primera versión ya incluye pruebas de concurrencia, pero la estabilidad a largo plazo dependerá de la adopción y de futuros parches.

