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

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:

  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.