Entwicklung einer neuen Erweiterung für die Vektorsuche in SQLite
- sqlite-vec ist eine neue SQLite-Erweiterung für Vektorsuche und soll das bisherige sqlite-vss ersetzen.
- Es soll ein „schnell genug“ eingebettetes Vektor-Suchwerkzeug werden, das in allen Umgebungen, in denen SQLite läuft, ausführbar ist (einschließlich WASM).
- Es befindet sich noch in der Entwicklung, aber sobald es fertig ist, lohnt es sich, einen Blick ins Repository zu werfen.
Eigenschaften von sqlite-vec
- Eine in reinem C geschriebene, von Abhängigkeiten freie SQLite-Erweiterung
- Benutzerdefinierte SQL-Funktionen und virtuelle Tabellen für eine schnelle Vektorsuche
- Weitere Werkzeuge und Hilfsmittel für Vektoraufgaben (Quantisierung, JSON/BLOB/numpy-Konvertierung, Vektoroperationen usw.)
- Vektorsuche ist nur mit SQL möglich (mit
CREATE VIRTUAL TABLE, INSERT INTO, SELECT)
Vorteile von sqlite-vec
- Aufgrund der reinen C-Implementierung kann es auf allen Plattformen (Linux/macOS/Windows), im Webbrowser (WebAssembly), auf Mobiltelefonen, Raspberry Pi usw. ausgeführt werden.
- Die Binärgröße ist klein und liegt im Bereich von einigen hundert KB.
- Der Speicherverbrauch lässt sich besser kontrollieren (Vektoren werden in Blöcken gespeichert und bei einer KNN-Suche blockweise gelesen).
- Mit dem Kommando
PRAGMA mmap_size kann die In-Memory-Geschwindigkeit gesteigert werden.
- Durch die Unterstützung variabler Embeddings wie Matryoshka sowie int8/bit-Vektoren ist eine binäre und skalare Quantisierung möglich.
- Bietet mehr Kontrolle über Geschwindigkeit, Genauigkeit und Datenträgerplatz.
- Anfangs wird nur eine vollständige (exhaustive) Vektorsuche unterstützt; künftig sollen IVF + HNSW ergänzt werden.
Demo
- sqlite-vec kann direkt im Browser ausgeführt werden (die SQLite-Datenbank
movies.bit.db ist geladen).
- Die Tabelle
articles enthält Spalten wie title, release_date und overview.
- In der virtuellen Tabelle
vec_movies sind die Embedding-Vektoren der overview-Spalte gespeichert (768-dimensionale Binärvektoren, 96 Byte).
- Mit einer KNN-ähnlichen Suche können die zehn Filme mit der größten Ähnlichkeit zum gewählten Film gefunden werden.
Probleme von sqlite-vss
- Funktioniert nur unter Linux + macOS (unterstützt Windows, WASM, Mobilgeräte usw. nicht).
- Alle Vektoren werden im Speicher gehalten.
- Zahlreiche Transaktions-bezogene Fehler und Probleme.
- Das Kompilieren ist sehr schwierig und zeitaufwendig.
- Standard-Vektoroperationen fehlen (skalare/binäre Quantisierung usw.).
- Probleme aufgrund der Abhängigkeit von Faiss.
Entwicklungsstand von sqlite-vec
- Die Kernfunktionen funktionieren, aber die Fehlerbehandlung und Tests sind fast nicht vorhanden.
- In der Datei
sqlite-vec.c gibt es 246 TODOs.
- Nach dem Abschluss aller TODOs ist die Veröffentlichung von sqlite-vec v0.1.0 zusammen mit Dokumentation, Demo und Bindings geplant (Ziel: etwa ein Monat).
GN⁺-Meinung
- Der Umstand, dass es ein eingebettetes Vektor-Suchwerkzeug ist, das auf verschiedenen Plattformen und in verschiedenen Umgebungen ausgeführt werden kann, ist attraktiv; insbesondere ist es spannend, dass es im Webbrowser als WASM läuft.
- Der Umstand, dass neuere Vektorsuchtechnologien wie Speicherkontrolle, Embeddings variabler Länge und Quantisierung umgesetzt sind, ist ebenfalls ein Pluspunkt. Geschwindigkeit, Genauigkeit und Speichernutzung scheinen damit flexibler steuerbar.
- Die ausschließliche Unterstützung der Vollsuche ist jedoch ein Engpass. Bei größeren Datenmengen kann es zu Performanceproblemen kommen; die Unterstützung von ANN-Algorithmen wie IVF+HNSW wirkt dringend erforderlich.
- Außerdem scheint es noch zu früh für einen produktiven Einsatz zu sein, da es sich noch in der Frühphase der Entwicklung befindet. Für eine Stabilisierung wird noch etwas Zeit benötigt.
- Ein Benchmark-Vergleich mit bestehenden Vektorsuchbibliotheken wie Faiss scheint ebenfalls nötig zu sein. Der Vorteil einer reinen SQLite-Erweiterung ist zwar klar, aber die Leistung muss noch validiert werden.
1 Kommentare
Hacker News Kommentare