# 数据库依赖关系确认 **生成时间**: 2026-10-12 **状态**: ✅ 已确认所有数据库依赖 --- ## 📊 数据库架构总览 ``` Momentry Studio (前端 + Tauri) │ ├─> SQLite (rusqlite) │ └─> 本地数据: 搜索历史、书签、用户认证 │ └─> 路径: data/users/demo.sqlite │ └─> MarkBase Core (依赖) │ ├─> SQLite (rusqlite) │ └─> 认证数据: 用户凭证、权限 │ └─> 路径: ~/markbase/data/auth.sqlite │ └─> PostgreSQL (tokio-postgres) [可选] └─> 文件元数据、共享配置 (如启用) Momentry Core (后端 API) │ ├─> PostgreSQL (sqlx) │ └─> 核心数据: 文件、人脸、身份、Trace │ └─> 数据库: momentry │ └─> 连接: postgres://accusys@localhost:5432/momentry │ ├─> Qdrant (向量数据库) │ └─> 向量搜索: 语义搜索、人脸嵌入 │ └─> 连接: http://127.0.0.1:6333 │ └─> 集合: momentry_rule1 │ └─> MongoDB (文档数据库) └─> 文档存储: 分析结果、大对象 └─> 连接: mongodb://localhost:27017 └─> 数据库: momentry ``` --- ## 📝 详细说明 ### 1. Momentry Studio #### SQLite (rusqlite) **依赖**: ```toml rusqlite = { version = "0.32", features = ["bundled"] } ``` **用途**: - ✅ **搜索历史** (`search_history` 表) - ✅ **书签** (`bookmarks` 表) - ✅ **视频标记** (`video_marks` 表) - ✅ **用户认证** (`app_users` 表) **数据库文件**: ``` /Users/accusys/momentry_studio/data/users/demo.sqlite ``` **表结构**: ```sql CREATE TABLE search_history ( id TEXT PRIMARY KEY, query TEXT NOT NULL, title TEXT NOT NULL, chat_state TEXT, mode TEXT DEFAULT 'keyword', pinned INTEGER DEFAULT 0, created_at TEXT, updated_at TEXT ); CREATE TABLE bookmarks ( id INTEGER PRIMARY KEY AUTOINCREMENT, label TEXT NOT NULL, history_id TEXT, created_at TEXT ); CREATE TABLE video_marks ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_uuid TEXT NOT NULL, tag TEXT NOT NULL, start_frame INTEGER NOT NULL, end_frame INTEGER, note TEXT, created_at TEXT ); CREATE TABLE app_users ( id TEXT PRIMARY KEY, username TEXT NOT NULL UNIQUE, password_hash TEXT, display_name TEXT, role TEXT DEFAULT 'user', created_at TEXT, updated_at TEXT ); ``` **代码位置**: `src-tauri/src/db.rs` --- #### PostgreSQL (sqlx) - ⚠️ 遗留依赖 **依赖**: ```toml sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "json"] } ``` **状态**: - ❌ **未使用** - 通过 MarkBase Core 间接引入 - ⚠️ **建议移除** - 减少编译时间和二进制大小 **原因**: Momentry Studio 依赖 `markbase-core`,而 MarkBase Core 支持 PostgreSQL,但 Studio 本身不使用。 --- ### 2. MarkBase Core #### SQLite (rusqlite) **依赖**: ```toml rusqlite = { version = "0.32", features = ["bundled"] } ``` **用途**: - ✅ **用户认证** (`auth.sqlite`) - ✅ **文件凭证** (可选,每个用户独立数据库) **数据库文件**: ``` /Users/accusys/markbase/data/auth.sqlite # 认证数据库 /Users/accusys/markbase/data/users/accusys.sqlite # 用户数据 (可选) /Users/accusys/markbase/data/users/demo.sqlite # 用户数据 (可选) /Users/accusys/markbase/data/users/credentials.sqlite # 凭证 (可选) ``` --- #### PostgreSQL (tokio-postgres) - 可选 **依赖**: ```toml tokio-postgres = "0.7" postgres = "0.19" ``` **用途**: - ⚠️ **可选功能** - 文件共享、高级权限管理 - ❌ **当前未启用** - 使用 SQLite 替代 **代码位置**: - `/Users/accusys/markbase/markbase-core/src/pg_client.rs` - `/Users/accusys/markbase/markbase-core/src/provider/pg.rs` **状态**: 已实现但未激活,可配置启用 --- ### 3. Momentry Core #### PostgreSQL (sqlx) **依赖**: ```toml sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "sqlite", "json", "chrono", "uuid"] } pgvector = { version = "0.3", features = ["sqlx"] } ``` **用途**: - ✅ **核心业务数据** - 文件信息 (`files` 表) - 人脸数据 (`faces` 表) - 身份信息 (`identities` 表) - Trace 数据 (`traces` 表) - 视频标记 (`video_marks` 表) - 向量搜索 (`pgvector` 扩展) **数据库配置**: ```bash DATABASE_URL=postgres://accusys@localhost:5432/momentry ``` **必需服务**: - PostgreSQL 12+ (支持 pgvector 扩展) - 运行在 `localhost:5432` --- #### Qdrant (向量数据库) **依赖**: ```toml qdrant-client = "1.7" ``` **用途**: - ✅ **向量搜索** - 语义搜索 - 人脸嵌入向量 - 相似度匹配 **配置**: ```bash QDRANT_URL=http://127.0.0.1:6333 QDRANT_API_KEY=Test3200Test3200Test3200 QDRANT_COLLECTION=momentry_rule1 ``` **必需服务**: - Qdrant 1.7+ - 运行在 `http://127.0.0.1:6333` --- #### MongoDB (文档数据库) **依赖**: ```toml mongodb = { version = "2", features = ["tokio-runtime"] } bson = { version = "2", features = ["chrono-0_4"] } ``` **用途**: - ✅ **文档存储** - 大型分析结果 - 原始数据 - 缓存数据 **配置**: ```bash MONGODB_URL=mongodb://localhost:27017 MONGODB_DATABASE=momentry MONGODB_CACHE_ENABLED=true ``` **必需服务**: - MongoDB 5+ - 运行在 `mongodb://localhost:27017` --- ## 📊 依赖关系图 ``` ┌─────────────────────────────────────────────────────────────┐ │ Momentry Studio (Tauri) │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ SQLite (rusqlite) │ │ │ │ ├─ 搜索历史 │ │ │ │ ├─ 书签 │ │ │ │ ├─ 视频标记 │ │ │ │ └─ 用户认证 │ │ │ │ └─ data/users/demo.sqlite │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ PostgreSQL (sqlx) [⚠️ 遗留依赖 - 未使用] │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ │ 依赖 ▼ ┌─────────────────────────────────────────────────────────────┐ │ MarkBase Core │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ SQLite (rusqlite) │ │ │ │ ├─ 用户认证 │ │ │ │ └─ 文件凭证 │ │ │ │ └─ ~/markbase/data/auth.sqlite │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ PostgreSQL (tokio-postgres) [可选] │ │ │ │ └─ 文件共享、高级权限 (未启用) │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ Momentry Core (API) │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ PostgreSQL (sqlx) │ │ │ │ ├─ 文件信息 │ │ │ │ ├─ 人脸数据 │ │ │ │ ├─ 身份信息 │ │ │ │ ├─ Trace 数据 │ │ │ │ └─ 向量搜索 (pgvector) │ │ │ │ └─ postgres://localhost:5432/momentry │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Qdrant (向量数据库) │ │ │ │ ├─ 语义搜索 │ │ │ │ └─ 人脸嵌入向量 │ │ │ │ └─ http://127.0.0.1:6333 │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ MongoDB (文档数据库) │ │ │ │ ├─ 分析结果 │ │ │ │ └─ 缓存数据 │ │ │ │ └─ mongodb://localhost:27017/momentry │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## ✅ 实际使用的数据库 ### Momentry Studio | 数据库 | 状态 | 用途 | 文件位置 | |-------|------|------|---------| | **SQLite** | ✅ 使用中 | 本地数据 | `data/users/demo.sqlite` | | PostgreSQL | ❌ 未使用 | 遗留依赖 | - | --- ### MarkBase Core | 数据库 | 状态 | 用途 | 文件位置 | |-------|------|------|---------| | **SQLite** | ✅ 使用中 | 认证 | `~/markbase/data/auth.sqlite` | | PostgreSQL | ⚠️ 可选 | 高级功能 | 未启用 | --- ### Momentry Core | 数据库 | 状态 | 用途 | 连接 | |-------|------|------|------| | **PostgreSQL** | ✅ 使用中 | 核心数据 | `localhost:5432/momentry` | | **Qdrant** | ✅ 使用中 | 向量搜索 | `localhost:6333` | | **MongoDB** | ✅ 使用中 | 文档存储 | `localhost:27017/momentry` | --- ## 🔧 部署要求 ### 必需服务 **Momentry Studio (前端)**: - ✅ SQLite (已内置,无需额外服务) **Momentry Core (后端)**: - ✅ PostgreSQL 12+ (必需) - 需要 `pgvector` 扩展 - ✅ Qdrant 1.7+ (必需) - ✅ MongoDB 5+ (必需) **MarkBase Core (文件管理)**: - ✅ SQLite (已内置,无需额外服务) - ⚠️ PostgreSQL (可选,未启用) --- ### 服务启动顺序 ```bash # 1. PostgreSQL pg_ctl start -D /usr/local/var/postgres # 2. MongoDB mongod --config /usr/local/etc/mongod.conf # 3. Qdrant qdrant # 4. Momentry Core API cd ~/momentry_core ./start.sh # 5. MarkBase API cd ~/markbase/markbase-core ./start.sh # 6. Momentry Studio cd ~/momentry_studio ./start.sh ``` --- ## 📋 检查清单 ### 开发环境 - [x] PostgreSQL 运行中 (`localhost:5432`) - [x] Qdrant 运行中 (`localhost:6333`) - [x] MongoDB 运行中 (`localhost:27017`) - [x] SQLite 数据库文件存在 - [x] `data/users/demo.sqlite` - [x] `~/markbase/data/auth.sqlite` --- ### 生产环境 - [ ] PostgreSQL 配置 - [ ] 创建数据库 `momentry` - [ ] 安装 `pgvector` 扩展 - [ ] 配置连接池 - [ ] 设置备份策略 - [ ] Qdrant 配置 - [ ] 创建集合 `momentry_rule1` - [ ] 配置持久化存储 - [ ] 设置 API Key - [ ] MongoDB 配置 - [ ] 创建数据库 `momentry` - [ ] 配置副本集 (可选) - [ ] 设置认证 (可选) - [ ] SQLite 配置 - [ ] 创建数据目录 - [ ] 设置文件权限 - [ ] 配置 WAL 模式 (已默认启用) --- ## ⚠️ 注意事项 ### 1. PostgreSQL 连接 **Momentry Studio** 不直接连接 PostgreSQL,但通过 `markbase-core` 间接依赖。 **建议**: 移除 Momentry Studio 的 `sqlx` 依赖,减少编译时间。 --- ### 2. 数据库迁移 **SQLite**: - 无需迁移,文件自动创建 - WAL 模式已启用,性能更好 **PostgreSQL**: - 需要运行迁移脚本 - 需要 `pgvector` 扩展 **Qdrant**: - 首次启动自动创建集合 - 需要配置向量维度 --- ### 3. 备份策略 **SQLite**: ```bash # 备份 cp data/users/demo.sqlite data/users/demo.sqlite.backup # 或使用 SQLite 命令 sqlite3 data/users/demo.sqlite ".backup 'demo.sqlite.backup'" ``` **PostgreSQL**: ```bash # 备份 pg_dump -U accusys momentry > momentry_backup.sql # 恢复 psql -U accusys momentry < momentry_backup.sql ``` --- ## 🎯 总结 ### 实际使用的数据库 1. **Momentry Studio**: SQLite (本地数据) 2. **MarkBase Core**: SQLite (认证) 3. **Momentry Core**: PostgreSQL + Qdrant + MongoDB ### 遗留依赖 - Momentry Studio 的 `sqlx` (PostgreSQL) - 建议移除 ### 部署复杂度 - **前端**: 低 - 只需 SQLite (内置) - **后端**: 高 - 需要 PostgreSQL + Qdrant + MongoDB --- **文档位置**: `docs/DATABASE_DEPENDENCIES.md` **状态**: ✅ 已确认所有数据库依赖