我们现在做互联网产品的时候,都有这么一个需求:记录用户在网站或者App上的点击行为数据,来分析用户行为。这里的数据一般包括用户ID、行为类型(例如浏览、登录、下单等)、行为发生的时间戳:
UserID, Type, TimeStamp
我之前做过的一个物联网项目的数据存取需求,和这个很相似。我们需要周期性地统计近万台设备的实时状态,包括设备ID、压力、温度、湿度,以及对应的时间戳:
DeviceID, Pressure, Temperature, Humidity, TimeStamp
这些与发生时间相关的一组数据,就是时间序列数据。这些数据的特点是没有严格的关系模型,记录的信息可以表示成键和值的关系(例如,一个设备ID对应一条记录),所以,并不需要专门用关系型数据库(例如MySQL)来保存。而Redis的键值数据模型,正好可以满足这里的数据存取需求。Redis基于自身数据结构以及扩展模块,提供了两种解决方案。
这节课,我就以物联网场景中统计设备状态指标值为例,和你聊聊不同解决方案的做法和优缺点。
俗话说,“知己知彼,百战百胜”,我们就先从时间序列数据的读写特点开始,看看到底应该采用什么样的数据类型来保存吧。
时间序列数据的读写特点在实际应用中,时间序列数据通常是持续高并发写入的,例如,需要连续记录数万个设备的实时状态值。同时,时间序列数据的写入主要就是插入新数据,而不是更新一个已存在的数据,也就是说,一个时间序列数据被记录后通常就不会变了,因