docs: 确认数据库依赖关系

核心发现:
1. Momentry Studio
   - ✅ SQLite (rusqlite): 搜索历史、书签、用户认证
   - ❌ PostgreSQL (sqlx): 遗留依赖,未使用

2. MarkBase Core
   - ✅ SQLite: 认证数据
   - ⚠️ PostgreSQL: 可选,未启用

3. Momentry Core
   - ✅ PostgreSQL: 核心业务数据
   - ✅ Qdrant: 向量搜索
   - ✅ MongoDB: 文档存储

数据库文件:
- Momentry Studio: data/users/demo.sqlite
- MarkBase: ~/markbase/data/auth.sqlite
- Momentry Core: postgresql://localhost:5432/momentry

必需服务:
- PostgreSQL 12+ (pgvector 扩展)
- Qdrant 1.7+
- MongoDB 5+

建议:
- 移除 Momentry Studio 的 sqlx 依赖
- 简化依赖树
This commit is contained in:
2026-10-12 14:41:57 +08:00
parent 59e2718424
commit 1bd4b9215f

View File

@@ -0,0 +1,505 @@
# 数据库依赖关系确认
**生成时间**: 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`
**状态**: ✅ 已确认所有数据库依赖