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

250 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 + 索引**
```sql
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: 连接池**
```rust
// Cargo.toml
r2d2 = "0.8"
r2d2_sqlite = "0.22"
// 使用
let pool = r2d2::Pool::new(manager)?;
let conn = pool.get()?;
```
**Day 3: 批量插入优化**
```rust
let tx = conn.transaction()?;
for chunk in nodes.chunks(1000) {
for node in chunk {
stmt.execute(params![...])?;
}
}
tx.commit()?;
```
**Day 4: 性能测试**
```bash
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()`
- [ ] 实现批量事务
- [ ] 测试导入速度
**周五:性能测试**
- [ ] 运行所有测试
- [ ] 性能基准测试
- [ ] 生成测试报告
---
## 监控指标
### 关键监控指标
**性能指标:**
```rust
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