FIM One unterstützt zwei Datenbank-Backends: SQLite (Standard, keine Konfiguration erforderlich) und PostgreSQL (empfohlen für Produktionsumgebungen). Das Backend wird durch die UmgebungsvariableDocumentation Index
Fetch the complete documentation index at: https://docs.fim.ai/llms.txt
Use this file to discover all available pages before exploring further.
DATABASE_URL bestimmt.
SQLite vs PostgreSQL
| SQLite | PostgreSQL | |
|---|---|---|
| Setup | Keine Konfiguration erforderlich, dateibasiert | Erfordert einen separaten Server |
| Concurrency | Single-Writer (globale Sperre) | Vollständiges MVCC, Sperren auf Zeilenebene |
| Multi-Worker | Nicht unterstützt (WORKERS muss 1 sein) | Vollständig unterstützt |
| SSE Streaming | Verbindungen während Streams können andere Anfragen blockieren | Gleichzeitige Lese- und Schreibvorgänge sind nicht betroffen |
| Backup | .db-Datei kopieren | pg_dump oder Streaming-Replikation |
| Am besten geeignet für | Entwicklung, Einzelnutzer, Demos | Produktion, mehrere Benutzer, Teams |
Bekannte Einschränkung: SQLite Concurrent Streaming
Verbindungspoolkonfiguration
FIM One konfiguriert SQLAlchemy-Verbindungspooleinstellungen intern für jedes Backend. Dies sind optimierte Standardwerte, die keine Umgebungsvariablen erfordern – sie werden automatisch basierend auf demDATABASE_URL-Schema angewendet. Das Verständnis dieser Einstellungen hilft, das Laufzeitverhalten zu erklären.
SQLite Pool-Einstellungen
| Einstellung | Wert | Beschreibung |
|---|---|---|
pool_size | 20 | Basis-Anzahl persistenter Verbindungen im Pool |
max_overflow | 10 | Zusätzliche Verbindungen, die unter Last erstellt werden (bis zu 30 insgesamt) |
| WAL Journal-Modus | Aktiviert | Write-Ahead Logging ermöglicht gleichzeitige Lesevorgänge während ein Schreibvorgang läuft, wodurch die Sperrkontention erheblich reduziert wird |
busy_timeout | 30s | Wenn die Schreibsperre gehalten wird, warten andere Schreiber bis zu 30 Sekunden, bevor ein Fehler ausgelöst wird, anstatt sofort fehlzuschlagen |
synchronous | NORMAL | Sicher mit WAL-Modus; bietet besseren Schreibdurchsatz als der Standard FULL |
PostgreSQL-Pool-Einstellungen
| Einstellung | Wert | Beschreibung |
|---|---|---|
pool_size | 10 | Basiszahl persistenter Verbindungen im Pool |
max_overflow | 20 | Zusätzliche Verbindungen, die unter Last erstellt werden (bis zu 30 insgesamt) |
pool_timeout | 30s | Maximale Wartezeit für eine freie Verbindung aus dem Pool, bevor ein Timeout-Fehler ausgelöst wird |
pool_recycle | 1800s | Verbindungen werden alle 30 Minuten recycelt, um veraltete Verbindungen zu vermeiden (wichtig für Cloud-gehostete Datenbanken, die untätige Verbindungen schließen) |
Wechsel zu PostgreSQL
Schritt 1: Starten Sie eine PostgreSQL-Instanz
Der schnellste Weg ist mit Docker:Schritt 2: DATABASE_URL festlegen
Fügen Sie die folgende Zeile in Ihrer.env-Datei hinzu oder aktualisieren Sie sie:
Schritt 3: FIM One neu starten
Vorhandene SQLite-Daten werden nicht automatisch migriert. Das Wechseln von
DATABASE_URL von SQLite zu PostgreSQL beginnt mit einer frischen Datenbank. Wenn Sie vorhandene Gespräche, Agenten oder Konnektoren in SQLite haben, die Sie beibehalten möchten, siehe den Abschnitt Datenmigration unten.Docker Compose (Empfohlen für Produktion)
Wenn Sie mit Docker Compose bereitstellen, sind PostgreSQL und Redis bereits enthalten und automatisch konfiguriert — es gibt nichts Zusätzliches zu konfigurieren. Diedocker-compose.yml setzt DATABASE_URL intern — Ihr .env-Wert wird überschrieben:
Datenmigration
Es gibt kein integriertes Migrationstool von SQLite zu PostgreSQL. Für die meisten Bereitstellungen hängt der empfohlene Ansatz von Ihrer Situation ab: Neue Bereitstellung (keine vorhandenen Daten): Setzen Sie einfachDATABASE_URL auf Ihre PostgreSQL-Verbindungszeichenfolge und starten Sie FIM One. Alle Tabellen werden automatisch erstellt.
Vorhandene Daten, die beibehalten werden müssen: Manuelle Export/Import ist erforderlich. Der allgemeine Ansatz:
- Exportieren Sie Daten aus SQLite mit einem Tool wie
sqlite3CLI oder einem Python-Skript - Transformieren Sie die Daten nach Bedarf (SQLite und PostgreSQL haben geringfügige Typunterschiede)
- Importieren Sie in PostgreSQL mit
psql,pg_restoreoder Skripten auf Anwendungsebene