一、为什么要了解 Dify 的底层数据存储? 性能优化:清楚数据存储架构,有助于理解 Dify 在处理大规模数据(如对话记录、知识库、缓存等)时的效率,并能针对性地优化查询和存取速度。 数据安全:存储方式决定了数据加密、访问控制和合规性策略,影响敏感信息的保护能力。 故障排查:当遇到问题时,了解底层数据存储可以更快地定位故障,例如数据库连接失败、索引异常或查询超时等问题。 扩展性与集成:如果希望将 Dify 与现有业务系统对接,如企业知识库、CRM、ERP等,熟悉其存储结构有助于高效整合数据资源。 成本控制:存储架构直接影响存储成本,例如数据库选择、存储介质优化等,有助于做出更具成本效益的技术决策。 在接下来的内容中,我们将深入探讨 Dify 的底层数据存储架构,包括使用的数据库类型、数据组织方式以及如何优化存储策略,以便更好地利用这个强大的 AI 开发工具。

根据dify的服务,在数据层面有postgresql、redis、文件存储 storage、向量数据库存储vector,下面以此展开。

二、dify-postgresql 2.1 postgresql连接 在Dify中,postgresql默认的连接信息如下:

DB_USERNAME=postgres DB_PASSWORD=difyai123456 DB_HOST=db DB_PORT=5432 DB_DATABASE=dify 1 2 3 4 5 如果你使用的是docker安装方式,则在 dify/docker/ 中的 .env文件里找pg的连接信息。

如果你使用的是官方所说的 源码+docker的模式, 则在则在 dify/docker/ 中的 middleware.env文件里找pg的链接。

如果想在安装时,使用自己的pg数据库,也只需要修改dify/docker/ 中的 .env文件里修改pg的连接信息。

2.2 postgresql重点表简介 dify在使用pg时,使用了两个库dify与dify_plugin 。

2.2.1 postgresql-dify库 在dify库中有74张表,下面挑一些重点表来聊一聊。

用户相关 accounts 所有的用户信息 apps相关 api_requests api_tokens 所有app的token相关信息,与下面的apps表对应 。 app_annotation_hit_histories 记录每个app的标注命中历史,需要开启app的标注并命中才会有记录。 app_annotation_settings 每个app的标注回复与设置。 app_dataset_joins 记录app与知识库dataset 的对应关系。 app_model_configs 记录每个app的设置,如model、input、prompt、dataset_configs、创建与更新用户等。 apps 记录每个app的信息,包含名称、模型、图标、工作流、状态等。 installed_apps 所有的app信息。 sites 工作室里所有的应用包含agent、workflow等。 知识库相关 child_chunks 在知识库中使用父子分段模式下,记录了数据集、文档、段落、段落内容、索引id、索引哈希值。 conversations 记录所有的对话,对话的名称、使用模型、input、对话方式、对话用户等信息。 dataset_collection_bindings 记录每个知识库使用的推理模型、嵌入模型、向量索引 dataset_process_rules 记录每个知识库的规则信息。 dataset_queries 针对知识库的对话记录。 datasets 记录每个知识库的设置信息,如:名称、向量库、索引相关信息、模型信息、向量检索配置等。 document_segments id与 child_chunks 表的 segment_id 字段对应。 documents 所有的文档信息,包含:所属的知识库、文档在知识库里使用的分段模式、文档语言等。 模型相关 3171791-20250312160914236-1504191538.jpg

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐