TDengine是一高效的时序空间大数据处理引擎,因为充分利用物联网、车联网、工业互联网等场景的数据特点并做了很多优化,因此性能上远胜通用的大数据平台。但TDengine的核心功能是时序数据库(Time-Series Database),而大数据处理平台往往还需要有消息队列、缓存、流式计算等功能,怎么能不要Redis、Kafak和Spark这些软件了呢?本文将给出详细解答。
消息队列
与互联网应用不一样的是,物联网场景中,只要指定联网设备数量,数据采集频次,系统所需要的流量是可较为准确估算出来的,流量是较为平稳的。而互联网场景中,流量不平稳,比如双11的时候,电商的流量可以几十倍的变化。同时,物联网设备都有一定的数据缓存能力,不能仅仅依靠云端的缓存来解决。因为即使整个系统都工作正常,但网络任何部分都可能出现中断,数据就无法传输,物联网设备必须有能力把数据先缓存起来,因此物联网平台对消息队列的需求没有那么强烈。而TDengine内部实现了一简单的消息队列,任何收到的消息都会写进WAL日志,只要回复确认了的消息,就一定不会丢失。同时TDengine提供订阅功能,用户可以订阅原始数据,一个数据子集、时间轴上聚合计算的结果,或是多条时间线定时聚合的结果,这样就不需要使用Kafka等类似的消息队列软件。使用TDengine,将数据写入消息队列,就是标准的SQL insert指令,订阅数据,C/C++语言的接口是:
taos_subscribe(char *host, char *user, char *pass, char *db, char *table, long time, int mseconds)
这个API里的参数是链接数据库所需要的IP地址、用户名、密码、数据库以及表的名字,但参数mseconds控制了多快返回一次数据给应用,参数time是指离现在多长时间之前的数据需要返回给应用,如果没有返回过的话。其他语言的API可以参考TDengine的用户手册。
缓存
TDengine对数据库分配了固定的内存池,新插入的数据,会先写入内存池。每个数据采集设备或是每张表,都会从内存池中分配到一个或多个数据块。对于互联网应用,需要缓存的数据往往是用户读取频次较高的数据,取决于用户行为。比如某头条文章或微博,一天之后还很有热度,需要缓存才行。而物联网数据,绝大部分情况下,刚刚采集的数据才是热数据,历史数据一般情况下都是冷数据。因此TDengine按照先进先出的原则对内存池进行管理,内存不足时,老的数据会被持久化存储,而内存里的老数据会被最新的覆盖掉。TDengine还保证了任何一台设备最后一条记录一定在内存中,如果应用要获取每个设备的最新数据或状态,都将从内存里直接获取。系统提供了一个特殊的函数SQL last_row专门用来返回最后一条记录。如果使用TDengine超级表,还可以快速返回所有设备或一组设备的最后一条记录,便于应用显示系统实时状态。比如查询所有北京的温度传感器的最新温度值,使用下面的SQL即可:
select last_row(*) from thermometers where location=’beijing’
这样的设计让系统可以不再需要Redis这类软件。
流式计算
物联网数据是一个流数据,需要实时流式计算来进行各种预警、预测或生成实时报表。基于滑动窗口,TDengine后台可定时的拉起查询计算,提供了一简化的流式计算,便于做各种实时的统计聚合操作。比如,某个温度传感器每隔10秒钟采集一次温度,但系统需要每隔1分钟计算一下刚过去的三分钟的温度平均值,TDengine里就可以使用如下SQL语句实现:
select avg(degree) from thermometer interval(3m) sliding(1m)
其中的选项interval是指滑动窗口的时间长度,sliding是指窗口多快滑动一次。这样对于一般的物联网场景,不再需要使用Spark等类型的流式计算软件。
全栈的数据处理引擎
综上所述,TDengine提供了大数据处理所需要的缓存、消息队列、流式计算等系列功能。但一个物联网、车联网大数据平台,往往还有很多业务数据需要处理。这些业务数据包括人员、设备的管理数据,交易记录等等,这些数据不是时序的,而且往往有复杂的关系查询,无法由TDengine处理,还需要使用传统的关系型数据库,比如MySQL来处理。只不过,这些业务数据的量都不大,根本不需要大数据技术来处理。
在典型的物联网、车联网场景里,采集的数据量占有整个系统的数据量的99%以上,使用TDengine,就能很好的解决整个平台的大数据问题,完全可抛弃掉Kafka、HDFS、HBase、Spark和Redis等一大堆软件,大幅简化数据平台的设计,降低研发成本大,降低运维门槛。而且系统将更加健壮,数据的一致性更有保证。
最后值得一提的是,对于私有化部署的物联网、车联网平台,因为TDengine部署简单,增加一个节点几秒搞定,无历史数据实时数据之分,数据备份恢复全部自动,相对于通用的大数据平台而言,将大幅节省现场实施和后续的维护成本。