Files
markbase/docs/DATABASE_DECISION.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

6.4 KiB
Raw Blame History

MDC 数据库决策总结

决策日期: 2026-05-29
决策依据: DATABASE_EVALUATION.md 深度评估报告


决策结论

立即行动:保持 SQLite + 优化

理由:

  1. 功能完全匹配 MarkBase 需求 (95/100)
  2. 性能足够满足当前规模 (14,243 nodes/sec)
  3. 迁移成本最低 (4天优化 vs 13天 RocksDB迁移)
  4. 运维成本最低 (零配置,无专业知识要求)

📊 核心数据对比

关键指标 SQLite RocksDB Sled
当前适用性
导入速度 14,243/sec 50,000+/sec 30,000/sec
查询延迟 <1ms <5ms <2ms
并发写入 单writer 多writer 多writer
迁移成本 0天 13天 8天

🚀 优化计划 (本周执行)

Day 1: WAL Mode + 索引

PRAGMA journal_mode=WAL;
PRAGMA synchronous=NORMAL;
PRAGMA cache_size=10000;
CREATE INDEX idx_parent_id ON file_nodes(parent_id);
CREATE INDEX idx_sha256 ON file_nodes(sha256);

Day 2: 连接池

// Cargo.toml
r2d2 = "0.8"
r2d2_sqlite = "0.22"

// 使用
let pool = r2d2::Pool::new(manager)?;
let conn = pool.get()?;

Day 3: 批量插入优化

let tx = conn.transaction()?;
for chunk in nodes.chunks(1000) {
    for node in chunk {
        stmt.execute(params![...])?;
    }
}
tx.commit()?;

Day 4: 性能测试

cargo test --release
cargo bench

未来决策触发点

🔍 评估条件 (6个月后)

触发 RocksDB/Sharding 评估的条件:

条件 当前状态 触发阈值 行动
数据规模 13MB (12K nodes) > 100GB 评估 Sharding
并发用户 1-3 users > 10 users 评估 RocksDB
写入吞吐 14K/sec > 50K/sec 评估 RocksDB
查询延迟 <1ms > 10ms 优化索引

📈 混合架构蓝图 (12+ months)

MarkBase Hybrid Architecture:
┌─────────────────────────────────┐
│  Metadata Layer (SQLite)        │ ← 复杂查询
│  - file_nodes, file_registry    │
│  - user_auth, sync_log          │
└─────────────────────────────────┘
         ↓
┌─────────────────────────────────┐
│  Content Layer (RocksDB/Sled)   │ ← 高并发读写
│  - file_content_hash → path     │
│  - file_metadata_hash → meta    │
└─────────────────────────────────┘
         ↓
┌─────────────────────────────────┐
│  Cache Layer (Redis/Sled)       │ ← FUSE hot path
│  - hot_files_cache              │
│  - LRU eviction                 │
└─────────────────────────────────┘

技术风险

SQLite 限制

已知限制:

  • 单点写入 (WAL mode)
  • 扩展性差 (无法分布式)
  • 大文件性能下降 (>100GB)
  • Schema 变更代价高

缓解措施:

  • 用户分库 (Sharding)
  • WAL mode (并发读取)
  • 监控告警 (提前预警)
  • 定期归档 (清理历史数据)

RocksDB 风险

已知风险:

  • ⚠️ 配置复杂 (200+ 参数)
  • ⚠️ Compaction 开销 (CPU/IO密集)
  • ⚠️ 学习曲线陡 (LSM-Tree原理)
  • ⚠️ Rust绑定不稳定 (版本更新慢)

缓解措施:

  • 使用默认配置 (先跑起来)
  • SSD 存储 (避免 HDD seek)
  • 团队培训 (学习 LSM-Tree)
  • 监控 Compaction (调整策略)

成本估算

SQLite 优化成本

项目 工作量 风险 收益
WAL Mode 1天 读取并发提升
索引优化 1天 查询速度提升
连接池 1天 并发处理提升
批量插入 1天 导入速度提升
总计 4天 性能提升50%

RocksDB 迁移成本

项目 工作量 风险 收益
Schema设计 2天 数据模型重构
数据导出 1天 数据迁移准备
数据导入 2天 数据迁移执行
代码重写 5天 API适配
测试验证 3天 功能验证
总计 13天 并发写入支持

投资回报分析

SQLite 优化 ROI:

  • 投入4天开发时间
  • 收益性能提升50%,零风险
  • ROI立即见效持续受益

RocksDB 迁移 ROI:

  • 投入13天开发时间 + 高风险
  • 收益:并发写入支持,压缩节省空间
  • ROI长期受益短期高成本

行动计划

本周任务 (2026-05-29 ~ 2026-06-04)

周一WAL Mode

  • 修改 filetree/mod.rs:init_user_db()
  • 添加 PRAGMA 设置
  • 测试并发读取

周二:索引优化

  • 添加 idx_parent_id
  • 添加 idx_sha256
  • 测试查询速度

周三:连接池

  • 添加 r2d2 依赖
  • 实现连接池管理
  • 测试并发连接

周四:批量插入

  • 修改 scan.rs:insert_nodes()
  • 实现批量事务
  • 测试导入速度

周五:性能测试

  • 运行所有测试
  • 性能基准测试
  • 生成测试报告

监控指标

关键监控指标

性能指标:

pub struct DbMetrics {
    pub query_latency_avg: f64,     // 平均查询延迟 (目标: <1ms)
    pub write_throughput: u64,      // 写入吞吐 (目标: >14K/sec)
    pub db_size: u64,               // 数据库大小 (阈值: <100GB)
    pub connection_count: u32,      // 连接数 (阈值: <100)
}

告警规则:

if db_size > 100GB → 建议评估 Sharding
if query_latency > 10ms → 建议优化索引
if concurrent_users > 10 → 建议评估 RocksDB
if write_throughput < 10K/sec → 建议批量优化

总结

核心决策:保持 SQLite + 优化

关键理由:

  1. 功能完全匹配
  2. 性能足够满足
  3. 成本最低 (4天 vs 13天)
  4. 风险最低 (优化 vs 重构)

未来路径:

  • 6个月后评估 Sharding
  • 12个月后评估混合架构
  • 持续监控,按需调整

决策确认: SQLite Optimization Path
执行负责人: Warren
执行日期: 2026-05-29 ~ 2026-06-04