
1) 【一句话结论】采用“时序数据库(TimescaleDB)+关系型数据库(PostgreSQL)+分布式存储(Ceph)”混合架构,通过时序数据库存储时间序列船舶数据(满足LSTM训练),关系型数据库处理结构化统计查询,Ceph弹性扩容应对年增50%的数据量,并实施海关合规的数据安全(数据分类分级、加密、访问控制)及数据生命周期管理(归档/删除策略)。
2) 【原理/概念讲解】老师口吻,解释各组件选择逻辑:
3) 【对比与适用场景】
| 组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 时序数据库(TimescaleDB) | 专为时间序列数据设计,支持时间索引、自动分区 | 高效时间范围查询、高写入吞吐、自动数据压缩、数据分类分级 | LSTM训练(时间序列数据)、按时间窗口查询(月/周统计) | 不适合非时间序列的复杂关联查询,需优化时间索引 |
| 关系型数据库(PostgreSQL) | 支持结构化数据、ACID事务、复杂SQL | 强一致性、事务隔离、多表关联、CDC同步 | 船舶类型统计(按类型分组聚合)、元数据管理、与时序数据库同步关键字段 | 写入吞吐低于时序数据库,需构建复合索引((ship_type, arrival_time))优化查询 |
| 分布式存储(Ceph) | 分布式对象存储,提供弹性扩容、高可用 | 增加节点自动扩展容量、多副本冗余、数据冗余 | 应对数据量年增50%的存储需求,提供容灾能力 | 部署复杂,需配置副本数量(3副本),扩容阈值(存储使用率>80%) |
| 数据生命周期管理 | 数据归档/删除策略 | 自动化归档(2年)、物理删除(5年) | 避免长期存储成本,符合数据保留要求 | 需设置归档周期和删除规则,避免数据丢失 |
4) 【示例】
-- TimescaleDB:船舶数据表
CREATE TABLE ship_data (
id UUID PRIMARY KEY,
ship_type VARCHAR(50) NOT NULL,
deadweight DECIMAL(10,2) NOT NULL,
arrival_time TIMESTAMPTZ NOT NULL,
loading_amount DECIMAL(10,2),
unloading_amount DECIMAL(10,2),
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- PostgreSQL:船舶类型统计表
CREATE TABLE ship_type_stats (
ship_type VARCHAR(50) PRIMARY KEY,
total_loading DECIMAL(10,2),
total_unloading DECIMAL(10,2),
last_updated TIMESTAMPTZ DEFAULT NOW()
);
-- CDC同步(PostgreSQL触发器)
CREATE OR REPLACE FUNCTION sync_ship_type_to_stats()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO ship_type_stats (ship_type, total_loading, total_unloading, last_updated)
VALUES (NEW.ship_type, NEW.loading_amount, NEW.unloading_amount, NOW())
ON CONFLICT (ship_type) DO UPDATE
SET total_loading = EXCLUDED.loading_amount,
total_unloading = EXCLUDED.unloading_amount,
last_updated = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER sync_ship_type_trigger
AFTER INSERT ON ship_data
FOR EACH ROW EXECUTE FUNCTION sync_ship_type_to_stats();
#!/bin/bash
START_DATE=$(date -d "2 years ago" +%Y-%m-%d)
aws s3 cp s3://ceph-archive/ship_data_archive/ ship_data_archive/ --recursive --exclude "*" --include "*${START_DATE}*.parquet"
aws s3 rm s3://ceph-storage/ship_data/ --recursive --include "*${START_DATE}*.parquet"
5) 【面试口播版答案】(约90秒)
“面试官您好,针对中远海运AI团队的港口吞吐量预测模型存储需求,我的核心方案是采用‘时序数据库+关系型数据库+分布式存储’的混合架构,兼顾时间序列训练、结构化查询、数据量增长和海关安全要求。首先,LSTM模型训练需要连续的时间序列数据(如船舶靠港时间、装卸量的时间序列),因此我们选择时序数据库(TimescaleDB)作为核心存储,它能高效支持时间范围查询(比如‘最近一年’的船舶数据),且能应对数据量年增50%的高写入需求。其次,查询模式包含‘按船舶类型统计装卸量’,这是典型的结构化查询,我们用关系型数据库(PostgreSQL)来管理船舶类型、载重等结构化字段,利用SQL聚合函数快速完成统计,并通过CDC与时序数据库同步关键字段,保证统计数据的实时性。数据量增长快,我们通过分布式存储(Ceph)提供弹性扩容,当存储使用率超过80%时自动增加存储节点(如从10节点扩展到12节点),避免单点瓶颈。数据安全方面,海关监管要求严格,我们采用端到端加密(传输用TLS 1.3,存储用AES-256)、基于角色的访问控制(仅AI团队读取训练数据,其他部门仅能访问脱敏后的统计结果),以及审计日志记录所有数据访问操作,数据分类分级依据《海关数据安全管理规定》,敏感数据(如装卸量)脱敏后存储。此外,实施数据生命周期管理,超过2年的船舶数据归档到Ceph的归档存储,超过5年的数据物理删除,符合数据保留要求。这样既能满足LSTM训练的时间序列需求,又能高效处理查询,同时应对数据增长和安全要求。”
6) 【追问清单】
7) 【常见坑/雷区】