
1) 【一句话结论】:采用时间序列表设计,以时间戳为主键并按时间分区,结合时间范围索引优化,确保查询过去24小时数据高效。
2) 【原理/概念讲解】:老师口吻,解释时间序列数据的核心特点(时间有序、高频、连续),关系型数据库存储时,需以时间戳为主键(保证唯一性并按时间排序),通过时间范围索引(如B+树索引时间列)加速范围查询。类比:就像图书馆按时间顺序排书,找最近24小时的书,直接查时间范围,不用翻整本。
3) 【对比与适用场景】:
| 对比项 | 关系型数据库(如MySQL) | 时序数据库(如InfluxDB) |
|---|---|---|
| 定义 | 传统RDBMS,支持ACID | 专为时间序列设计的NoSQL |
| 特性 | 支持复杂关联查询、事务 | 高效写入、时间范围索引、数据压缩 |
| 使用场景 | 业务逻辑复杂、关联查询 | 工业设备监控、传感器数据 |
| 注意点 | 需手动建时间索引,避免全表扫描 | 写入性能高,复杂查询弱 |
4) 【示例】:
CREATE TABLE device (
device_id INT PRIMARY KEY,
device_name VARCHAR(50),
location VARCHAR(100),
created_at TIMESTAMP
);
CREATE TABLE device_history (
device_id INT,
timestamp TIMESTAMP NOT NULL,
temperature FLOAT,
pressure FLOAT,
status VARCHAR(20),
PRIMARY KEY (device_id, timestamp),
INDEX idx_timestamp (timestamp) -- 时间范围索引
);
SELECT * FROM device_history
WHERE device_id = ? AND timestamp >= NOW() - INTERVAL 24 HOUR;
5) 【面试口播版答案】:
面试官您好,针对工业设备历史数据存储,我会设计一个以时间戳为主键的表结构,并优化查询性能。首先,创建设备表存储设备基本信息,然后设计历史数据表,主键为设备ID和时间戳,确保数据按时间有序。为了查询过去24小时数据高效,添加时间戳的B+树索引,利用范围扫描。比如,查询某设备过去24小时数据时,数据库通过索引快速定位时间范围,避免全表扫描。这样既保证数据完整性,又提升查询效率。
6) 【追问清单】:
7) 【常见坑/雷区】: