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 저널 모드 | 활성화됨 | Write-Ahead Logging은 쓰기 작업 중에도 동시 읽기를 허용하여 잠금 경합을 크게 줄임 |
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로 가져오기