TDenigne是一款现代的时序(Time Series Database)数据库,之前在做项目的时候都是用SQL数据库去存历史日志信息的。直到一个项目需要对设备的历史记录落库。
这是时序数据库使用的典型场景,虽然之前一直用SQL数据库,但是用过都知道,在数据量大的时候会导致分页卡顿,甚至是无法分页。
这个项目使用时序数据库再合适不过了
1 它的历史数据是不会修改的
2 设备数量多,种类单一
3 种类后期可以扩展
4 需要配合拆线图和饼图来进行运行状态的展示
当时也做了一些时序数据库的比较,毕竟现在的时序库非常多。
1 inflexdb 这个是一款开源的非常知名的时序库,非常活跃,可以说是时序数据库的标杆。DBengine里TSDB的王者。
2 dolphinedb 这是一个国产的金融级时序数据库,有免费版的,但是集群版收费,最多支持2个结点,支持windows,主要对股票,证券这种场景的支持,
3 TDenigne当时叫taosddata 一款国产的时序数据库,开源且集群版也是开源的。当时不支持windows(最近已经支持),支持多种语言的sdk,通过taosadapter也有rest接口,接入成本低。
inflexdb由于要用自己的语法,需要有一定的学习成本。
2和3都是用sql的语法去操作时序数据库,所以这2个一下就进入了考虑范围。
虽然这个项目的规模不大,但是考虑到后期接入设备的增加,扩展性还是要考虑的。
这样排除了2,选择了TDengine。后来用它带的性能工具进行了测试,1000张表,每张表2000条数据,就是200万的数据总量,在我的4核8G的虚拟机里面测试结果让我非常满意,测试完后便用TDengine进行项目开发。
因为是SQL的语法,开发的过程还是挺顺利的,利用超级表和冗余存储,解决了不同用户查看不同设备的问题。
项目上线半年多了,TDengine一直稳定运行,中间没有挂过,相当的稳定。设备没有完全到位,现在大概有20万设备数据,分布有10000多页,每页最大20条记录。现在不管点哪页,都非常的快,即使是最后一页,非常大的分页码,返回的时间也不超过1秒。这个是以前用SQL库的时候无论如何优化都肯定做不到的。目前机器的配置是2核8G,目前进场的设备也是有几百台。
它的秘诀在于分表,一个设备一张表,在数据库层面就做了性能优化。而开发人员,只需要按照模式往对应的表里面写数据就可以了。为每个新设备创建一张表,再把这些子表放到一个超级表中。这种设计为它的高性能奠定了扎实的基础。
总体来说对TDenigne还是比较满意的,听说最近出了3.0,也支持了windows.也支持云原生。我其实比较关注的是windows,云原生啥的暂时需要不是特别硬性,因为部署在docker里面也可以的。
但是也要吐糟一下,taosdb的SDK不是很好接,特别是nodejs版…希望能有些简单点的方法。rest是一个选择,但是不支持监听,还是想有纯nodejs的sk,不用再搞c++。
有人在问我现在用的什么版本,还有资源占用情况怎么样。我来截个图说明一下
这是taosd和taosadaptera的资源
加起来cpu < 10%
以下是我使用的版本以及上线时间
tdengine/tdengine:2.4.0.16 “/tini – /usr/bin/e…” 5 months ago Up 5 months
这里写的是5个月,因为中间做过一次数据迁移,从开发服务器迁移至生产器,所以是5个月,实际上线8个多月了。
后面也会继续选择TDengine作为物联网的开发时序数据库。不过最近没有打算升级到3.0的打算,下次项目可能会直接用3.0作为基础。看文档是增加了很多云原生的特性。有空也会尝试一下,最好是能支持K3S,minikube这些轻量的k8s版本,这样不管是从成本上还是从定位上,更符合边缘高性能云原生的定义。