Files
glpi-neural-brain/SQLITE-STORAGE.md
jbergner b4388d1ebc
All checks were successful
release-tag / release-image (push) Successful in 2m30s
Update 6 SQLite
2026-08-05 05:23:43 +02:00

43 lines
2.2 KiB
Markdown

# 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.