2.2 KiB
Graph Store: modernc.org/sqlite
Ziel
graph-state.json wurde vollständig durch SQLite ersetzt. Die Umstellung optimiert drei Engpässe großer Knowledge-Graphs:
- Embeddings werden nicht mehr als lange JSON-Dezimalzahlen gespeichert.
- Ein Flush serialisiert nicht mehr den vollständigen Graphen.
- Eine unveränderte KB-Synchronisation erzeugt keine erneuten Graphwrites.
Implementierung
- Treiber:
modernc.org/sqlite v1.37.1 - API: Go
database/sql - CGO: nicht erforderlich
- Datenbank:
BRAIN_DATA_DIR/graph.db - Vektoren: binäre
float32-BLOBs - Modellschutz: gespeicherter Name und Ollama-Digest; bei Änderung automatische Vector-Invalidierung
- Journal: WAL
- Flush: inkrementelle Upserts/Deletes innerhalb einer Transaktion
- Export:
VACUUM INTOüberGET /api/state/export
modernc.org/libc ist passend zur verwendeten SQLite-Version auf v1.65.7 festgesetzt.
Verhalten bei identischer KB-Basis
Ein leistungsfähiges System kann den Graphen inklusive Embeddings und Beziehungen aufbauen. Der exportierte graph.db lässt sich anschließend auf ein schwächeres System kopieren. Wichtig sind stabile Dokument-IDs und dasselbe Embedding-Modell.
Nach dem Import führt das Zielsystem weiterhin einen Quellenabgleich durch:
- unverändert: Node, Edge und Vector bleiben bestehen;
- Metadatenänderung ohne Textänderung: nur die Node-Zeile wird aktualisiert;
- Titel, Summary, Kategorien oder Keywords geändert: der alte Vector wird gelöscht und selektiv neu erzeugt;
- Quelle entfernt: zugehörige Nodes, Vektoren und verwaiste Edges werden gelöscht.
Keine Legacy-Migration
Die aktuelle Umgebung ist Staging. Deshalb gibt es absichtlich keinen Importpfad aus graph-state.json. Eine alte JSON-Datei wird im Status nur als legacy_json_present gemeldet und ansonsten ignoriert.
Speicherarme Startkonfiguration
SQLite wird mit einem kleinen Page-Cache von ungefähr 8 MiB, deaktiviertem mmap und dateibasiertem temporärem Speicher geöffnet. Der vollständige Graph und die Embeddings liegen bereits im Go-Arbeitsspeicher; ein zusätzlicher großer SQLite-Cache würde den Speicherbedarf nur verdoppeln. Vor dem Öffnen prüft der Dienst außerdem, ob BRAIN_DATA_DIR tatsächlich beschreibbar ist.