当前位置: 首页 > 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.xdnf.cn/news/1357597.html

相关文章:

  • 第四章:大模型(LLM)】07.Prompt工程-(12)其他prompt方法
  • 人工智能之数学基础:离散型随机变量
  • 【中文教材】13. 资本流动与外汇市场
  • Redis 高可用开发指南
  • 支持多种模型,无限AI生图工具来了
  • HTTP 接口调用工具类(OkHttp 版)
  • 华为网路设备学习-30(BGP协议 五)Community、
  • pytorch线性回归(二)
  • elasticsearch 7.x elasticsearch 使用scroll滚动查询中超时问题案例
  • MySQL官方C/C++ 接口入门
  • Ubuntu24.04 安装 Zabbix
  • ComfyUI ZLUDA AMD conda 使用遇到的问题
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十五)网格布局
  • 【229页PPT】某大型制药集团企业数字化转型SAP蓝图设计解决方案(附下载方式)
  • 目标检测数据集 第006期-基于yolo标注格式的汽车事故检测数据集(含免费分享)
  • 网络协议UDP、TCP
  • 管道符在渗透测试与网络安全中的全面应用指南
  • 【信息安全】英飞凌TC3xx安全调试口功能实现(调试口保护)
  • OSG库子动态库和插件等文件介绍
  • AlmaLinux 上 Python 3.6 切换到 Python 3.11
  • 从 JUnit 深入理解 Java 注解与反射机制
  • Flink元空间异常深度解析:从原理到实战调优指南
  • 数字防线:现代企业网络安全运维实战指南
  • Maven项目中settings.xml终极优化指南
  • 得物25年春招-安卓部分笔试题1
  • Flink 实时加购数据“维表补全”实战:从 Kafka 到 HBase 再到 Redis 的完整链路
  • GaussDB 数据库架构师修炼(十八) SQL引擎-分布式计划
  • vimware unbuntu18.04 安装之后,没有网络解决方案
  • AI与SEO关键词协同优化
  • 【小程序-慕尚花坊02】网络请求封装和注意事项