@@ -0,0 +1,42 @@
|
||||
# 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:
|
||||
|
||||
1. Embeddings werden nicht mehr als lange JSON-Dezimalzahlen gespeichert.
|
||||
2. Ein Flush serialisiert nicht mehr den vollständigen Graphen.
|
||||
3. 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` über `GET /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.
|
||||
Reference in New Issue
Block a user