
1) 【一句话结论】
采用分层分布式架构,结合对象存储(存储原始数据)、时序数据库(时间序列数据)、流处理(实时行为分析)和离线计算(模型训练),并引入联邦学习与差分隐私技术保障数据安全,实现存储、实时处理与离线训练的协同。
2) 【原理/概念讲解】
老师口吻解释各组件:
3) 【对比与适用场景】
存储方案对比(表格):
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 对象存储(如MinIO) | 分布式文件系统,支持海量非结构化数据存储 | 高扩展性、高可用、按需付费 | 存储原始视频、点云等大文件 | 需要索引,不适合实时查询 |
| 时序数据库(如InfluxDB) | 专为时间序列数据设计,支持高写入速率 | 专为时间序列优化,支持聚合查询 | 存储传感器时间序列数据(如速度、温度) | 不适合非时间序列数据 |
4) 【示例】
数据写入流程伪代码:
def write_sensor_data(camera_frame, radar_points):
# 1. 数据加密
encrypted_frame = encrypt(camera_frame, key="storage_key")
encrypted_points = encrypt(radar_points, key="storage_key")
# 2. 写入对象存储
minio_client.put_object(
bucket_name="sensor_data",
object_name=f"camera/{timestamp}.jpg",
data=encrypted_frame
)
minio_client.put_object(
bucket_name="sensor_data",
object_name=f"radar/{timestamp}.bin",
data=encrypted_points
)
# 3. 写入时序数据库
influx_client.write(
measurement="vehicle_status",
fields={"speed": speed, "acceleration": acc},
tags={"vehicle_id": vehicle_id},
time=timestamp
)
# 4. 写入Kafka
kafka_producer.send(
topic="sensor_stream",
value=json.dumps({
"camera": camera_frame,
"radar": radar_points,
"status": {"speed": speed, "acc": acc}
})
)
5) 【面试口播版答案】
面试官您好,针对自动驾驶数据存储与处理架构,我设计的方案是分层分布式架构。首先,存储层采用对象存储(如MinIO)存储原始非结构化数据(摄像头视频、雷达点云),时序数据库(如InfluxDB)存储时间序列数据(速度、加速度),支持海量数据的高效存储。然后,实时处理层用Kafka作为消息队列,Flink处理数据流,实现毫秒级的行为分析(如行人检测、碰撞预警)。离线训练层用Spark处理历史数据,用于模型优化(如目标检测模型迭代)。数据安全方面,采用数据加密(传输和存储)、联邦学习(本地设备训练后聚合模型,不传输原始数据)和差分隐私(添加噪声保护隐私),确保数据安全。这样架构能同时满足存储、实时处理和离线训练的需求,并保障数据安全。
6) 【追问清单】
7) 【常见坑/雷区】