FIM One 支持两个数据库后端:SQLite(默认,零配置)和 PostgreSQL(推荐用于生产环境)。后端由Documentation 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 | |
|---|---|---|
| 设置 | 零配置,基于文件 | 需要单独的服务器 |
| 并发性 | 单写入器(全局锁) | 完整 MVCC,行级锁定 |
| 多工作进程 | 不支持(WORKERS 必须为 1) | 完全支持 |
| SSE 流式传输 | 流式传输期间保持的连接可能会阻止其他请求 | 并发读写不受影响 |
| 备份 | 复制 .db 文件 | pg_dump 或流式复制 |
| 最适合 | 开发、单用户、演示 | 生产、多用户、团队 |
已知限制:SQLite 并发流式传输
连接池配置
FIM One 为每个后端内部配置 SQLAlchemy 连接池设置。这些是经过调整的默认值,不需要环境变量 — 它们会根据DATABASE_URL 方案自动应用。了解它们有助于解释运行时行为。
SQLite 连接池设置
| 设置 | 值 | 描述 |
|---|---|---|
pool_size | 20 | 连接池中的基础持久连接数 |
max_overflow | 10 | 在负载下创建的额外连接(总计最多 30 个) |
| WAL 日志模式 | 已启用 | 预写日志允许在写入进行时进行并发读取,显著降低锁争用 |
busy_timeout | 30s | 当写入锁被持有时,其他写入者最多等待 30 秒后才会抛出错误,而不是立即失败 |
synchronous | NORMAL | 与 WAL 模式兼容;提供比默认 FULL 更好的写入吞吐量 |
PostgreSQL 连接池设置
| 设置 | 值 | 描述 |
|---|---|---|
pool_size | 10 | 连接池中持久连接的基础数量 |
max_overflow | 20 | 在负载下创建的额外连接(总计最多 30 个) |
pool_timeout | 30s | 从连接池等待可用连接的最长时间,超时后抛出错误 |
pool_recycle | 1800s | 连接每 30 分钟回收一次,以防止陈旧连接(对于会关闭空闲连接的云托管数据库很重要) |
切换到 PostgreSQL
第 1 步:启动 PostgreSQL 实例
最快的方式是使用 Docker:第 2 步:设置 DATABASE_URL
在你的.env 文件中添加或更新以下行:
第 3 步:重启 FIM One
现有 SQLite 数据不会自动迁移。 将
DATABASE_URL 从 SQLite 切换到 PostgreSQL 会使用全新数据库启动。如果您在 SQLite 中有需要保留的现有对话、智能体或连接器,请参阅下面的数据迁移部分。Docker Compose(推荐用于生产环境)
如果使用 Docker Compose 部署,PostgreSQL 和 Redis 已包含并自动配置 — 无需额外设置。docker-compose.yml 在内部设置 DATABASE_URL — 你的 .env 值会被覆盖:
数据迁移
SQLite 到 PostgreSQL 没有内置的迁移工具。对于大多数部署,推荐的方法取决于您的情况: 全新部署(无现有数据): 只需将DATABASE_URL 设置为您的 PostgreSQL 连接字符串并启动 FIM One。所有表都会自动创建。
必须保留现有数据: 需要手动导出/导入。一般方法:
- 使用
sqlite3CLI 或 Python 脚本等工具从 SQLite 导出数据 - 根据需要转换数据(SQLite 和 PostgreSQL 有细微的类型差异)
- 使用
psql、pg_restore或应用级别的插入脚本导入到 PostgreSQL