---
document_type: "architecture_design"
service: "MOMENTRY_CORE"
title: "Playground 開發架構隔離規劃"
date: "2026-03-31"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "開發架構隔離規劃"
  - "playground"
ai_query_hints:
  - "查詢 Playground 開發架構隔離規劃 的內容"
  - "Playground 開發架構隔離規劃 的主要目的是什麼？"
  - "如何操作或實施 Playground 開發架構隔離規劃？"
---

# Playground 開發架構隔離規劃

| 項目 | 內容 |
|------|------|
| 建立者 | Warren |
| 建立時間 | 2026-03-31 |
| 文件版本 | V1.0 |

---

## 版本歷史

| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
|------|------|------|--------|-----------|
| V1.0 | 2026-03-31 | 創建 Playground 隔離架構規劃 | Warren | OpenCode |

---

## 概述

本文檔說明 Momentry Core Playground（開發環境）的隔離架構規劃，確保開發測試環境與正式生產環境的數據能夠完整隔離，避免測試數據污染生產數據。

Playground 是 `momentry` 專案的開發專用二進制文件（binary），設計用於本地開發和功能測試，與生產環境（Production）使用不同的配置和資源池。

---

## 當前狀態

| 項目 | 狀態 |
|------|------|
| Redis 隔離 | ✅ 已隔離 |
| File System 隔離 | ✅ 已隔離 |
| PostgreSQL Schema 隔離 | 🔄 待實現 |
| MongoDB Database 隔離 | 🔄 待實現 |
| Qdrant Collection 隔離 | 🔄 待實現 |

---

## 隔離架構總覽

### 當前架構（部分隔離）

```
┌─────────────────────────────────────────────────────────────────┐
│                    Playground (Development) 現況               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────┐      ┌─────────────┐                             │
│  │  Playground │      │  Production  │                             │
│  │   Server    │      │   Server     │                             │
│  │  Port:3003  │      │  Port:3002   │                             │
│  │             │      │              │                             │
│  │ Redis:      │      │ Redis:       │                             │
│  │ momentry_dev│      │ momentry:   │◀── 隔離 ✅                  │
│  └──────┬──────┘      └──────┬──────┘                             │
│         │                    │                                    │
│         │    ┌───────────────┴───────────────┐                   │
│         │    │         共享資源               │                   │
│         ▼    ▼                               ▼                   │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐   │
│  │ PostgreSQL  │  │  MongoDB    │  │      Qdrant            │   │
│  │  momentry  │  │  momentry   │  │  momentry_rule1        │   │
│  │  (同一DB)   │  │  (同一DB)   │  │   (同一collection)    │   │
│  └─────────────┘  └─────────────┘  └─────────────────────────┘   │
│         │                    │                    │               │
│         └────────────────────┴────────────────────┘               │
│                              │                    ❌ 未隔離      │
│                              ▼                                │
│                    數據混合污染風險                              │
└─────────────────────────────────────────────────────────────────┘
```

### 規劃中的隔離架構

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                        Playground 完整隔離架構                             │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────────────────────────┐      ┌─────────────────────────────────┐   │
│  │    Development (Playground) │      │       Production               │   │
│  │       Port: 3003            │      │       Port: 3002               │   │
│  │       Binary: debug         │      │       Binary: release            │   │
│  │       Worker: disabled     │      │       Worker: enabled           │   │
│  └──────────────┬──────────────┘      └──────────────┬────────────────┘   │
│                 │                                        │                 │
│                 │  ┌──────────────────────────────────┴──────────────┐       │
│                 │  │                 共享基礎設施                    │       │
│                 │  └──────────────────────────────────┬──────────────┘       │
│                 │                                       │                    │
│                 ▼                                       ▼                    │
│  ┌────────────────────┐              ┌───────────────────────────────┐    │
│  │  PostgreSQL Schema  │              │      PostgreSQL Schema       │    │
│  │    (dev schema)     │              │        (public schema)       │    │
│  ├────────────────────┤              ├───────────────────────────────┤    │
│  │  videos_dev         │              │  videos                       │    │
│  │  chunks_dev        │              │  chunks                       │    │
│  │  pre_chunks_dev    │              │  pre_chunks                   │    │
│  │  frames_dev        │              │  frames                       │    │
│  │  processor_results │  (隔離 ✅)    │  processor_results            │    │
│  │  file_registry_dev │              │  file_registry                │    │
│  │  face_*_dev       │              │  face_*                       │    │
│  ├────────────────────┤              ├───────────────────────────────┤    │
│  │  可共享:            │              │  可共享:                       │    │
│  │  api_keys (獨立的) │              │  api_keys                     │    │
│  │  monitor_*         │              │  monitor_*                    │    │
│  │  backup_*         │              │  backup_*                     │    │
│  └────────────────────┘              └───────────────────────────────┘    │
│                                                                             │
│  ┌────────────────────┐              ┌───────────────────────────────┐    │
│  │    MongoDB        │              │        MongoDB               │    │
│  │  Database:         │              │    Database:                │    │
│  │  momentry_dev     │  (隔離 ✅)    │    momentry                 │    │
│  ├────────────────────┤              ├───────────────────────────────┤    │
│  │  - chunks         │              │  - chunks                     │    │
│  │  - cache         │              │  - cache                     │    │
│  └────────────────────┘              └───────────────────────────────┘    │
│                                                                             │
│  ┌────────────────────┐              ┌───────────────────────────────┐    │
│  │     Qdrant        │              │        Qdrant               │    │
│  │  Collection:       │              │    Collection:               │    │
│  │  momentry_dev_    │  (隔離 ✅)    │    momentry_rule1           │    │
│  │  rule1            │              │                             │    │
│  └────────────────────┘              └───────────────────────────────┘    │
│                                                                             │
│  ┌────────────────────┐              ┌───────────────────────────────┐    │
│  │     Redis          │              │        Redis                 │    │
│  │  Prefix:           │   (已有 ✅)   │    Prefix:                   │    │
│  │  momentry_dev:    │              │    momentry:                 │    │
│  └────────────────────┘              └───────────────────────────────┘    │
│                                                                             │
│  ┌────────────────────┐              ┌───────────────────────────────┐    │
│  │   File System      │   (已有 ✅)   │      File System            │    │
│  │  /output_dev       │              │    /output                  │    │
│  │  /backup_dev       │              │    /backup/momentry          │    │
│  └────────────────────┘              └───────────────────────────────┘    │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
```

---

## 隔離矩陣

| 資源 | Production | Development | 隔離狀態 | 隔離方式 |
|------|-----------|-------------|---------|---------|
| **API Server** | Port 3002 | Port 3003 | ✅ | 環境變數配置 |
| **Redis Prefix** | `momentry:` | `momentry_dev:` | ✅ | 環境變數配置 |
| **File Output** | `/Users/accusys/momentry/output` | `/Users/accusys/momentry/output_dev` | ✅ | 環境變數配置 |
| **File Backup** | `/Users/accusys/momentry/backup/momentry` | `/Users/accusys/momentry/backup/momentry_dev` | ✅ | 環境變數配置 |
| **PostgreSQL** | `public` schema | `dev` schema | ❌ | Schema 隔離 |
| **MongoDB** | `momentry` database | `momentry_dev` database | ❌ | Database 隔離 |
| **Qdrant** | `momentry_rule1` collection | `momentry_dev_rule1` collection | ❌ | Collection 隔離 |

---

## 需要隔離的數據表

### PostgreSQL（使用 Schema 隔離）

#### 需要隔離的表（放入 dev schema）

| 表名 | 說明 |
|------|------|
| `videos` | 視頻記錄 |
| `chunks` | 區塊數據 |
| `pre_chunks` | 預處理區塊 |
| `chunk_vectors` | 向量數據 |
| `frames` | 幀數據 |
| `processor_results` | 處理器結果 |
| `file_registry` | 文件註冊 |
| `file_lifecycle` | 文件生命周期 |
| `face_clusters` | 人臉聚類 |
| `face_detections` | 人臉檢測 |
| `face_identities` | 人臉身份 |
| `face_recognition_results` | 人臉識別結果 |

#### 可共享的表（留在 public schema）

| 表名 | 說明 |
|------|------|
| `api_keys` | API 金鑰（使用獨立的 Development API Key） |
| `api_key_audit_log` | API 金鑰審計日誌 |
| `api_key_anomalies` | API 金鑰異常 |
| `monitor_*` | 所有監控相關表 |
| `backup_*` | 備份記錄表 |
| `gitea_tokens` | Gitea API Token |
| `n8n_api_keys` | n8n API 金鑰 |
| `node_*` | 節點相關表 |
| `python_*` | Python 版本基線 |
| `storage_*` | 存儲統計表 |
| `v_idle_workflows` | 空閒工作流視圖 |
| `v_recent_anomalies` | 最近異常視圖 |
| `v_service_health` | 服務健康視圖 |
| `v_storage_overview` | 存儲概覽視圖 |

---

## 配置對比

### 環境變數對比

| 變數 | Production (.env) | Development (.env.development) |
|------|------------------|------------------------------|
| `MOMENTRY_SERVER_PORT` | 3002 | 3003 |
| `MOMENTRY_REDIS_PREFIX` | `momentry:` | `momentry_dev:` |
| `MOMENTRY_OUTPUT_DIR` | `/Users/accusys/momentry/output` | `/Users/accusys/momentry/output_dev` |
| `MOMENTRY_BACKUP_DIR` | `/Users/accusys/momentry/backup/momentry` | `/Users/accusys/momentry/backup/momentry_dev` |
| `DATABASE_URL` | `postgres://accusys@localhost:5432/momentr` | `postgres://accusys@localhost:5432/momentry` |
| `MONGODB_URL` | `mongodb://localhost:27017` | `mongodb://localhost:27017` |
| `QDRANT_URL` | `http://localhost:6333` | `http://localhost:6333` |
| `QDRANT_COLLECTION` | `momentry_rule1` | `momentry_dev_rule1` |
| `RUST_LOG` | info | debug |
| `MOMENTRY_WORKER_ENABLED` | true | false |

### 二進制對比

| 屬性 | Production | Playground |
|------|-----------|------------|
| Binary Name | `momentry` | `momentry_playground` |
| Build Mode | release | debug |
| Port | 3002 | 3003 |
| Config File | `.env` | `.env.development` |

---

## 實施步驟

### Step 1: 修改配置檔案

#### 更新 `.env.development`

在現有配置中添加數據庫隔離相關變數：

```bash
# Database Schema (PostgreSQL)
DATABASE_SCHEMA=dev

# MongoDB Database
MONGODB_DATABASE=momentry_dev

# Qdrant Collection
QDRANT_COLLECTION=momentry_dev_rule1
```

---

### Step 2: 修改代碼支持 Schema 切換

#### 2.1 更新 `src/core/config.rs`

添加新的配置項：

```rust
pub static DEV_SCHEMA: Lazy<String> = Lazy::new(|| {
    env::var("DATABASE_SCHEMA").unwrap_or_else(|_| "dev".to_string())
});

pub static DEV_DATABASE: Lazy<String> = Lazy::new(|| {
    env::var("MONGODB_DATABASE").unwrap_or_else(|_| "momentry_dev".to_string())
});

pub static DEV_QDRANT_COLLECTION: Lazy<String> = Lazy::new(|| {
    env::var("QDRANT_COLLECTION").unwrap_or_else(|_| "momentry_dev_rule1".to_string())
});
```

#### 2.2 更新 `src/core/db/postgres_db.rs`

在查詢方法中添加 schema 參數支持：

```rust
// 在連接配置中使用 schema
let schema = DEV_SCHEMA.as_str();
let query = format!("SET search_path TO {}", schema);
sqlx::query(&query).execute(&pool).await?;
```

#### 2.3 更新 `src/core/db/mongodb.rs`

支持數據庫切換：

```rust
let database_name = DEV_DATABASE.as_str();
let database = client.database(database_name);
```

#### 2.4 更新 `src/core/db/qdrant_db.rs`

支持 collection 切換：

```rust
let collection_name = DEV_QDRANT_COLLECTION.as_str();
```

---

### Step 3: 創建開發環境數據庫

#### 3.1 PostgreSQL - 創建 Schema

```bash
# 連接 PostgreSQL
psql -U accusys -d momentry

# 創建 dev schema
CREATE SCHEMA IF NOT EXISTS dev;

# 將現有表的結構復製到 dev schema
CREATE TABLE dev.videos AS SELECT * FROM public.videos WHERE 1=0;
CREATE TABLE dev.chunks AS SELECT * FROM public.chunks WHERE 1=0;
-- ... 其他表
```

#### 3.2 MongoDB - 創建 Database

```bash
# 複製數據到開發數據庫
use admin
db.copyDatabase('momentry', 'momentry_dev')
```

#### 3.3 Qdrant - 創建 Collection

```bash
# 使用 Qdrant API 創建新的 collection
curl -X PUT 'http://localhost:6333/collections/momentry_dev_rule1' \
  -H 'api-key: Test3200Test3200Test3200' \
  -H 'Content-Type: application/json' \
  -d '{
    "vectors": {
      "size": 1024,
      "distance": "Cosine"
    }
  }'
```

---

### Step 4: 驗證隔離效果

#### 4.1 啟動服務驗證

```bash
# Terminal 1: 啟動 Production Server
cargo run --bin momentry -- server --port 3002

# Terminal 2: 啟動 Playground Server
cargo run --bin momentry_playground -- server --port 3003
```

#### 4.2 數據隔離驗證

```bash
# 驗證 Redis 隔離
redis-cli KEYS "momentry:job:*"
redis-cli KEYS "momentry_dev:job:*"

# 驗證 PostgreSQL Schema
psql -U accusys -d momentry -c "\dt dev.*"
psql -U accusys -d momentry -c "\dt public.*"

# 驗證 MongoDB
mongosh --eval "db.adminCommand('listDatabases')" | grep momentry

# 驗證 Qdrant
curl -s -H "api-key: Test3200Test3200Test3200" \
  'http://localhost:6333/collections' | jq '.result[].name'
```

---

## 檔案位置

| 類型 | 路徑 | 說明 |
|------|------|------|
| Production Config | `/Users/accusys/momentry_core_0.1/.env` | 生產環境配置 |
| Development Config | `/Users/accusys/momentry_core_0.1/.env.development` | 開發環境配置 |
| Binary | `/Users/accusys/momentry_core_0.1/src/playground.rs` | Playground 二進制源碼 |
| Config Module | `/Users/accusys/momentry_core_0.1/src/core/config.rs` | 配置模組 |
| PostgreSQL Module | `/Users/accusys/momentry_core_0.1/src/core/db/postgres_db.rs` | PostgreSQL 模組 |
| MongoDB Module | `/Users/accusys/momentry_core_0.1/src/core/db/mongodb.rs` | MongoDB 模組 |
| Qdrant Module | `/Users/accusys/momentry_core_0.1/src/core/db/qdrant_db.rs` | Qdrant 模組 |

---

## 常用指令

### 啟動服務

```bash
# 啟動 Production Server
cargo run --bin momentry -- server

# 啟動 Playground Server
cargo run --bin momentry_playground -- server

# 指定 Port
cargo run --bin momentry_playground -- server --port 3003

# 啟動 Worker (Production)
cargo run --bin momentry -- worker --max-concurrent 2
```

### 驗證隔離

```bash
# 驗證 Redis 隔離
redis-cli KEYS "momentry:*"
redis-cli KEYS "momentry_dev:*"

# 驗證 PostgreSQL Schema
psql -U accusys -d momentry -c "\dt dev.*"
psql -U accusys -d momentry -c "\dt public.*"

# 驗證文件系統隔離
ls -la /Users/accusys/momentry/output/
ls -la /Users/accusys/momentry/output_dev/
```

### 數據庫操作

```bash
# 連接 PostgreSQL
psql -U accusys -d momentry

# 切換 Schema
SET search_path TO dev;

# 列出 Schema 表
\dt

# MongoDB 數據庫列表
mongosh --eval "db.adminCommand('listDatabases')"

# 切換 MongoDB 數據庫
use momentry_dev
db.chunks.countDocuments()
```

---

## 版本資訊

- 版本: V1.0
- 建立日期: 2026-03-31
- 文件更新: 2026-03-31

---

## 相關文件

| 文件 | 說明 |
|------|------|
| `PLAYGROUND_BINARY_IMPLEMENTATION.md` | Playground 二進制實現計劃 |
| `SERVICES.md` | 服務端口分配 |
| `MOMENTRY_CORE_REDIS_KEYS.md` | Redis Key 設計規範 |
| `AGENTS.md` | AI 代理執行指令 |
| `DOCS_STANDARD.md` | 文件創建規範 |

---

## 附錄：AI Agent 友好資訊

### 可用 Tools

| Tool | 用途 |
|------|------|
| `postgres_query` | 執行 PostgreSQL 查詢 |
| `mongodb_*` | MongoDB 操作 |
| `redis_*` | Redis 操作 |
| `qdrant_qdrant-*` | Qdrant 向量數據庫操作 |

### 數據庫 Schema

#### PostgreSQL Tables (dev schema)

```
videos, chunks, pre_chunks, chunk_vectors, frames, 
processor_results, file_registry, file_lifecycle,
face_clusters, face_detections, face_identities, 
face_recognition_results
```

#### MongoDB Collections

```
momentry_dev: chunks, cache
```

#### Qdrant Collections

```
momentry_dev_rule1
```

### 環境變數

```
MOMENTRY_SERVER_PORT, MOMENTRY_REDIS_PREFIX,
DATABASE_SCHEMA, MONGODB_DATABASE, QDRANT_COLLECTION,
MOMENTRY_OUTPUT_DIR, MOMENTRY_BACKUP_DIR
```
