作者:蒋京辉
故事从这里开始
一、故事的开始
其实本人实际从事java开发也只有三年左右的时间,在这三年的工作时间里,应该说本人完全没有接触过时序型数据库,仅仅是听说过而已,也从来也没有去了解过。但从目前我对时序型的了解,之前我所涉及的业务场景和行业也是用不到时序型数据库,在今年5月份的时候换了一个行业,接触公司第一个项目,才开始认识了时序型数据库——influxdb,我们这边最开始项目选型的数据库是这个,本人也是后续才参与这个项目的,后面我想着去了解为啥要选用这个数据库的原因时,参与项目的同事他们给我的回复是:他们之前也是没有接触过这个时序型的数据库,这个其实也是其他同事之前涉及的业务用到了这个,所以就用了influxdb,算是别人的经验推荐,至于更深层次的选型原因也没有了解到。
紧接着,又来了一个项目,这个项目算是我全程参与的,项目类型跟之前的这个是类似的,但是技术选型发生了一些变化,最大的变化就是在选型阶段我们对时序型数据库做了更换,这个更换的建议也是项目经理提出来的,说我们这次项目用TDengine来吧,当然了这也不是说最终一定会用,说到这里就给我布置了一个任务,让我去调研了解一下看看是否能贴合我们的业务场景和使用需求。在接到这个任务之后,自己心里还是有一些紧张和纠结的,感觉压力大,因为我最终调研的结果会直接影响是否选用此数据库,选用的好坏,也决定了后续代码编程是否会遇到一些不可预知的问题,故事从这里就拉开了序幕,接到任务之后的一段时间里,每天基本上都会与涛思或多或少的打着交道。
二、了解涛思
就个人习惯而言,想要去了解一个全新的东西,第一件事就是去进入他的官网,在官网中找一下官方文档,按照官网文档的指引进行学习和了解,并进行使用。
说到一开始,当然是安装和启动涛思了,但是在最开始,自己就遇到了一个大麻烦,真是记忆犹新,印象深刻(如下图),这个问题我甚至在写笔记的时候都记录了下来,给自己留个底,有个印象。
事情的经过是这样的,自己也是按照文档一步步操作,下载涛思的安装包,当时也是在linux环境下进行安装测试的,下载好了就进行解压安装了,然后就启动涛思,输入taos命令,一切都是那么的顺利,但是在这之后,现在也想不起为啥我会重新启动,但是重新启动,就会提示启动频繁无法启动,这个问题甚至是后面我仅仅是重启了一次,都开始有这样的提示了,重点是提示了之后,这个就一直没法用了,自己当时实在是不知道该如何解决,就是官方找了哪里可以咨询问题的,就找了相关的联系方式,见下图(按顺序说明:第一个是当时遇到启动报的提示,第二个是咨询技术人员的对话,第三个是自己记录问题当时的解决办法),自己也是把自己遇到的问题以及自己有疑问的点告知了技术人员,看看技术人员有没有办法,但是实事求是的说这个问题当时并没有很好的解决,也不知道是触发了什么样的策略,导致我重新启动涛思会有这样的提示,所以当时自己对自己狠了一点,也是实在没有办法,直接重置了我自己办公电脑的虚拟机,重新安装了一下涛思,然后安装启动了之后,让虚拟机拍了个快照,防止我后面又遇到这个问题,又需要重置,花费不少的时间。
上述是当时在启动涛思时遇到的问题,第二个就是在使用涛思过程中,想通过可视化工具对数据库进行相应的操作,自己本身也是通过IDEA工具进行编程的,官网文档也提供如何利用IDEA进行可视化操作,不过我按照要求操作,很遗憾的是通过IDEA有报错信息,无法进行可视化操作这个问题怎么说呢,起码不会影响我对数据库的操作,只不过如果可视化弄好了,是可以更高效的去操作数据库,给开发人员带来了一定的便利,当然了遇到了这个问题之后,自己也是通过github平台进行了咨询,后面也是通过邮件沟通的方式对这个问题进行咨询与操作(见下图),经过一系列的沟通,最终这个问题还是比较好的解决了,第一个就是官方这边人员给了我他们的一个可视化工具,现在我们开发也是经常使用这个工具,当然了当时发的是1。0版本,也不知道现在可视化工具有没有更新,哈哈,如果更新了还请官方给我一下最新版的可视化工具,起码能更加便捷的操作数据库了,其次就是我这边后面换了一个版本的涛思(2.1.0.0),通过IDEA是没有报错了,也可以通过IDEA进行可视化操作,但是两者比较的话,还是感觉官方提供的那个工具比较好。
后面就是对涛思的一些sql语法的了解,这块遇到的问题倒不是特别的大,部分的sql语法跟我这边经常使用的mysql类似,主要是超级表和普通表的概念,需要我这边仔细的看看,最终这块的概念非常好的运用在了我们这边工业的业务场景。当然了,在了解涛思的过程中,自己也不是每一个sql我都去尝试,sql的部分都是在后面我们根据实际业务场景编写的,遇到问题的话也是及时去官网看看语法,实在不知道哪里出问题的再去找相应的技术人员去问一问。
第四个方面就是我这边本身的java和涛思相结合去使用,因为最终我们是要通过java编程和涛思数据库进行交互的,当然涛思也很完美的解决了这个问题,官网也是有springboot+mybatis结合涛思数据库和JDBC实现的demo,当然了我这边参与的项目也是通过此方式与涛思建立连接和操作的。
第五个就是性能方面的考量,这边官网也是给了我们一个创建超多数据的sql,让我们按照官网给的sql体验一下查询速度,当然了体验确实是很完美的,速度很快,其次在这么多数据之下占用的磁盘空间并不是非常的大,有利于存储更多的数据,这块的体验后面我说项目的时候再说一些实际案例。
三、 我选你
做了这么多了解之后,最终就决定是你(涛思)啦,当然是跟influxdb做一个对比之后,综合考量下来,选择了涛思!
1.超级表普通表的概念,非常的契合此次项目的业务场景,大致说一下场景,就是之前项目只有一个站点一个单元对应多个测点,现在是多站点多单元下面对面多个测点,利用超级表普通表可以做到超级表对应某个站点某个单元,下面跟着n个普通表,普通表就是此站点此单元下对应的测点,让我们业务上创建表非常的容易。
2.可以跟java很好的结合,通过JDBC连接,跟之前的操作其他类型的数据库类似,不需要学习太多就可以上手,让没有很深去了解涛思的人上手比较快,学习成本降低。
3.搭建集群的成本,首先influxdb搭建集群不是开源的,是需要收费的,对于后续实际可能用到集群带来了极大的不便,然而我们涛思搭建集群是开源的,免费的,可以降低使用集群的成本,从大的说,减少项目上的使用成本。
4.从更大的角度说,influxdb是国外的,TDengine是国内的,在整个国际开放背景下,在中国日益强大,经常可能会遇到要被国外进行技术封锁的情境,这种时候我们选用国外的数据库,就会让我们非常的被动,但是选择国内的就不一样,国人开发和维护的,遇到问题也可以实际的去通过微信/邮箱等工具去交流,不会出现刚才所述的情况,让自己处于过于被动的局面。
5.性能表现方便,从之前项目和现在项目对比来看,部分使用能感受到明显差异,此处表现放在后面的项目上来说,整体上性能是良好的。
四、 项目使用的感受
1.我们这边有一个历史数据的查看的功能然后页面展示一个历史曲线,之前使用influxdb的时候,如果你的时间段和时间间隔选择很庞大或者间隔非常细腻的时候,查询数据会非常的缓慢,其次更直接的表象就是会直接造成页面的卡死,无响应,需要重新打开相应的浏览器,但是用了涛思之后,目前使用过程暂时没有发生过这样的现象,并且查询所需要花费的时间非常非常的短,很好保证了接口的响应速度。
2.很好的与mybatis相结合,开发结合起来非常方便,我们这边也是写了非常多的工具类的方法方便去通过涛思创建表啊,获取数据等等,通过超级表和普通表让我们在创建表这块有了非常简单的设计,也能让测点之间更好的做出区分。
3.我们这边的业务场景,会涉及到对测点数据,每秒的数据新增和插入,应该说只要通讯在,这边数据是每秒都会很多条数据的新增的,当然了目前的表象看性能是OK的,但是呢毕竟项目没有在实际的工作站运行,后续这块还要看一看是否能撑得住这样的情况。
五、 故事的最后
我们这边项目已经接近尾声,项目也是会在后面的实际工地进行部署使用,实际的效果需要实践去证明.未来可能还有许多事情要做,比如是否需要搭建集群,因为目前的环境是非集群模式,后面是否要搭建集群要看后面实际的数据量等来综合考量一下.总的来说,因为选择了涛思,让我们目前项目测试很平稳的运行,在使用涛思上没有遇到特别大的瓶颈(也有可能后面会遇到),我相信在后面的使用中,能对使用上会更加深入,了解也会更加深刻,涛思与我们同在,欧耶!
六、 感谢
整个过程是酸甜苦辣的,在这里非常感谢"罗格涛思"和"小T"的技术帮助和耐心解答,也是让我在此次过程中,遇到问题不慌不忙,能够较好地去解决问题,衷心的感谢!