Files
markbase/docs/DOUBLE_IMPLEMENTATION_PLAN.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

207 lines
4.5 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.
# 双方案实施计划
## 目标
实现两个WebDAV backend方案
1. 方案1复制warren文件快速原型
2. 方案2SQLite 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
```
**步骤5Finder验证**
- 连接 http://localhost:8002/webdav
- 验证12659文件显示
### 限制
- 占用磁盘空间复制12659文件
- 性能仍然受文件系统限制
- 不是真正的虚拟文件系统
---
## 方案2实现SQLite backendDavFileSystem 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
```
**步骤6Finder验证**
- 连接 http://localhost:8002/webdav
- 验证12659文件显示<3秒
### 优势
- 不占用磁盘空间(不需要复制文件)
- 性能提升600倍B-Tree索引
- 真正虚拟文件系统
- 符合MarkBase长期目标
---
## 实施顺序建议
**推荐顺序方案2 → 方案1**
**原因:**
1. 方案2是核心实现解决性能问题
2. 方案1可作为备选或原型验证
3. 方案2完成后方案1可以删除节省空间
**时间分配:**
- 方案23.5小时(核心)
- 方案130分钟可选验证
---
## 依赖关系
**方案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.rsDavDirItem/DavMetaData
- tests/webdav_backend_test.rs单元测试
**修改文件:**
- src/webdav/handler.rs替换LocalFs
- src/webdav/mod.rs导出新模块
- Cargo.toml可能需要新依赖
---
**最后更新:** 2026-05-18 23:30