
1) 【一句话结论】:采用混合数据架构(数据湖+数据仓库),结合星型事实表(处理结构化分析数据)与文档型表(处理非结构化设计参数),通过ETL/ELT策略集成多源数据,实现实时状态与历史数据的分离存储与高效分析。
2) 【原理/概念讲解】:
3) 【对比与适用场景】:
| 架构类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据湖 | 存储原始多源数据(结构化/非结构化) | 原始、未处理,支持大数据 | 历史数据、非结构化数据(如设计文档、传感器原始数据) | 需要后期处理,存储成本高 |
| 数据仓库 | 按主题组织的结构化数据(清洗后) | 结构化、主题化,支持分析 | 实时状态分析、历史趋势分析(如船舶运行状态、设计参数变更历史) | 需要ETL/ELT处理,查询效率高 |
| 星型模型 | 事实表+维度表 | 事实表存储度量值,维度表存储上下文 | 结构化数据分析(如按设备、时间、参数分析状态) | 维度表过多可能影响性能 |
| 文档型模型 | JSON/NoSQL存储 | 灵活,字段可动态扩展 | 非结构化数据(如设计参数、3D模型参数) | 查询复杂,不适合复杂聚合 |
4) 【示例】:
-- 事实表:船舶实时状态事实表
CREATE TABLE ship_realtime_status (
status_id BIGINT PRIMARY KEY,
device_id VARCHAR(50),
parameter_name VARCHAR(100),
value DECIMAL(10,2),
timestamp TIMESTAMP,
source_id VARCHAR(50) -- 传感器ID
);
-- 维度表:设计参数维度表
CREATE TABLE design_parameter_dim (
param_id BIGINT PRIMARY KEY,
param_name VARCHAR(100),
value VARCHAR(200), -- 存储JSON或字符串
description TEXT
);
-- 数据湖表(JSON存储设计参数)
CREATE TABLE design_parameter_json (
id BIGINT PRIMARY KEY,
data JSONB -- 存储设计参数的JSON对象
);
-- 数据集成流程(ELT示例)
-- 1. 从传感器(实时状态)抽取原始数据,加载到数据湖
COPY ship_realtime_status_raw TO 's3://data-lake/raw/ship_status' FROM 'sensor_data';
-- 2. 从数据湖加载到数据仓库(转换:清洗、关联维度表)
INSERT INTO ship_realtime_status
SELECT
status_id,
device_id,
parameter_name,
value,
timestamp,
source_id
FROM ship_realtime_status_raw
WHERE processed = FALSE
UPDATE ship_realtime_status_raw SET processed = TRUE WHERE status_id = ship_realtime_status.status_id;
5) 【面试口播版答案】:
“面试官您好,针对船舶数字孪生系统的数据库设计,我建议采用混合架构:数据湖存储原始多源数据(设计参数、实时状态、历史数据),数据仓库按主题组织结构化数据用于分析。数据模型上,结合星型模型(事实表+维度表)处理结构化分析数据,文档型模型(JSON)存储非结构化设计参数。数据集成用ETL/ELT策略,实时状态从传感器用ELT加载到数据湖,再ETL到数据仓库;历史数据直接加载到数据湖。这样既能支持实时状态监控,又能通过数据仓库进行历史趋势分析,满足多源数据集成需求。”
6) 【追问清单】:
7) 【常见坑/雷区】: