当前位置: 首页 > news >正文

【RAGFlow代码详解-4】数据存储层

数据库基础设施

RAGFlow 使用关系数据库(MySQL 或 PostgreSQL)作为主要元数据存储,通过具有连接池和重试机制的 Peewee ORM 进行管理。

连接管理

数据库连接通过 service_conf.yaml 和环境变量进行配置。该系统支持具有可配置连接池的 MySQL 和 PostgreSQL:
在这里插入图片描述

数据库配置架构

数据库连接参数从 service_conf.yaml 加载,支持连接池、超时配置和自动重新连接处理。

核心数据模型

系统使用几个关键模型类,通过自动时间戳管理扩展 BaseModel

Model目的关键字段
Document文档元数据和处理状态id、kb_id、parser_id、 名称 、 大小 、token_num、chunk_num
Knowledgebase知识库配置id、tenant_id、letter、embd_id、parser_config
Task文档处理任务id、doc_id、 进度 、progress_msg、retry_count
File文件系统元数据id、 名称 、 位置 、 大小 、 类型
TenantLLM每个租户的 LLM 配置llm_factory、tenant_id、llm_name、api_key
User用户帐户信息ID、 电子邮件 、 昵称 、 密码 access_token
UserTenant用户-租户关系user_id、tenant_id、 角色 、 状态

文档存储层

RAGFlow 支持用于矢量和全文搜索的多个文档存储后端:Elasticsearch、Infinity 和 OpenSearch。抽象层允许通过 DOC_ENGINE 环境变量透明地在实现之间切换。

文档存储抽象

在这里插入图片描述

文档存储体系结构

所有文档存储实现都扩展了 DocStoreConnection 抽象基类,提供了统一的接口。后端在初始化时根据 DOC_ENGINE 环境变量选择,配置从 service_conf.yaml 加载和单例连接管理。

Elasticsearch 实现

ESConnection 类提供复杂的查询功能,混合搜索结合了向量相似性和全文匹配,使用 conf/mapping.json 中定义的模式:

在这里插入图片描述

Elasticsearch 查询构造

搜索方法构造复杂的布尔查询,将术语筛选器、向量相似性和全文搜索与 mapping.json 中动态模板定义的字段映射相结合。

Infinity实现

InfinityConnection 提供高性能矢量搜索,包括连接池和从 conf/infinity_mapping.json 迁移模式:
在这里插入图片描述

Infinity查询处理

该系统使用连接池和自动模式迁移,并将搜索条件转换为 Infinity 的查询构建器 API,同时保持每个知识库的表组织。

对象存储层

RAGFlow 通过 STORAGE_IMPL 单例支持多个对象存储后端,可通过 STORAGE_IMPL_TYPE 环境变量进行配置。支持的实现包括 MinIO、AWS S3、Azure Blob Storage 和阿里云 OSS。

存储接口

在这里插入图片描述

多后端对象存储架构

storage_factory.py 中的 get_storage_impl() 工厂函数实现了工厂模式,允许在存储后端之间无缝切换。每个实现都提供相同的接口方法:put()get()rm()obj_exist() get_presigned_url()

Redis 缓存和任务协调

Redis 层提供分布式任务排队、会话管理和缓存功能。系统支持 Redis 和 Valkey(Redis 分支),如 pyproject.toml 中配置的那样。Redis 配置从 service_conf.yaml 加载,并带有密码身份验证和数据库选择。

Redis 架构

在这里插入图片描述
Redis 有多种用途:与优先级队列的任务协调、Flask 会话存储、用于成本优化的 LLM 响应缓存以及用于性能的文件缓存。

任务处理工作流程

任务执行遵循具有进度跟踪和错误处理的结构化管道:
在这里插入图片描述

任务处理顺序

每个任务都通过块构建、嵌入生成和文档存储插入进行,并具有全面的错误处理和重试机制。

服务层架构

服务层通过封装数据库作和业务逻辑的专用服务类提供高级数据访问模式。

服务类层次结构

在这里插入图片描述

服务层组织

每个服务类都提供特定于域的作,同时从 CommonService 继承通用 CRUD 功能。服务处理用户身份验证、知识库管理和文档处理工作流。

知识库服务作

知识库服务提供全面的知识库生命周期管理,包括访问控制和配置管理:

方法目的数据库作
accessible()权限检查通过 UserTenant 验证用户访问权限
accessible4deletion()删除权限检查用户是否是创建者
is_parsed_done()解析状态检查验证所有文件均已处理
get_by_tenant_ids()多租户列表使用分页联接查询
update_parser_config()配置更新深度合并解析器设置
get_field_map()字段映射检索从配置中提取字段映射

该服务包括复杂的访问控制逻辑,用于检查所有权和团队成员权限。

数据流集成

数据层组件协同工作以支持完整的文档处理和检索管道:

在这里插入图片描述

完整的数据流架构

集成数据层支持实时作和批处理工作流,并在所有存储系统中实现一致的状态管理。

http://www.dtcms.com/a/348986.html

相关文章:

  • MySQL学习记录-基础知识及SQL语句
  • 【零代码】OpenCV C# 快速开发框架演示
  • 在 Docker 容器中查看 Python 版本
  • C语言第十二章自定义类型:结构体
  • LangChain RAG系统开发基础学习之文档切分
  • Python核心技术开发指南(016)——表达式
  • 多线程——认识Thread类和创建线程
  • 【记录】Docker|Docker镜像拉取超时的问题、推荐的解决办法及安全校验
  • FPGA时序分析(四)
  • asio的线程安全
  • 使用Cobra 完成CLI开发 (一)
  • 3.1 存储系统概述 (答案见原书 P149)
  • C++ string自定义类的实现
  • 【论文阅读 | arXiv 2025 | WaveMamba:面向RGB-红外目标检测的小波驱动Mamba融合方法】
  • 上科大解锁城市建模新视角!AerialGo:从航拍视角到地面漫步的3D城市重建
  • 深度剖析Spring AI源码(三):ChatClient详解,优雅的流式API设计
  • R60ABD1 串口通信实现
  • 在 Ubuntu 24.04 或 22.04 LTS 服务器上安装、配置和使用 Fail2ban
  • 【Qwen Image】蒸馏版与非蒸馏版 评测小结
  • 第3篇:配置管理的艺术 - 让框架更灵活
  • 多线程下单例如何保证
  • [身份验证脚手架] 前端认证与个人资料界面
  • 2025.8.18-2025.8.24第34周:有内耗有挣扎
  • Spring Cloud 快速通关之Sentinel
  • 遥感机器学习入门实战教程|Sklearn案例⑩:降维与分解(decomposition 模块)
  • [e3nn] 等变神经网络 | 线性层o3.Linear | 非线性nn.Gate
  • 动态规划--编译距离
  • AI代码生成器全面评测:六个月、500小时测试揭示最强开发助手
  • Redis 高可用篇
  • 51单片机-实现定时器模块教程