Files
momentry_studio/docs/DATABASE_DEPENDENCIES.md
Momentry Studio 1bd4b9215f 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 依赖
- 简化依赖树
2026-10-12 14:41:57 +08:00

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