6.9 KiB
6.9 KiB
存储架构说明
架构概述
本项目采用 MinIO (S3兼容) 作为对象存储和 PostgreSQL 作为元数据存储的双层存储架构。
┌─────────────────────────────────────────────────────────────┐
│ 应用层 (FastAPI) │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────┴──────────────┐
│ │
┌───────▼────────┐ ┌─────────▼─────────┐
│ PostgreSQL │ │ MinIO/S3 │
│ (元数据) │ │ (对象存储) │
│ │ │ │
│ - users │ │ - stp-files │
│ - stp_files │ │ - geometry │
│ - geometry_data│ │ - mold-cavities │
│ - mold_cavity │ │ - html-files │
│ - features │ │ - user-files │
│ - logs │ │ │
└────────────────┘ └──────────────────┘
PostgreSQL 数据表
用户管理
users- 用户信息(用户名、邮箱、密码等)
文件管理
stp_files- STP文件元数据(文件名、哈希、大小、状态等)html_files- HTML报告文件元数据
几何数据
geometry_data- 几何分析数据(体积、表面积、边界框等)mold_cavity_data- 模具型腔数据(工艺参数、质量评估等)feature_detections- 特征检测结果(壁厚、拔模角等)design_recommendations- 设计建议(优先级、参数等)
任务和日志
processing_tasks- 处理任务记录user_activities- 用户活动日志system_logs- 系统日志
MinIO 存储桶
| 存储桶名称 | 用途 | 存储内容 |
|---|---|---|
moldinsight-stp-files |
STP/STEP文件 | 用户上传的原始3D模型文件 |
moldinsight-geometry |
几何数据 | 几何分析结果的JSON数据 |
moldinsight-mold-cavities |
模具型腔数据 | 模具设计的详细JSON数据 |
moldinsight-html |
HTML文件 | 生成的HTML报告文件 |
moldinsight-user-files |
用户文件 | 其他用户上传的文件 |
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 启动 PostgreSQL
使用 Docker Compose(推荐):
docker-compose up -d postgres
或手动启动:
# 创建数据库
createdb moldinsight
# 运行数据库容器
docker run -d \
--name postgres \
-e POSTGRES_DB=moldinsight \
-e POSTGRES_USER=moldinsight_user \
-e POSTGRES_PASSWORD=your_password \
-p 5432:5432 \
postgres:15
3. 启动 MinIO
使用 Docker Compose(推荐):
docker-compose up -d minio
或手动启动:
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
minio/minio server /data --console-address ":9001"
4. 配置环境变量
# 复制示例配置
cp .env.example .env
# 编辑 .env 文件,修改数据库和MinIO配置
nano .env
5. 初始化数据库和存储
# 初始化数据库
python src/database/init_db.py
# 初始化MinIO存储
python src/storage/init_storage.py
6. 启动服务
python src/main.py
使用示例
保存STP文件
from services.storage_integration import storage_integration
from database.database import db_manager
async def upload_file(file_path: str):
async with db_manager.get_session() as session:
stp_file = await storage_integration.save_stp_file(
session=session,
file_path=Path(file_path),
original_filename="model.stp",
user_id=1
)
print(f"文件已保存,ID: {stp_file.id}")
保存几何数据
async def save_geometry(stp_file_id: int, geometry_data: dict):
async with db_manager.get_session() as session:
geo_data = await storage_integration.save_geometry_data(
session=session,
stp_file_id=stp_file_id,
geometry_json=geometry_data,
analysis_method="pythonocc"
)
print(f"几何数据已保存,ID: {geo_data.id}")
获取文件数据
async def get_file_data(stp_file_id: int):
async with db_manager.get_session() as session:
data = await storage_integration.get_stp_file_with_data(
session=session,
stp_file_id=stp_file_id
)
# 访问几何数据
geometry = data['geometry_data']
print(f"体积: {geometry['volume']}")
print(f"表面积: {geometry['surface_area']}")
# 访问模具型腔数据
cavity = data['mold_cavity_data']
print(f"模具材料: {cavity['mold_material']}")
# 访问特征和建议
for feature in data['features']:
print(f"特征: {feature['feature_type']}")
数据清理策略
MinIO 对象存储
- 设置生命周期策略自动删除旧文件
- 示例:删除30天前的临时文件
PostgreSQL
- 定期清理已删除用户的记录
- 归档超过6个月的日志数据
监控和维护
检查存储使用情况
# MinIO控制台
# http://localhost:9001
# 用户名: minioadmin
# 密码: minioadmin
数据库备份
# 备份数据库
pg_dump -h localhost -U moldinsight_user moldinsight > backup.sql
# 恢复数据库
psql -h localhost -U moldinsight_user moldinsight < backup.sql
性能优化
PostgreSQL
- 创建适当的索引(已在模型中定义)
- 定期运行 VACUUM 和 ANALYZE
- 考虑使用连接池(已配置)
MinIO
- 启用缓存层
- 配置CDN分发静态文件
- 使用多区域复制
安全建议
- 更改默认密码:生产环境必须更改所有默认密码
- 启用TLS:生产环境启用 HTTPS
- 访问控制:配置适当的用户权限
- 数据加密:敏感数据加密存储
- 定期备份:设置自动备份策略
故障排除
连接MinIO失败
错误: 对象存储连接失败
解决: 检查 MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY 配置
数据库连接失败
错误: 数据库连接失败
解决: 检查 DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD 配置
文件上传失败
错误: STP文件上传失败
解决: 检查磁盘空间、网络连接、MinIO权限