FIM One supporte deux backends de base de données : SQLite (par défaut, zéro configuration) et PostgreSQL (recommandé pour la production). Le backend est déterminé par la variable d’environnementDocumentation 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.
SQLite vs PostgreSQL
| SQLite | PostgreSQL | |
|---|---|---|
| Configuration | Zéro configuration, basé sur fichier | Nécessite un serveur séparé |
| Concurrence | Écrivain unique (verrou global) | MVCC complet, verrouillage au niveau des lignes |
| Multi-worker | Non supporté (WORKERS doit être 1) | Entièrement supporté |
| Streaming SSE | Les connexions maintenues pendant les flux peuvent bloquer d’autres requêtes | Les lectures et écritures concurrentes ne sont pas affectées |
| Sauvegarde | Copier le fichier .db | pg_dump ou réplication en continu |
| Idéal pour | Développement, utilisateur unique, démos | Production, multi-utilisateurs, équipes |
Limitation connue : Streaming concurrent SQLite
Configuration du pool de connexions
FIM One configure les paramètres du pool de connexions SQLAlchemy en interne pour chaque backend. Ce sont des valeurs par défaut optimisées qui ne nécessitent pas de variables d’environnement — elles sont appliquées automatiquement en fonction du schémaDATABASE_URL. Les comprendre aide à expliquer le comportement à l’exécution.
Paramètres du pool SQLite
| Paramètre | Valeur | Description |
|---|---|---|
pool_size | 20 | Nombre de base de connexions persistantes dans le pool |
max_overflow | 10 | Connexions supplémentaires créées sous charge (jusqu’à 30 au total) |
| Mode journal WAL | Activé | Write-Ahead Logging permet les lectures concurrentes pendant qu’une écriture est en cours, réduisant considérablement la contention des verrous |
busy_timeout | 30s | Lorsque le verrou d’écriture est maintenu, les autres écrivains attendent jusqu’à 30 secondes avant de lever une erreur, au lieu d’échouer immédiatement |
synchronous | NORMAL | Sûr en mode WAL ; offre un meilleur débit d’écriture que le FULL par défaut |
Paramètres du pool PostgreSQL
| Paramètre | Valeur | Description |
|---|---|---|
pool_size | 10 | Nombre de base de connexions persistantes dans le pool |
max_overflow | 20 | Connexions supplémentaires créées sous charge (jusqu’à 30 au total) |
pool_timeout | 30s | Temps maximum d’attente pour une connexion libre du pool avant de lever une erreur de timeout |
pool_recycle | 1800s | Les connexions sont recyclées toutes les 30 minutes pour éviter les connexions obsolètes (important pour les bases de données hébergées dans le cloud qui ferment les connexions inactives) |
Passage à PostgreSQL
Étape 1 : Démarrer une instance PostgreSQL
Le moyen le plus rapide est d’utiliser Docker :Étape 2 : Définir DATABASE_URL
Ajoutez ou mettez à jour la ligne suivante dans votre fichier.env :
Étape 3 : Redémarrer FIM One
Les données SQLite existantes ne sont pas migrées automatiquement. Le changement de
DATABASE_URL de SQLite à PostgreSQL commence avec une base de données vierge. Si vous avez des conversations, agents ou connecteurs existants dans SQLite que vous devez conserver, consultez la section Migration de données ci-dessous.Docker Compose (Recommandé pour la production)
Si vous déployez avec Docker Compose, PostgreSQL et Redis sont déjà inclus et configurés automatiquement — il n’y a rien d’extra à configurer. Ledocker-compose.yml définit DATABASE_URL en interne — votre valeur .env est remplacée :
Migration de données
Il n’existe pas d’outil de migration intégré de SQLite vers PostgreSQL. Pour la plupart des déploiements, l’approche recommandée dépend de votre situation : Déploiement nouveau (pas de données existantes) : Définissez simplementDATABASE_URL sur votre chaîne de connexion PostgreSQL et démarrez FIM One. Toutes les tables sont créées automatiquement.
Données existantes qui doivent être conservées : Une export/import manuelle est requise. L’approche générale :
- Exportez les données de SQLite en utilisant un outil comme l’interface de ligne de commande
sqlite3ou un script Python - Transformez les données selon les besoins (SQLite et PostgreSQL ont des différences de type mineures)
- Importez dans PostgreSQL en utilisant
psql,pg_restore, ou des scripts d’insertion au niveau de l’application