
采用“数据湖+数据仓库”混合架构,数据湖存储原始日志(HDFS/对象存储),数据仓库采用星型模型存储结构化数据,结合Flink流处理保障实时分析,通过Hive ACID事务确保数据一致性。
| 特性 | 数据湖 | 传统数据仓库 | 使用场景/注意点 |
|---|---|---|---|
| 存储数据 | 原始日志(JSON/Parquet) | 结构化数据(关系型表) | 原始数据积累 vs 预聚合分析 |
| 扩展性 | 弹性(HDFS/对象存储) | 固定规模(RDBMS) | 海量日志扩展 vs 预定义规模 |
| 分析类型 | 探索性(BI、机器学习) | OLAP(预聚合,复杂查询) | 探索性分析 vs 预定义查询 |
| 时效性 | 低(批处理) | 中(批处理+实时) | 历史分析 vs 实时监控 |
| 数据治理 | 需元数据管理(如Atlas) | 预定义模式 | 数据血缘 vs 数据质量 |
| 特性 | 星型模型 | 雪花模型 | 使用场景/注意点 |
|---|---|---|---|
| 维度表 | 非规范化(冗余) | 规范化(减少冗余) | 快速查询 vs 复杂关联 |
| 查询效率 | 高(事实表大,维度表小) | 低(多表连接) | 日志分析(聚合查询) vs 多维度复杂分析 |
| 数据量 | 大(事实表) | 小(维度表) | 存储效率 vs 查询性能 |
| 使用场景 | 快速查询(如日志统计) | 复杂分析(如多维度关联) | 日志分析效率 vs 数据冗余控制 |
CREATE TABLE log_events (
event_id BIGINT PRIMARY KEY,
event_time TIMESTAMP NOT NULL,
user_id BIGINT NOT NULL,
device_id BIGINT NOT NULL,
event_type_id BIGINT NOT NULL,
action VARCHAR(255),
-- 时间分区,按天分区减少查询扫描文件数
PARTITIONED BY (event_date STRING)
);
CREATE TABLE users (
user_id BIGINT PRIMARY KEY,
user_name VARCHAR(100),
registration_date DATE,
-- 索引提升查询效率
INDEX idx_user_id (user_id)
);
log_events_realtime),延迟控制在秒级(通过检查点机制优化)。(约90秒)
“面试官您好,针对360安全产品的日志存储分析,我建议采用‘数据湖+数据仓库’混合架构。首先,数据湖用HDFS或对象存储(如阿里云OSS)存储原始日志(JSON/Parquet格式),支持弹性扩展,适合原始数据积累。然后,通过Spark/ELT将数据加载到数据仓库,采用星型模型,事实表存储日志事件(如event_id、时间戳、用户ID等),维度表存储用户、设备、操作类型等描述信息。对于时效性,结合Flink流处理,实时消费日志并写入数据仓库的实时表,确保秒级延迟分析;对于一致性,使用Hive的ACID事务或时间戳版本控制,保证数据完整性和一致性。这样既能处理海量日志,又能支持实时分析和历史分析。”