MaxKB数据库设计:PostgreSQL表结构深度解析
【免费下载链接】MaxKB 强大易用的开源企业级智能体平台 项目地址: https://gitcode.com/feizhiyun/MaxKB
概述
MaxKB作为一款强大的企业级智能体平台,其底层数据库设计采用了PostgreSQL结合pgvector扩展,为RAG(Retrieval-Augmented Generation,检索增强生成)场景提供了高性能的数据存储和向量检索能力。本文将深入解析MaxKB的核心表结构设计。
核心表结构总览
MaxKB的数据库设计围绕知识管理、用户管理、向量检索等核心功能构建,主要包含以下关键表:
| 表名 | 中文名称 | 主要功能 |
|---|---|---|
knowledge | 知识库表 | 存储知识库基本信息 |
document | 文档表 | 存储文档元数据信息 |
paragraph | 段落表 | 存储文档分段内容 |
embedding | 向量表 | 存储文本向量化数据 |
problem | 问题表 | 存储用户常见问题 |
file | 文件表 | 存储上传文件信息 |
user | 用户表 | 存储系统用户信息 |
knowledge_folder | 知识文件夹表 | 组织知识库的树形结构 |
知识管理模块表结构
1. 知识库表 (knowledge)
CREATE TABLE knowledge (
id UUID PRIMARY KEY DEFAULT uuid7(),
name VARCHAR(150) NOT NULL,
workspace_id VARCHAR(64) DEFAULT 'default',
desc VARCHAR(256),
type INTEGER DEFAULT 0,
scope VARCHAR(20) DEFAULT 'WORKSPACE',
file_size_limit INTEGER DEFAULT 100,
file_count_limit INTEGER DEFAULT 50,
meta JSONB DEFAULT '{}',
embedding_model_id UUID,
user_id UUID,
folder_id VARCHAR(64) DEFAULT 'default',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
字段说明:
type: 知识库类型(0-通用,1-web站点,2-飞书,3-语雀)scope: 可用范围(SHARED-共享,WORKSPACE-工作空间)meta: 存储扩展元数据信息
2. 文档表 (document)
CREATE TABLE document (
id UUID PRIMARY KEY DEFAULT uuid7(),
name VARCHAR(150) NOT NULL,
char_length INTEGER,
status VARCHAR(20) DEFAULT 'pending',
status_meta JSONB DEFAULT '{}',
is_active BOOLEAN DEFAULT true,
type INTEGER DEFAULT 0,
hit_handling_method VARCHAR(20) DEFAULT 'optimization',
directly_return_similarity FLOAT DEFAULT 0.9,
meta JSONB DEFAULT '{}',
knowledge_id UUID NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
状态流转:
3. 段落表 (paragraph)
CREATE TABLE paragraph (
id UUID PRIMARY KEY DEFAULT uuid7(),
content VARCHAR(102400) NOT NULL,
title VARCHAR(256) DEFAULT '',
status VARCHAR(20) DEFAULT 'pending',
status_meta JSONB DEFAULT '{}',
hit_num INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT true,
position INTEGER DEFAULT 0,
document_id UUID NOT NULL,
knowledge_id UUID NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4. 向量表 (embedding) - 核心检索表
CREATE TABLE embedding (
id VARCHAR(128) PRIMARY KEY,
source_id VARCHAR(128) NOT NULL,
source_type INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT true,
embedding VECTOR(1536),
search_vector TSVECTOR,
meta JSONB DEFAULT '{}',
document_id UUID,
knowledge_id UUID,
paragraph_id UUID
);
向量检索流程:
用户与权限管理
用户表 (user)
CREATE TABLE user (
id UUID PRIMARY KEY DEFAULT uuid7(),
email VARCHAR(254) UNIQUE,
phone VARCHAR(20) DEFAULT '',
nick_name VARCHAR(150) UNIQUE NOT NULL,
username VARCHAR(150) UNIQUE NOT NULL,
password VARCHAR(150) NOT NULL,
role VARCHAR(150) NOT NULL,
source VARCHAR(10) DEFAULT 'LOCAL',
is_active BOOLEAN DEFAULT true,
language VARCHAR(10),
create_time TIMESTAMP,
update_time TIMESTAMP
);
角色权限体系:
| 角色 | 权限级别 | 功能范围 |
|---|---|---|
| ADMIN | 系统管理员 | 全系统权限管理 |
| USER | 普通用户 | 个人知识库管理 |
| WORKSPACE_ADMIN | 工作空间管理员 | 工作空间内权限 |
文件存储管理
文件表 (file)
CREATE TABLE file (
id UUID PRIMARY KEY DEFAULT uuid7(),
file_name VARCHAR(256) DEFAULT '',
file_size INTEGER DEFAULT 0,
sha256_hash VARCHAR(64) DEFAULT '',
source_type VARCHAR(30) DEFAULT 'TEMPORARY_120_MINUTE',
source_id VARCHAR(64) DEFAULT 'TEMPORARY_120_MINUTE',
loid INTEGER NOT NULL,
meta JSONB DEFAULT '{}',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
资源类型枚举:
- KNOWLEDGE: 知识库相关文件
- APPLICATION: 应用相关文件
- TOOL: 工具相关文件
- DOCUMENT: 文档文件
- CHAT: 聊天相关文件
- TEMPORARY_*: 临时文件(30分钟/120分钟/1天)
索引优化策略
MaxKB针对不同查询场景设计了丰富的索引策略:
1. 向量检索索引
-- 创建向量索引
CREATE INDEX ON embedding USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
-- 创建全文检索索引
CREATE INDEX ON embedding USING gin (search_vector);
2. 业务查询索引
-- 知识库相关索引
CREATE INDEX ON knowledge (workspace_id, is_active);
CREATE INDEX ON document (knowledge_id, status);
CREATE INDEX ON paragraph (knowledge_id, document_id, is_active);
-- 性能监控索引
CREATE INDEX ON embedding (source_type, is_active);
CREATE INDEX ON problem (knowledge_id, hit_num);
数据关系模型
性能优化实践
1. 分区策略
对于大规模数据,建议按知识库进行分区,提高查询效率:
-- 按知识库ID分区
CREATE TABLE embedding_partitioned (
CHECK (knowledge_id = 'specific_knowledge_id')
) INHERITS (embedding);
2. 缓存策略
利用PostgreSQL的物化视图缓存热门查询:
CREATE MATERIALIZED VIEW hot_paragraphs AS
SELECT p.*, k.name as knowledge_name
FROM paragraph p
JOIN knowledge k ON p.knowledge_id = k.id
WHERE p.hit_num > 100
ORDER BY p.hit_num DESC;
3. 监控指标
关键性能监控指标表:
| 指标名称 | 监控频率 | 告警阈值 |
|---|---|---|
| 向量查询响应时间 | 实时 | >200ms |
| 段落命中率 | 每小时 | <60% |
| 知识库活跃度 | 每天 | <10% |
| 存储空间使用率 | 每天 | >80% |
总结
MaxKB的数据库设计充分考虑了企业级知识管理系统的需求,通过精心设计的表结构和索引策略,实现了高效的向量检索、灵活的权限管理和可靠的数据存储。PostgreSQL + pgvector的组合为RAG场景提供了强大的技术基础,使得MaxKB能够处理大规模的知识库和复杂的检索需求。
对于开发者而言,理解这些表结构设计有助于更好地进行二次开发和性能优化。对于运维人员,掌握索引策略和监控指标可以确保系统稳定高效运行。
【免费下载链接】MaxKB 强大易用的开源企业级智能体平台 项目地址: https://gitcode.com/feizhiyun/MaxKB
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



