跳转至

认知研究数据库使用总结

文档编号: LR-DB-SUMMARY-001 版本: v1.0 创建时间: 2026-04-12


一、当前状态

1.1 数据库概况

指标 数值 状态
数据库大小 938MB ✅ 正常
项目数 13 ✅ 正常
会话数 1,727 ✅ 正常
消息数 144,891 ✅ 正常
认知事件 9 ✅ 正常
表数量 13 ✅ 正常
索引数量 46 (36用户 + 10自动) ✅ 正常
健康得分 66.7% (6/9) ⚠️ 警告

1.2 当前问题

  1. 外键约束违反: 2条记录(非关键问题)
  2. 备份目录: 已创建,首次备份完成
  3. 认知事件查询: 参数类型错误(需修复)

二、已创建的文档和脚本

2.1 策略文档

文档 路径 说明
数据库使用策略 docs/COGNITIVE_RESEARCH_DATABASE_STRATEGY.md 完整的安全和效率策略
快速入门 docs/COGNITIVE_RESEARCH_DATABASE_QUICKSTART.md 常用查询和操作指南
使用总结 docs/COGNITIVE_RESEARCH_DATABASE_SUMMARY.md 本文档

2.2 实用脚本

脚本 路径 功能
备份脚本 scripts/backup_database.sh 自动备份和压缩
健康检查 scripts/health_check.py 全面健康检查
增量导入 scripts/incremental_import.py 每小时增量导入

2.3 配置文件

文件 路径 说明
数据库 database/cognitive_research.db 主数据库文件
导入状态 database/import_state.json 增量导入状态
健康报告 database/health_report.json 最新健康检查结果

三、安全高效使用建议

3.1 每日必做

# 1. 运行健康检查
cd /home/ai/lingresearch
python3 scripts/health_check.py

# 2. 检查健康报告
cat database/health_report.json | jq

# 3. 运行备份(如果健康检查通过)
bash scripts/backup_database.sh

3.2 每周必做

# 1. 数据库优化
sqlite3 database/cognitive_research.db "VACUUM; ANALYZE;"

# 2. 检查备份文件
ls -lh database/backups/

# 3. 导出认知事件报告
sqlite3 database/cognitive_research.db "SELECT * FROM cognitive_events" > weekly_events.csv

3.3 每月必做

# 1. 检查数据库大小增长
du -h database/cognitive_research.db

# 2. 如果超过1.5GB,考虑归档旧数据

# 3. 审查备份策略
# 检查备份是否完整,恢复测试是否成功

四、查询模板

4.1 认知事件查询

-- 查看所有严重事件
SELECT
    id,
    event_type,
    severity,
    title,
    datetime(detected_at_ms/1000, 'unixepoch') as time
FROM cognitive_events
WHERE severity = 'critical'
ORDER BY detected_at_ms DESC;

-- 按Agent分组统计
SELECT
    s.agent,
    ce.event_type,
    COUNT(*) as count
FROM cognitive_events ce
JOIN sessions s ON ce.session_id = s.id
GROUP BY s.agent, ce.event_type
ORDER BY count DESC;

4.2 行为分析查询

-- 查看最近活跃的会话
SELECT
    s.id,
    s.agent,
    p.name as project,
    datetime(s.created_at_ms/1000, 'unixepoch') as created,
    COUNT(m.id) as messages
FROM sessions s
JOIN projects p ON s.project_id = p.id
LEFT JOIN messages m ON m.session_id = s.id
GROUP BY s.id
ORDER BY s.created_at_ms DESC
LIMIT 20;

-- 统计推理部分
SELECT
    s.agent,
    COUNT(rp.id) as reasoning_count,
    AVG(rp.duration_ms) as avg_duration
FROM reasoning_parts rp
JOIN sessions s ON rp.session_id = s.id
GROUP BY s.agent
ORDER BY reasoning_count DESC;

五、Python 接口示例

5.1 基本查询

import sqlite3
from pathlib import Path

DB_PATH = "database/cognitive_research.db"

def query_events(severity=None, event_type=None, limit=100):
    """查询认知事件"""
    query = "SELECT * FROM cognitive_events WHERE 1=1"
    params = []

    if severity:
        query += " AND severity = ?"
        params.append(severity)

    if event_type:
        query += " AND event_type = ?"
        params.append(event_type)

    query += " ORDER BY detected_at_ms DESC LIMIT ?"
    params.append(limit)

    with sqlite3.connect(DB_PATH) as conn:
        cursor = conn.cursor()
        cursor.execute(query, params)
        return cursor.fetchall()

# 使用示例
critical_events = query_events(severity='critical', limit=10)

5.2 插入事件

import sqlite3
import json
from datetime import datetime

def insert_event(event_data):
    """插入认知事件"""
    with sqlite3.connect(DB_PATH) as conn:
        cursor = conn.cursor()

        cursor.execute("""
            INSERT INTO cognitive_events (
                session_id, event_type, event_subtype, title, description,
                detected_at_ms, severity, confidence, metadata, tags
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        """, (
            event_data.get('session_id'),
            event_data['event_type'],
            event_data.get('event_subtype', ''),
            event_data['title'],
            event_data.get('description', ''),
            event_data['detected_at_ms'],
            event_data.get('severity', 'info'),
            event_data.get('confidence', 0.0),
            json.dumps(event_data.get('metadata', {})),
            event_data.get('tags', '')
        ))

        conn.commit()
        return cursor.lastrowid

# 使用示例
event_id = insert_event({
    'session_id': 'session_123',
    'event_type': 'hallucination',
    'title': '新发现的幻觉',
    'detected_at_ms': int(datetime.now().timestamp() * 1000),
    'severity': 'critical',
    'confidence': 0.9
})

六、监控和告警

6.1 健康检查自动化

创建 scripts/cron_daily_check.sh:

#!/bin/bash
cd /home/ai/lingresearch

# 运行健康检查
python3 scripts/health_check.py

# 如果检查失败,发送告警
if [ $? -ne 0 ]; then
    echo "⚠️  数据库健康检查失败" | mail -s "数据库告警" admin@example.com
fi

# 运行备份
bash scripts/backup_database.sh

6.2 告警规则

指标 阈值 告警级别 处理建议
健康得分 < 70% Warning 检查具体问题
数据库大小 > 1.5GB Warning 考虑优化或归档
严重事件/天 > 5 Critical 立即审计
备份延迟 > 48h Warning 检查备份任务
外键违反 > 0 Warning 修复数据完整性

七、故障处理

7.1 数据库锁定

# 检查锁定进程
lsof database/cognitive_research.db

# 如果需要,终止进程
kill -9 <PID>

7.2 数据损坏

# 1. 创建损坏副本
cp database/cognitive_research.db database/cognitive_research.db.corrupted

# 2. 尝试导出
sqlite3 database/cognitive_research.db.corrupted ".dump" > recovery.sql

# 3. 重建数据库
sqlite3 database/cognitive_research_restored.db < recovery.sql

# 4. 验证
sqlite3 database/cognitive_research_restored.db "PRAGMA integrity_check"

7.3 备份恢复

# 1. 停止所有程序
# 2. 找到最近的备份
ls -lt database/backups/

# 3. 解压
gunzip database/backups/cognitive_research_YYYYMMDD_HHMMSS.db.gz

# 4. 替换
mv database/cognitive_research.db database/cognitive_research.db.backup
mv database/backups/cognitive_research_YYYYMMDD_HHMMSS.db database/cognitive_research.db

# 5. 验证
sqlite3 database/cognitive_research.db "PRAGMA integrity_check"

八、性能优化

8.1 索引优化

-- 查看慢查询
SELECT sql, COUNT(*) as count
FROM sqlite_master
WHERE type = 'index'
AND sql LIKE '%cognitive_events%';

-- 添加复合索引
CREATE INDEX IF NOT EXISTS idx_cognitive_events_type_severity
ON cognitive_events(event_type, severity);

CREATE INDEX IF NOT EXISTS idx_cognitive_events_detected_type
ON cognitive_events(detected_at_ms DESC, event_type);

8.2 查询优化

# ✅ 使用预编译语句
query = """
    SELECT * FROM cognitive_events
    WHERE event_type = ? AND detected_at_ms > ?
"""
cursor.execute(query, ('hallucination', timestamp))

# ✅ 限制返回数量
cursor.execute("""
    SELECT * FROM messages
    ORDER BY created_at_ms DESC LIMIT 100
""")

# ❌ 避免全表扫描
# cursor.execute("SELECT * FROM cognitive_events WHERE title LIKE '%关键词%'")

8.3 数据库优化

# 定期执行
sqlite3 database/cognitive_research.db <<EOF
VACUUM;
ANALYZE;
EOF

九、下一步行动

9.1 立即行动

  • [x] 运行首次备份
  • [ ] 修复外键约束违反
  • [ ] 修复认知事件查询的参数类型错误
  • [ ] 设置每日健康检查 cron 任务

9.2 短期目标(1周内)

  • [ ] 完善备份策略(自动备份)
  • [ ] 设置告警机制
  • [ ] 编写数据分析模板
  • [ ] 创建恢复测试脚本

9.3 中期目标(1月内)

  • [ ] 实现数据归档策略
  • [ ] 建立性能监控仪表盘
  • [ ] 编写认知事件分析报告模板
  • [ ] 定期进行恢复测试

9.4 长期目标(3月内)

  • [ ] 考虑迁移到更大的数据库(如PostgreSQL)
  • [ ] 实现实时监控和告警
  • [ ] 建立自动分析报告生成系统
  • [ ] 建立数据质量监控机制

十、相关资源

10.1 文档

  • SQLite 官方文档: https://www.sqlite.org/docs.html
  • Python sqlite3 模块: https://docs.python.org/3/library/sqlite3.html

10.2 工具

  • DB Browser for SQLite (GUI): https://sqlitebrowser.org/
  • SQLite 命令行工具 (sqlite3): 系统自带

10.3 内部文档

  • 认知研究数据库策略: docs/COGNITIVE_RESEARCH_DATABASE_STRATEGY.md
  • 快速入门指南: docs/COGNITIVE_RESEARCH_DATABASE_QUICKSTART.md
  • 增量导入脚本: scripts/incremental_import.py

总结

认知研究数据库目前运行良好,已建立基本的备份和监控机制。建议:

  1. 安全: 每日备份,定期完整性检查
  2. 效率: 使用索引,优化查询,定期 VACUUM
  3. 流程: 事务管理,错误处理,日志记录
  4. 监控: 健康检查,性能监控,告警机制

通过遵循本文档的建议,可以确保认知研究数据库的安全、高效、可靠运行。


最后更新: 2026-04-12 维护者: Crush (灵研) 下次更新: 根据使用情况调整