Skip to content

Tech Stack

ComponenteCrate(s)Justificación
Tensor Computeburn + candleburn para training/inference de Neural ODE; candle para inferencia ligera de modelos pre-entrenados
Storage Enginerocksdb (rust-rocksdb)Versionado por prefijo de timestamp, column families, bloom filters
Vector SIMDpulp + auto-vectorizaciónDispatch dinámico SSE4.2/AVX2/AVX-512/NEON; simsimd como fallback
Columnar Analyticsarrow-rs + polarsAnálisis de series temporales sobre warm storage
HTTP/gRPC APIaxum + tonicAPI REST con axum, gRPC streaming con tonic para ingesta en tiempo real
Async RuntimetokioOrquestación de I/O async sin bloquear búsquedas
Serializaciónserde + rkyvserde para API; rkyv (zero-copy deserialization) para datos internos
BitmapsroaringRoaring Bitmaps para filtrado por rango de tiempo en O(1)
Object Storageobject_storeAbstracción sobre S3/GCS/Azure/local filesystem
Consensusraft-rs (openraft)Consistencia de shards temporales en modo distribuido
Hashingxxhash-rustHash rápido para content-addressed delta storage
ODE SolverCustom (Dormand-Prince RK45)Solver adaptativo con SIMD, evaluación de fθf_\theta vía burn
Change PointCustom (PELT + BOCPD)Implementación nativa en Rust de ambos algoritmos

Este proyecto te obligará a dominar aspectos avanzados de Rust en cada fase:

FaseSkill de RustConcepto
Phase 1Generics & TraitsVectorSpace, DistanceMetric, Timestamp como traits genéricos con bounds complejos
Phase 1Unsafe RustKernels SIMD para distancias, acceso raw a buffers de vectores
Phase 2Lifetime managementReferencias a slices temporales sin copiar datos
Phase 2Iterator patternsLazy evaluation sobre series de deltas
Phase 3Async/Concurrencytokio para orquestar ingesta masiva sin bloquear búsquedas; RwLock para índices concurrentes
Phase 3FFIBindings a RocksDB (C++) vía rust-rocksdb
Phase 4Trait objects vs enumsDispatch dinámico para diferentes métricas y solvers
Phase 4Error handlingthiserror/anyhow para propagación elegante en pipelines complejos
Phase 5Memory managementArenas, memory pools, direct memory access para buffers fuera del heap
Phase 5Procedural macrosDSL para definir queries temporales de forma declarativa
Phase 6WASM compilationCompilar kernels de distancia para browser-based demos

The following technical choices were made during the design phase (see Implementation Decisions for full rationale):

CategoryChoiceWhy
Async runtimeTokioIndustry standard, axum/tonic integration
CPU parallelismRayonWork-stealing thread pool for SIMD/search (same as Qdrant)
SIMDpulpSafe, stable Rust, automatic runtime dispatch (AVX2/AVX-512/NEON)
Index concurrencyparking_lot::RwLockReader-biased, no poisoning, concurrent searches
Serialization (HNSW)rkyvZero-copy deserialization, mmap support for large indices
Serialization (storage)postcardCompact, schema-evolvable via serde
AllocatorjemallocPer-thread arenas, used by Qdrant/TiKV
CollectionsSmallVec<[u32; 16]>Inline neighbor lists, zero heap allocation for HNSW
Error handlingthiserror (libs) + anyhow (binary)Typed errors for pattern matching, ergonomic for startup
ML frameworkburn (+ tch-rs for PyTorch interop)Pure Rust autograd + CUDA