
1) 【一句话结论】采用时序数据库与对象存储结合的分层存储方案,时序数据库存储视频元数据(时间、标识、位置等)以支持快速检索,对象存储存储视频原始文件以实现数据持久化与冷热分离。
2) 【原理/概念讲解】老师口吻:时序数据库(如InfluxDB、Prometheus)专为时间序列数据设计,核心是时间索引,适合存储视频的元数据(采集时间、事件标签、位置等),因为这类数据需按时间范围快速查询(类比日志系统,按时间顺序记录事件,检索时按时间范围快速定位)。对象存储(如MinIO、S3)以对象(键值对)形式存储非结构化大文件,核心是高持久性与可扩展性,适合存储视频原始文件(类比云存储,存海量视频文件,持久性高)。两者结合:时序数据库负责“索引”和“元数据管理”,对象存储负责“数据持久化”,通过元数据(如视频ID、时间戳、存储路径)关联,实现快速检索(从时序数据库查元数据,再从对象存储取文件)。
3) 【对比与适用场景】
| 特性/场景 | 时序数据库(如InfluxDB) | 对象存储(如MinIO/S3) |
|---|---|---|
| 定义 | 专为时间序列数据设计,支持高并发时间查询 | 存储非结构化/结构化数据,以对象(键值对)形式存储 |
| 核心特性 | 时间索引、聚合查询、高写入吞吐 | 海量存储、高持久性(如S3的99.999999999% durability)、可扩展、元数据灵活 |
| 使用场景 | 视频元数据(时间、事件、位置)、日志、传感器数据 | 视频原始文件、归档数据、冷数据、大文件(如视频、图片) |
| 注意点 | 适合时序数据,不适合复杂关系查询 | 适合大文件,检索需通过元数据,需额外索引(如对象存储的元数据索引) |
4) 【示例】
// 对象存储PUT操作(上传视频文件并附加元数据)
{
"Bucket": "video-bucket",
"Key": "video/20240101/001.mp4",
"Body": "视频文件内容",
"Metadata": {
"video_id": "vid-123",
"capture_time": "2024-01-01T10:00:00Z",
"location": "杭州-海康总部",
"event_type": "异常检测"
}
}
// InfluxDB写入元数据
INSERT video_metadata
INTO video_events
(video_id, capture_time, location, event_type)
VALUES ('vid-123', '2024-01-01T10:00:00Z', '杭州-海康总部', '异常检测');
5) 【面试口播版答案】
面试官您好,针对海康智能分析平台的视频数据存储,我会采用时序数据库与对象存储结合的方案。核心思路是:时序数据库存储视频的元数据(如采集时间、视频ID、位置、事件标签等),通过时间索引支持快速检索;对象存储存储视频原始文件,实现数据持久化。具体来说,视频采集时,先通过对象存储上传视频文件,并附加元数据(如视频ID、时间戳),再将元数据写入时序数据库。检索时,先从时序数据库按时间范围查询元数据(如最近24小时的视频列表),再根据元数据中的存储路径从对象存储下载视频文件。这样既保证了数据的持久化(对象存储的高持久性),又实现了快速检索(时序数据库的索引能力)。
6) 【追问清单】
7) 【常见坑/雷区】