MaxKB数据库设计:PostgreSQL表结构深度解析

MaxKB数据库设计:PostgreSQL表结构深度解析

【免费下载链接】MaxKB 强大易用的开源企业级智能体平台 【免费下载链接】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
);

状态流转: mermaid

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
);

向量检索流程: mermaid

用户与权限管理

用户表 (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);

数据关系模型

mermaid

性能优化实践

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 强大易用的开源企业级智能体平台 【免费下载链接】MaxKB 项目地址: https://gitcode.com/feizhiyun/MaxKB

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值