Skip to content

Muotai SPG 数据库初始化指南 ​

本目录包含了 Muotai SPG 模块的数据库初始化脚本,从 OpenSPG 项目迁移而来。

目录结构 ​

db/
├── README.md                                    # 本文件
├── mysql/                                       # MySQL 数据库脚本
│   ├── 01-init-database.sql                    # 数据库创建
│   ├── 02-init-tables-builder.sql              # 构建相关表(推理、调度等)
│   ├── 03-init-tables-core.sql                 # 核心表(项目、本体、用户等)
│   └── README.md                                # MySQL 详细说明
└── neo4j/                                       # Neo4j 图数据库脚本
    ├── 01-init-constraints-indexes.cypher      # 约束和索引
    └── README.md                                # Neo4j 详细说明

快速开始 ​

前置要求 ​

  • MySQL 5.7+ 或 MySQL 8.0+
  • Neo4j 5.x (推荐 5.23.0)
  • Docker 和 Docker Compose (可选,推荐)

方式一:使用 Docker Compose(推荐) ​

创建 docker-compose.yml 文件:

yaml
version: "3.7"

services:
  # MySQL 数据库
  mysql:
    image: mysql:8.0
    container_name: muotai-spg-mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: muotai@2024
      MYSQL_DATABASE: muotai_spg
      TZ: Asia/Shanghai
    volumes:
      - ./muotai-spg/db/mysql:/docker-entrypoint-initdb.d
      - mysql-data:/var/lib/mysql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-authentication-plugin=mysql_native_password

  # Neo4j 图数据库
  neo4j:
    image: neo4j:5.23.0-community
    container_name: muotai-spg-neo4j
    restart: always
    ports:
      - "7474:7474"  # HTTP
      - "7687:7687"  # Bolt
    environment:
      - NEO4J_AUTH=neo4j/muotai@neo4j
      - TZ=Asia/Shanghai
      - NEO4J_PLUGINS=["apoc"]
      - NEO4J_server_memory_heap_initial__size=1G
      - NEO4J_server_memory_heap_max__size=4G
      - NEO4J_server_memory_pagecache_size=1G
      - NEO4J_apoc_export_file_enabled=true
      - NEO4J_apoc_import_file_enabled=true
      - NEO4J_dbms_security_procedures_unrestricted=*
      - NEO4J_dbms_security_procedures_allowlist=*
    volumes:
      - neo4j-data:/data
      - neo4j-logs:/logs
      - ./muotai-spg/db/neo4j:/var/lib/neo4j/import

volumes:
  mysql-data:
  neo4j-data:
  neo4j-logs:

启动服务:

bash
# 启动数据库服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# MySQL 会自动执行 /docker-entrypoint-initdb.d 下的 SQL 脚本

方式二:手动执行 ​

初始化 MySQL ​

bash
# 1. 登录 MySQL
mysql -u root -p

# 2. 执行初始化脚本
source /path/to/muotai-backend/muotai-spg/db/mysql/01-init-database.sql
source /path/to/muotai-backend/muotai-spg/db/mysql/02-init-tables-builder.sql
source /path/to/muotai-backend/muotai-spg/db/mysql/03-init-tables-core.sql

# 3. 验证
USE muotai_spg;
SHOW TABLES;

初始化 Neo4j ​

  1. 启动 Neo4j
  2. 访问浏览器界面:http://localhost:7474
  3. 登录(neo4j/muotai@neo4j)
  4. 在浏览器中执行 Cypher 脚本:
bash
# 或使用 cypher-shell
cat /path/to/muotai-backend/muotai-spg/db/neo4j/01-init-constraints-indexes.cypher | \
  docker exec -i muotai-spg-neo4j cypher-shell -u neo4j -p muotai@neo4j

应用配置 ​

Spring Boot application.yml ​

yaml
spring:
  # MySQL 配置
  datasource:
    url: jdbc:mysql://localhost:3306/muotai_spg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
    username: root
    password: muotai@2024
    driver-class-name: com.mysql.cj.jdbc.Driver

  # Neo4j 配置
  neo4j:
    uri: bolt://localhost:7687
    authentication:
      username: neo4j
      password: muotai@neo4j

# SPG 特定配置
cloudext:
  graphstore:
    url: neo4j://localhost:7687?user=neo4j&password=muotai@neo4j&database=neo4j
  searchengine:
    url: neo4j://localhost:7687?user=neo4j&password=muotai@neo4j&database=neo4j

数据库说明 ​

MySQL 数据库 ​

包含 35+ 张表,主要分为以下几类:

1. 推理模块(kg_reason_*) ​

  • kg_reason_session - 推理会话
  • kg_reason_task - 推理任务
  • kg_reason_tutorial - 推理教程

2. 构建模块(kg_builder_*) ​

  • kg_builder_job - 构建任务

3. 调度模块(kg_scheduler_*) ​

  • kg_scheduler_job - 调度任务
  • kg_scheduler_instance - 调度实例
  • kg_scheduler_task - 调度作业节点
  • kg_scheduler_info - 调度记录

4. 本体模块(kg_ontology_*) ​

  • kg_ontology_entity - 本体类型
  • kg_ontology_entity_parent - 继承关系
  • kg_ontology_entity_property_range - 三元组(SPO)
  • kg_ontology_property_constraint - 属性约束
  • kg_ontology_semantic - 语义关联
  • kg_ontology_release - 发布版本
  • kg_ontology_ext - 扩展属性

5. 项目模块(kg_project_*) ​

  • kg_project_info - 项目信息
  • kg_project_entity - 项目类型关联

6. 系统模块 ​

  • kg_user - 用户管理
  • kg_role - 角色管理
  • kg_resource_permission - 权限管理
  • kg_config - 配置管理
  • kg_biz_domain - 业务域
  • kg_sys_lock - 分布式锁

7. 数据源模块 ​

  • kg_data_source - 数据源配置
  • kg_retrieval - 索引配置

8. AI 模块 ​

  • kg_model_provider - 模型供应商
  • kg_provider_param - 供应商参数
  • kg_model_detail - 模型详情
  • kg_user_model - 用户模型

9. 应用模块 ​

  • kg_app - 应用管理
  • kg_feedback - 反馈记录
  • kg_statistics - 统计数据

Neo4j 图数据库 ​

用于存储知识图谱的实体、关系和属性:

节点类型 ​

  • Thing - 基础实体
  • Entity - 实体
  • Concept - 概念
  • Event - 事件
  • Standard - 标准类型

关系类型 ​

  • IS_A - 类型关系
  • HAS_PROPERTY - 属性关系
  • RELATED_TO - 关联关系
  • BELONGS_TO - 归属关系

验证安装 ​

验证 MySQL ​

sql
-- 登录 MySQL
mysql -u root -p

-- 选择数据库
USE muotai_spg;

-- 查看所有表
SHOW TABLES;

-- 验证数据
SELECT COUNT(*) FROM kg_ontology_entity;
SELECT * FROM kg_user WHERE user_no = 'openspg';

验证 Neo4j ​

访问 http://localhost:7474,执行以下查询:

cypher
-- 查看约束
SHOW CONSTRAINTS;

-- 查看索引
SHOW INDEXES;

-- 查看节点统计
MATCH (n) RETURN labels(n) AS label, count(*) AS count;

备份与恢复 ​

MySQL 备份 ​

bash
# 备份数据库
docker exec muotai-spg-mysql mysqldump -u root -pmuotai@2024 muotai_spg > backup-$(date +%Y%m%d).sql

# 恢复数据库
docker exec -i muotai-spg-mysql mysql -u root -pmuotai@2024 muotai_spg < backup-20231220.sql

Neo4j 备份 ​

bash
# 备份
docker exec muotai-spg-neo4j neo4j-admin dump \
  --database=neo4j \
  --to=/data/backups/neo4j-$(date +%Y%m%d).dump

# 恢复
docker exec muotai-spg-neo4j neo4j-admin load \
  --from=/data/backups/neo4j-20231220.dump \
  --database=neo4j \
  --force

常见问题 ​

1. MySQL 初始化脚本未执行 ​

确保脚本文件有正确的权限:

bash
chmod +r muotai-spg/db/mysql/*.sql

2. Neo4j 内存不足 ​

根据数据量调整内存配置:

yaml
- NEO4J_server_memory_heap_max__size=8G
- NEO4J_server_memory_pagecache_size=2G

3. 字符编码问题 ​

确保 MySQL 使用 utf8mb4:

sql
SHOW VARIABLES LIKE 'character%';

4. 连接失败 ​

检查端口是否被占用:

bash
# MySQL
lsof -i :3306

# Neo4j
lsof -i :7474
lsof -i :7687

更多信息 ​

维护建议 ​

  1. 定期备份:建议每天自动备份数据库
  2. 监控性能:使用监控工具跟踪数据库性能
  3. 日志管理:定期清理和归档日志文件
  4. 安全更新:及时更新数据库版本和补丁
  5. 索引优化:根据查询模式优化索引策略

技术支持 ​

如遇到问题,请参考:

  1. 各子目录下的 README.md 文件
  2. OpenSPG 官方文档
  3. MySQL/Neo4j 官方文档