Skip to main content

DatomsDBS 数据资产管理系统 - 系统架构与功能总结

📋 项目概述​

DatomsDBS (DatomsDB Server) 是一个基于 Node.js 的数据资产管理系统,版本 0.1.0。该系统提供了完整的数据源连接、数据资产管理、用户认证、权限控制等功能,支持多种数据库类型和文件格式。

🏗️ 系统架构​

技术栈​

  • 后端: Node.js + Express.js
  • 数据库引擎: DatomsDB (自研)
  • 前端: HTML + CSS + JavaScript (管理界面)
  • 容器化: Docker + Docker Compose
  • 日志: Winston
  • 测试: Jest + Supertest

核心依赖​

{
"datomsdb": "^0.2.3", // 核心数据库引擎
"express": "^4.17.1", // Web 框架
"mysql2": "^3.14.1", // MySQL 连接器
"pg": "^8.16.0", // PostgreSQL 连接器
"mongodb": "^6.16.0", // MongoDB 连接器
"jsonwebtoken": "^8.5.1", // JWT 认证
"@aws-sdk/client-s3": "^3.812.0" // AWS S3 支持
}

📁 项目结构​

DatomsDBS/
├── src/ # 源代码目录
│ ├── api/ # API 层
│ │ ├── routes/ # 路由定义
│ │ ├── controllers/ # 控制器逻辑
│ │ └── middleware/ # 中间件
│ ├── services/ # 业务逻辑层
│ ├── db/ # 数据库引擎层
│ ├── connectors/ # 数据源连接器
│ ├── utils/ # 工具库
│ └── config/ # 配置文件
├── public/ # 静态资源
│ └── admin/ # 管理界面
├── data/ # 数据存储目录
├── tests/ # 测试套件
├── deployment/ # 部署配置
└── docs/ # 项目文档

🚀 核心功能模块​

1. 用户认证与权限管理​

实现文件:

  • src/api/controllers/authController.js - 认证控制器
  • src/api/controllers/roleController.js - 角色管理
  • src/api/controllers/accessController.js - 访问控制
  • src/db/users.js - 用户数据管理

功能特性:

  • JWT Token 认证
  • 基于角色的访问控制 (RBAC)
  • 用户注册、登录、权限管理
  • 多层次权限控制(系统级、数据源级、数据资产级)

调用流程:

用户请求 → 认证中间件 → JWT 验证 → 权限检查 → 业务逻辑

2. 数据源管理​

实现文件:

  • src/services/dataSourceService.js - 数据源服务 (1175行)
  • src/api/controllers/dataSourceController.js - 数据源控制器
  • src/connectors/ - 各类数据源连接器

支持的数据源类型:

  • 关系型数据库: MySQL, PostgreSQL
  • NoSQL数据库: MongoDB
  • 文件格式: CSV, Excel, JSON, PDF, Word, 图片
  • API接口: REST API, GraphQL
  • 云存储: AWS S3

核心连接器:

  • mysql-connector.js - MySQL 连接器
  • postgres-connector.js - PostgreSQL 连接器
  • mongodb-connector.js - MongoDB 连接器
  • csv-connector.js - CSV 文件处理
  • excel-connector.js - Excel 文件处理
  • s3-connector.js - AWS S3 连接器

调用流程:

创建数据源 → 配置验证 → 连接测试 → 数据预览 → 保存配置 → 设置访问控制

3. 数据资产管理​

实现文件:

  • src/api/controllers/dataAssetController.js - 数据资产控制器 (545行)
  • src/services/dataProductService.js - 数据产品服务 (671行)
  • src/services/datomsDbManagerService.js - DatomsDB 管理服务 (441行)

功能特性:

  • 数据资产创建与管理
  • 数据提取与转换
  • 元数据管理
  • 数据版本控制
  • 数据质量监控

调用流程:

选择数据源 → 配置提取规则 → 数据提取 → 格式转换 → 创建数据资产 → 元数据记录

4. 数据库引擎​

实现文件:

  • src/db/engine.js - 核心数据库引擎 (370行)
  • src/db/persistence.js - 数据持久化
  • src/services/datomsConversionService.js - 数据转换服务

核心特性:

  • 基于 DatomsDB 的数据存储
  • 多数据库实例管理
  • 自动保存机制
  • 并发写入保护
  • 加密数据库支持

数据库操作流程:

初始化引擎 → 加载数据库列表 → 创建/加载数据库实例 → 数据操作 → 自动保存

5. API 接口系统​

路由结构:

/api/
├── /admin # 管理员接口
├── /datoms # DatomsDB 操作接口
├── /data-sources # 数据源管理接口
├── /data-products # 数据产品接口
├── /data-assets # 数据资产接口
├── /subscriptions # 订阅管理接口
├── /api-keys # API密钥管理
├── /roles # 角色管理接口
└── /exchange # 数据交换接口

主要路由文件:

  • src/api/routes/index.js - 主路由配置
  • src/api/routes/dataSourceRoutes.js - 数据源路由
  • src/api/routes/dataAssetRoutes.js - 数据资产路由
  • src/api/routes/datomsdbApiRoutes.js - DatomsDB API路由 (235行)

6. 文件处理与存储​

实现文件:

  • src/services/FileStorageService.js - 文件存储服务
  • src/services/fileChunkingService.js - 文件分块服务
  • src/services/HashingService.js - 文件哈希服务

功能特性:

  • 文件上传与存储
  • 大文件分块处理
  • 文件去重(基于哈希)
  • 图片文件特殊处理
  • 多种文件格式支持

7. 数据转换与预处理​

实现文件:

  • src/services/datomsConversionService.js - DatomsDB 转换服务
  • src/services/dataPreprocessingService.js - 数据预处理服务

转换流程:

原始数据 → 格式检测 → 数据清洗 → 结构转换 → DatomsDB 格式 → 存储

🔒 安全机制​

1. 文件锁机制​

  • 保护文件: data/dataSources.json, data/db_list.json, data/db_access.json
  • 实现位置: 各控制器和服务中
  • 特性: 锁文件、原子性写入、重试机制、超时保护

2. 访问控制​

  • 多层次权限: 系统级 → 数据源级 → 数据资产级
  • 实现文件: src/services/accessControlService.js
  • 权限类型: 读取、写入、管理、删除

3. API 认证​

  • JWT Token: 基于 jsonwebtoken
  • 中间件: src/api/middleware/combinedAuth.js
  • API Key: 支持 API Key 认证

🧪 测试体系​

测试目录结构​

tests/
├── basic/ # 基础功能测试
├── integration/ # 集成测试
├── unit/ # 单元测试
├── load/ # 负载测试
├── memory/ # 内存泄漏测试
├── db_source/ # 测试数据库环境
├── dev_to_prod/ # 端到端测试
├── external_api_test/ # 外部API测试
└── zero_2_hero_test/ # 完整流程测试

测试环境​

  • Docker 测试数据库: MySQL, PostgreSQL, MongoDB
  • 配置文件: tests/db_source/docker-compose-test-dbs.yml
  • 测试脚本: tests/dev_to_prod/dev_pro_test.py

🚀 部署架构​

部署方式​

  1. Docker 容器化部署
  2. Kubernetes 集群部署
  3. 传统服务器部署

部署文件​

  • deployment/deploy.sh - 自动化部署脚本
  • deployment/production-docker-compose.yml - 生产环境配置
  • deployment/kubernetes/ - K8s 部署配置
  • Dockerfile - 容器镜像构建

监控与运维​

  • 健康检查: /api/health, /api/status
  • 日志管理: Winston 日志系统
  • 内存监控: 内存使用监控和泄漏检测

📝 核心业务流程​

1. 数据源创建流程​

1. 用户提交数据源配置
2. 验证配置参数
3. 测试数据源连接
4. 创建数据源记录
5. 设置访问控制策略
6. 转换为 DatomsDB 格式
7. 保存并返回结果

2. 数据资产创建流程​

1. 选择已有数据源
2. 配置数据提取规则
3. 执行数据提取操作
4. 创建新的 DatomsDB 实例
5. 数据格式转换和清洗
6. 生成元数据信息
7. 设置访问权限
8. 保存数据资产记录

3. 用户认证流程​

1. 用户提交登录凭据
2. 验证用户名和密码
3. 生成 JWT Token
4. 返回 Token 和用户信息
5. 后续请求携带 Token
6. 中间件验证 Token 有效性
7. 提取用户信息供业务使用

📊 系统配置​

主要配置文件​

  • src/config.js - 系统基础配置
  • package.json - 项目依赖和脚本
  • docker-compose.yml - 开发环境配置
  • .env - 环境变量配置

关键配置项​

{
port: 9000, // 服务端口
dataDirectory: './data', // 数据存储目录
autoSaveInterval: 60000, // 自动保存间隔
maxFileSize: '100MB', // 最大文件大小
supportedFormats: ['csv', 'json', 'xlsx', 'pdf', 'txt', 'jpg', 'png']
}

🔧 扩展机制​

1. 连接器扩展​

  • 新增数据源类型只需实现标准连接器接口
  • 位置: src/connectors/
  • 接口: connect(), query(), disconnect()

2. 中间件扩展​

  • 支持自定义认证和权限中间件
  • 位置: src/api/middleware/

3. 服务扩展​

  • 业务逻辑模块化设计
  • 位置: src/services/

🎯 开发指南​

启动开发环境​

# 安装依赖
npm install

# 启动测试数据库
cd tests/db_source
docker-compose -f docker-compose-test-dbs.yml up -d

# 启动开发服务器
npm run dev

运行测试​

# 单元测试
npm test

# 集成测试
npm run test:integration

# 负载测试
npm run test:load

# 完整测试套件
npm run test:all

API 调用示例​

# 健康检查
curl http://localhost:9000/api/health

# 用户登录
curl -X POST http://localhost:9000/api/admin/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password"}'

# 获取数据源列表
curl -H "Authorization: Bearer <token>" \
http://localhost:9000/api/data-sources

📈 性能特性​

并发处理​

  • 文件锁机制防止并发写入冲突
  • 连接池管理数据库连接
  • 异步操作优化响应时间

内存管理​

  • 大文件分块处理
  • 定期内存清理
  • 内存泄漏监控

缓存策略​

  • 数据库实例缓存
  • 连接复用
  • 查询结果缓存

📞 技术支持​

本系统已实现完整的数据资产管理功能,包括多数据源支持、用户权限管理、数据转换、API 接口等核心特性。系统采用模块化设计,易于扩展和维护。

对于新加入的开发者,建议从 src/server.js 入口文件开始了解系统架构,然后深入各功能模块进行开发。