说到TDengine3.0,我想很多搞数据库的小伙伴应该都了解过,毕竟搞时序数据库(Time Series Database)的产品并没有很多,早在3.0版本发布之前我就是有过了解的,所以这里想把我对于TDengine3.0的学习和使用经验分享出来。在当下的物联网时代中,关系型数据库越来越无法满足对时间序列数据的有效存储和处理,时序数据库的优点就显得尤为突出。
在今年八月份的TDengine大会上,涛思数据创始人陶建辉说明了打造TDengine3.0的原因以及实践思路,也提到了要让数据库走上云原生,TDengine 3.0 就正式升级成为了一款真正的云原生时序数据库。
在TDengine3.0的这样一个数据库上,第一个要素就是得采用分布式架构,但是为了更好的实现云原生,在TDengine3.0里面还引入了新的节点——计算节点Qnode,如下:
当然,新的分布式架构也是为云原生做了种种铺垫,并且实现了水平扩展:
对于海量时序数据库的处理,尤其是业务规模还在不断提升的,数据库水平扩展的重要性不言而喻。涛思数据创始人陶建辉曾提到数据库的性能问题,即理想的水平扩展能力很难实现,于是我们可以看到在这个分布式架构上也有不同的地方,那就是我们前面提到的加入了一个新的节点Qnode。
至于怎么实现水平扩展性,TDengine通过数据采集点和时间两个维度对大数据进行切分,这样既支持分片,也支持分区。TDengine3.0为获得更多的数据处理能力,只需要加入更多的数据节点即可。比如官方经过测试,可以在10亿时间线,100个数据节点的情况下,整个TDengine性能还可以得到很好的保证。具体可参考:https://www.taosdata.com/engineering/13994.html
想要很好的实现云原生,弹性便是必定会谈到的东西,它和上面的水平扩展还是有一些不同,首先得把计算和存储分离,因为我们说过3.0它新加了一个计算节点Qnode,它是专门用来做计算的,但简单查询Vnode就可以直接操作了,如果牵扯到groub by、order by等查询,就需要在Qnode上进行了,如下图所示:
可能还有一些小伙伴不知道什么是云原生,简单来说就是我们可以利用云原生的优势,对资源进行弹性处理,你要的时候就给你,不需要了就马上释放,这样就能真正的实现成本节约。
TDengine 3.0 还有一个很大的改进就是优化了流计算功能。我们知道物联网离我们已经越来越近,那么在IoT场景下就需要对数据进行进一步的处理。比如数据清洗、过滤时,要做一些实时的触发,必须使用事件驱动的流计算,经过一年多的努力,TDengine 3.0 终于升级了这一流计算功能,优化后的处理如下:
如上图我们可以看到数据源要先进入Input Queue,再进入流计算的Task,再输出到另外一个列。而且流计算还可以嵌套,一层一层形成一个数据的 pipeline。从用户使用的角度出发,TDengine 的流计算语法就是 SQL,里面做了windows 等扩展,可以在数据写入时触发,也可以在窗口结束触发。
各位小伙伴如果查看过TDengine3.0的源代码,就可以发现相较于之前TDengine的版本,3.0 是有做减法的,就比如之前TDengine的调度模块文件,就被放弃了任务优先级调度,因为时序数据库的数据是按照时间生成排序处理入库的,所以从代码来看,他的任务调度模块仅仅实现了四个功能:
- 初始化任务队列
- 加入任务
- 循环处理任务
- 销毁任务队列
对于我个人而言,TDengine是可以用到量化处理股票上面的,经过简单处理便可以做到一个股票一张表,因为本质上来说股票的交易价格和价格等都是时序数据。比如我的数据入库则是采用Python连接器直接写入到TDengine,因为我们可以通过券商的直连接口将提供的数据做一个SQL拼接,利用SQL拼接的方式,单个SQL便可写入几千行数据,将大批数据做到一次性写入到一张表中。TDengine3.0对于数据量的增加做了更好的处理,在使用起来也会更顺心应手。
而且在大型券商里面,如果我们采用MySQL或者InfluxDB数据库,就会有性能或者功能不足等问题,而TDengine3.0在性能以及稳定性上面还是下足了功夫,在看过同花顺或者其他大型券商的解决方案后,可以发现 TDengine在查询以及写入方面的性能相较于其他数据库拥有足够的优势,并且TDengine还支持横向扩展和高可用。加上开源化的加持,在时序数据的处理上,相较于其他的时序数据库,TDengine才是最佳的选择。
如果想要查看 TDengine 在量化交易场景中的具体案例,可以参考:
同花顺——https://www.taosdata.com/user-cases/3004.html
弘源泰平——https://www.taosdata.com/user-cases/3180.html
TDengine3.0对于之前的版本还是做了很多细心的优化,值得大家一起去了解和学习,也可以在其Github 社区:https://github.com/taosdata/TDengine 中贡献自己的源代码,为开源贡献自己的一份力量。