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)
This commit is contained in:
206
docs/DOUBLE_IMPLEMENTATION_PLAN.md
Normal file
206
docs/DOUBLE_IMPLEMENTATION_PLAN.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# 双方案实施计划
|
||||
|
||||
## 目标
|
||||
|
||||
实现两个WebDAV backend方案:
|
||||
1. 方案1:复制warren文件(快速原型)
|
||||
2. 方案2:SQLite backend(完整实现)
|
||||
|
||||
---
|
||||
|
||||
## 方案1:复制warren文件到WebDAV目录
|
||||
|
||||
### 目标
|
||||
- 快速验证WebDAV功能
|
||||
- Finder能看到warren的文件树
|
||||
- 时间:30分钟
|
||||
|
||||
### 实施步骤
|
||||
|
||||
**步骤1:创建脚本复制文件**
|
||||
```bash
|
||||
# 创建脚本:scripts/copy_warren_to_webdav.sh
|
||||
# 功能:
|
||||
# - 使用MarkBaseFS::query_node遍历所有节点
|
||||
# - 使用MarkBaseFS::read_file读取文件内容
|
||||
# - 复制到data/webdav/warren对应目录结构
|
||||
```
|
||||
|
||||
**步骤2:实现文件复制逻辑**
|
||||
```rust
|
||||
// 创建 src/bin/copy_warren_files.rs
|
||||
use markbase::fskit::filesystem::MarkBaseFS;
|
||||
|
||||
fn main() {
|
||||
let fs = MarkBaseFS::new("warren", "data/users/warren.sqlite");
|
||||
|
||||
// 遍历所有节点
|
||||
// 复制文件到 data/webdav/warren/
|
||||
}
|
||||
```
|
||||
|
||||
**步骤3:保留目录结构**
|
||||
```
|
||||
data/webdav/warren/
|
||||
├── Home/
|
||||
│ ├── Movies/
|
||||
│ │ ├── video.mp4
|
||||
│ ├── Marketing/
|
||||
│ │ ├── doc.pdf
|
||||
```
|
||||
|
||||
**步骤4:重启WebDAV server**
|
||||
```bash
|
||||
killall webdav_server
|
||||
./target/release/webdav_server --user warren --port 8002
|
||||
```
|
||||
|
||||
**步骤5:Finder验证**
|
||||
- 连接 http://localhost:8002/webdav
|
||||
- 验证12659文件显示
|
||||
|
||||
### 限制
|
||||
- 占用磁盘空间(复制12659文件)
|
||||
- 性能仍然受文件系统限制
|
||||
- 不是真正的虚拟文件系统
|
||||
|
||||
---
|
||||
|
||||
## 方案2:实现SQLite backend(DavFileSystem trait)
|
||||
|
||||
### 目标
|
||||
- 真正虚拟文件系统
|
||||
- 直接使用warren.sqlite
|
||||
- 性能提升600倍
|
||||
- 时间:3.5小时
|
||||
|
||||
### 实施步骤
|
||||
|
||||
**步骤1:创建MarkBaseFs模块**
|
||||
```
|
||||
src/webdav/markbase_fs.rs
|
||||
- 实现DavFileSystem trait
|
||||
- 使用MarkBaseFS作为backend
|
||||
```
|
||||
|
||||
**步骤2:实现DavFileSystem trait**
|
||||
```rust
|
||||
use dav_server::DavFileSystem;
|
||||
use crate::fskit::filesystem::MarkBaseFS;
|
||||
|
||||
pub struct MarkBaseDavFs {
|
||||
markbase_fs: MarkBaseFS,
|
||||
}
|
||||
|
||||
impl DavFileSystem for MarkBaseDavFs {
|
||||
fn read_dir(&self, path: &str) -> Vec<DavDirItem> {
|
||||
// 使用MarkBaseFS::query_children()
|
||||
// 转换为DavDirItem
|
||||
}
|
||||
|
||||
fn get_file(&self, path: &str) -> Box<dyn DavFile> {
|
||||
// 使用MarkBaseFS::read_file()
|
||||
// 返回文件内容
|
||||
}
|
||||
|
||||
fn metadata(&self, path: &str) -> DavMetaData {
|
||||
// 使用MarkBaseFS::query_node()
|
||||
// 返回文件元数据
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**步骤3:路径解析逻辑**
|
||||
```rust
|
||||
// path → node_id映射
|
||||
// 例如:"/Home/Movies/video.mp4"
|
||||
// → 查询parent_id + label找到node_id
|
||||
```
|
||||
|
||||
**步骤4:修改handler.rs**
|
||||
```rust
|
||||
impl MarkBaseWebDAV {
|
||||
pub fn create_handler(&self) -> DavHandler {
|
||||
DavHandler::builder()
|
||||
.filesystem(MarkBaseDavFs::new(&self.user_id))
|
||||
.locksystem(FakeLs::new())
|
||||
.build_handler()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**步骤5:编译测试**
|
||||
```bash
|
||||
cargo build --release --bin webdav_server
|
||||
cargo test --lib webdav::markbase_fs
|
||||
```
|
||||
|
||||
**步骤6:Finder验证**
|
||||
- 连接 http://localhost:8002/webdav
|
||||
- 验证12659文件显示(<3秒)
|
||||
|
||||
### 优势
|
||||
- 不占用磁盘空间(不需要复制文件)
|
||||
- 性能提升600倍(B-Tree索引)
|
||||
- 真正虚拟文件系统
|
||||
- 符合MarkBase长期目标
|
||||
|
||||
---
|
||||
|
||||
## 实施顺序建议
|
||||
|
||||
**推荐顺序:方案2 → 方案1**
|
||||
|
||||
**原因:**
|
||||
1. 方案2是核心实现(解决性能问题)
|
||||
2. 方案1可作为备选或原型验证
|
||||
3. 方案2完成后,方案1可以删除(节省空间)
|
||||
|
||||
**时间分配:**
|
||||
- 方案2:3.5小时(核心)
|
||||
- 方案1:30分钟(可选验证)
|
||||
|
||||
---
|
||||
|
||||
## 依赖关系
|
||||
|
||||
**方案1依赖:**
|
||||
- MarkBaseFS已有实现(✅)
|
||||
- warren.sqlite数据(✅)
|
||||
- WebDAV server已运行(✅)
|
||||
|
||||
**方案2依赖:**
|
||||
- MarkBaseFS已有实现(✅)
|
||||
- dav-server库trait定义(需要查看API)
|
||||
- warren.sqlite索引优化(✅ parent_id索引已创建)
|
||||
|
||||
---
|
||||
|
||||
## 待确认问题
|
||||
|
||||
1. **执行顺序**:先方案2还是先方案1?
|
||||
2. **方案1必要性**:如果方案2成功,方案1是否还需要?
|
||||
3. **性能测试**:是否需要AJA System Test验证性能?
|
||||
4. **写入功能**:是否需要实现PUT写入(方案2扩展)?
|
||||
|
||||
---
|
||||
|
||||
## 文件清单
|
||||
|
||||
**方案1新增文件:**
|
||||
- scripts/copy_warren_to_webdav.sh
|
||||
- src/bin/copy_warren_files.rs(可选)
|
||||
|
||||
**方案2新增文件:**
|
||||
- src/webdav/markbase_fs.rs(核心实现)
|
||||
- src/webdav/dav_items.rs(DavDirItem/DavMetaData)
|
||||
- tests/webdav_backend_test.rs(单元测试)
|
||||
|
||||
**修改文件:**
|
||||
- src/webdav/handler.rs(替换LocalFs)
|
||||
- src/webdav/mod.rs(导出新模块)
|
||||
- Cargo.toml(可能需要新依赖)
|
||||
|
||||
---
|
||||
|
||||
**最后更新:** 2026-05-18 23:30
|
||||
Reference in New Issue
Block a user