Pro desktopové agenty, jako jsou AnythingLLM či Cursor, i pro nástroje na příkazové řádce představují vestavěné in-process vektorové databáze často jedinou schůdnou architekturu[1]. Spouštění vektorového vyhledávání přímo v procesu aplikace eliminuje síťovou latenci mezi datacentry, která se běžně pohybuje mezi 15 a 50 milisekundami[2]. Dynamicky načítaná SQLite rozšíření jsou kompilované dynamické knihovny s příponami .dylib, .so nebo .dll[3].

C versus Rust: Porovnání velikosti a parsování

Simon Willison testoval vytvoření uživatelské SQLite funkce parse_number() v jazycích C a Rust za pomoci modelu Claude Opus 5.5[4]. Zkompilované SQLite rozšíření v jazyce Rust dosáhlo velikosti 321 KB s knihovnou Rusqlite a 298 KB s sqlite-loadable-rs, zatímco rozšíření v jazyce C mělo pouhých 14 KB[5].

Rozšíření v jazyce Rust však bylo rychlejší než verze v C, protože implementace parsování čísel v Rustu je dvakrát rychlejší než funkce strtod v jazyce C[6].

Možnosti a výkon frameworku sqlite-loadable-rs

Knihovna sqlite-loadable-rs představuje framework pro tvorbu načítatelných SQLite rozšíření v jazyce Rust inspirovaný projekty rusqlite, pgx a knihovnou pro Go od Riyaze Aliho[7]. Framework sqlite-loadable-rs umožňuje vytvářet virtuální tabulky přes define_virtual_table[8].

Knihovna sqlite-loadable-rs silně spoléhá na nativní C API SQLite, což si v implementaci v Rustu vyžaduje použití unsafe bloků[9]. Rozšíření hello world postavené na sqlite-loadable-rs je zhruba o 10 až 15 procent pomalejší než varianta v C, avšak 20krát až 30krát rychlejší než v jazyce Go[10].

Při specifických operacích navíc Rust dosahuje vyššího výkonu než C: rozšíření sqlite-xsv napsané v Rustu je 1,5krát až 1,7krát rychlejší než oficiální CSV rozšíření SQLite napsané v C a sqlite-regex je dvakrát rychlejší než původní rozšíření regexp[11].

In-process vyhledávání: sqlite-vec a LanceDB

Pro práci s vektory napsal Alex Garcia rozšíření sqlite-vec v čistém přenositelném jazyce C bez externích závislostí jako náhradu za sqlite-vss vyžadující knihovnu Faiss v C++[12]. Knihovna sqlite-vec provádí skenování vektorů přímo pomocí SIMD instrukcí procesoru AVX2, AVX-512 a ARM NEON místo stavby paměťově náročných grafových indexů[13].

Při použití SIMD instrukcí AVX2 zvládne sqlite-vec sekvenční vyhledávání v kolekci 100 000 vektorů za 5 až 15 milisekund[14]. Rozšíření sqlite-vec navíc podporuje jednobitovou binární kvantizaci, která zmenšuje velikost vektorů 32krát a umožňuje výpočet vzdáleností hardwarovými operacemi XOR a popcount[15].

Vektorové vyhledávání v sqlite-vec lze díky integraci přímo v SQLite propojovat s relačními tabulkami v rámci standardních ACID transakcí[16]. Pro další náročné scénáře je k dispozici také vektorová databáze LanceDB, která je postavena v jazyce Rust nad formátem Lance určeným pro multimodální AI a práci se sloupcovými daty[17].