第12章:数据处理与存储
物联网产生的海量数据如果得不到有效存储和分析,就是一堆数字垃圾。本章将介绍如何高效地处理这些数据。
12.1 数据格式 (Data Format)
设备与云端通信时,数据载体至关重要。
12.1.1 JSON (JavaScript Object Notation)
- 优点:人眼可读,解析方便,兼容性最好。
- 缺点:冗余字符多,浪费带宽。
- 示例:
{ "temp": 25.5, "hum": 60, "ts": 1678888888 }
12.1.2 Protocol Buffers (Protobuf)
- 优点:Google 开发,二进制压缩,体积极小,解析速度快。
- 缺点:不可读,需要预定义
.proto文件。 - 应用:带宽极贵的 NB-IoT 设备。
12.2 时序数据库 (Time Series Database, TSDB)
物联网数据最显著的特征是带时间戳且持续产生。传统的关系型数据库(如 MySQL)在处理这种高并发写入时会遇到瓶颈。
为什么选择 InfluxDB?
- 高吞吐写入:专为时序数据设计,每秒可处理数十万点写入。
- 自动过期:支持 Retention Policy,自动删除过期数据(如只保留最近 30 天)。
- 高效查询:内置时间聚合函数(如“查询过去一小时每分钟的平均温度”)。
InfluxDB 实战
- 安装 (Docker):
docker run -d -p 8086:8086 --name influxdb influxdb:1.8 - 写入数据 (Line Protocol):
weather,location=us-midwest temperature=82 1465839830100400200- Measurement:
weather(表名) - Tags:
location=us-midwest(索引列) - Fields:
temperature=82(数值列) - Timestamp:
1465839830100400200
- Measurement:
12.3 数据清洗与边缘处理
在上传云端前,通常需要在边缘侧(网关)进行预处理。
- 去重:如果设备每秒发一次数据,但数值没变,可以不传。
- 异常过滤:剔除明显错误的数值(如温度 -200度)。
- 降采样:将 100Hz 的振动数据计算为 1Hz 的 RMS(均方根)值上传。
至此,第三部分“物联网编程实战”已完成。接下来,我们将视野投向云端,进入第四部分:云平台与大数据。