本文档涵盖了 Dify 的数据库模型、关系和存储系统,包括主要的 PostgreSQL 数据库、Redis 缓存层、用于知识检索的向量数据库以及文件存储系统。有关工作流执行存储和节点执行持久化的信息,请参阅工作流引擎文档。
Dify 采用多层存储架构,旨在通过适当的持久化机制处理不同类型的数据。该系统将操作数据、缓存数据、向量嵌入和文件资产分离到专门的存储系统中。
主数据库配置
来源:docker/docker-compose.yaml589-610 api/configs/middleware/__init__.py96-145
该系统使用 PostgreSQL 作为主关系数据库,用于存储应用程序元数据、用户帐户、工作流和操作数据。
数据库连接通过环境变量配置并通过 SQLAlchemy 管理
| 配置 | 默认 | 描述 |
|---|---|---|
DB_HOST | localhost | 数据库服务器主机名 |
DB_PORT | 5432 | 数据库端口 |
DB_USERNAME | postgres | 数据库用户名 |
DB_PASSWORD | - | 数据库密码 |
DB_DATABASE | dify | 数据库名称 |
SQLALCHEMY_POOL_SIZE | 30 | 连接池大小 |
SQLALCHEMY_POOL_RECYCLE | 3600 | 连接回收时间(秒) |
PostgreSQL 实例配置了优化的内存设置
来源:docker/docker-compose.yaml598-602 docker/.env.example200-241 api/configs/middleware/__init__.py96-145
数据库模式围绕几个关键实体类型组织,并具有明确定义的关联。
来源:api/models/model.py75-305 api/models/workflow.py75-171 api/models/account.py67-200 api/models/dataset.py37-120
App 模型(App) 核心应用程序实体,代表独立的 AI 应用程序
completion、workflow、chat、advanced-chat、agent-chatAppModelConfig 和可选的 Workflow 链接到配置Workflow 模型(Workflow)
存储工作流定义和执行图
graph 字段draft 和编号版本支持版本控制features 配置Dataset 模型(Dataset) 管理知识库和文档集合
high_quality、economycollection_binding_id 链接到向量数据库来源:api/models/model.py75-305 api/models/workflow.py75-171 api/models/dataset.py37-120
Redis 在架构中扮演多种角色,包括缓存、会话存储和后台任务的消息代理。
Redis 支持多种部署模式
| 模式 | 配置 | 用例 |
|---|---|---|
| 单一 | REDIS_HOST、REDIS_PORT | 开发、小型部署 |
| Sentinel | REDIS_USE_SENTINEL=true | 高可用性 |
| Cluster | REDIS_USE_CLUSTERS=true | 水平扩展 |
Celery 任务队列使用单独的 Redis 数据库(通常是 db 1)将后台作业与会话数据隔离。
来源:docker/docker-compose.yaml612-624 docker/.env.example248-282 api/configs/middleware/__init__.py8
Dify 支持多种向量数据库后端,用于存储和检索用于知识检索的文档嵌入。
向量存储系统使用工厂模式来支持多种后端
Vector 类在 vector_factory.py 中,根据配置初始化相应的向量存储
VECTOR_STORE 环境变量index_struct_dict 配置来源:api/core/rag/datasource/vdb/vector_factory.py28-56 api/core/rag/datasource/vdb/vector_type.py4-27
该系统按集合命名约定对向量数据库进行分类
| 类别 | 数据库 | 集合命名 |
|---|---|---|
| 大写 | MILVUS、PGVECTOR、WEAVIATE、ELASTICSEARCH | Dataset.gen_collection_name_by_id() |
| 小写 | CHROMA、MYSCALE、OPENSEARCH、TIDB_VECTOR | 小写集合名称 |
| 特殊处理 | QDRANT | 使用 DatasetCollectionBinding |
来源:api/commands.py273-342 api/core/rag/datasource/vdb/vector_type.py4-27
Dify 提供了一个统一的存储抽象层,支持本地和云存储提供商。
存储通过 STORAGE_TYPE 环境变量进行配置
| 提供商 | 类型 | 配置变量 |
|---|---|---|
| OpenDAL (默认) | opendal | OPENDAL_SCHEME、OPENDAL_FS_ROOT |
| Amazon S3 | s3 | S3_BUCKET_NAME, S3_ACCESS_KEY, S3_SECRET_KEY |
| Azure Blob | azure-blob | AZURE_BLOB_ACCOUNT_NAME, AZURE_BLOB_ACCOUNT_KEY |
| Google Cloud | google-storage | GOOGLE_STORAGE_BUCKET_NAME, 服务账户 JSON |
| Alibaba OSS | aliyun-oss | ALIYUN_OSS_BUCKET_NAME, ALIYUN_OSS_ACCESS_KEY |
存储系统处理
来源: api/extensions/ext_storage.py15-100 api/configs/middleware/__init__.py47-73 docker/.env.example307-396
该系统使用 Flask-Migrate 进行数据库模式管理
系统提供了一些用于数据库管理的 CLI 命令
reset-password: 更新用户账户密码reset-email: 更改用户电子邮件地址vdb-migrate: 在提供程序之间迁移向量数据库集合reset-encrypt-key-pair: 重新生成工作区加密密钥当切换向量数据库提供程序时,vdb-migrate 命令支持迁移知识库向量和标注向量。
来源: api/commands.py36-153 api/app_factory.py104-109
数据库通过外键关系强制执行引用完整性
tenant_id 用于多租户来源:api/models/model.py75-305 api/models/workflow.py75-171 api/models/dataset.py37-120