作为国产开源的时序数据库,TDengine的哪些优点吸引你? 关注者 9 被浏览

2022-03-21 00:00:00 数据 数据库 分布式 时序 开源
作者:Jeff Tao
链接:https://www.zhihu.com/question/518466998/answer/2364671782
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作为TDengine的创始人而且也是核心研发而言,我来从市场定位角度来回答一下这个问题。

在我2016年底开始启动TDengine这个项目,瞄准时序数据库这个方向的时候,市场上已经有很多时序数据库,包括InfluxDB, OpenTSDB, TimeScale, Kdb, Prometheus, RRDTool, Graphite等。而且传统行业里,还有实时数据库,有PI,iHistorian等,国产的还有一大推。那如果我再做一个,到底有什么优势?作为一个连续创业者,是必须认真思考的。我下面从几个点来做分析。

1:分布式

2016年底,包括到现在,绝大部分时序数据库不是分布式的,换句话说,不支持水平扩展。InfluxDB只有企业版支持集群,开源版还不支持集群。传统的实时数据库没有一个支持水平扩展的。但是随着物联网、车联网等的高速发展,IT基础架构规模的增大,各种数据采集量越来越大,单机是没有办法解决问题的,底层的数据库必须有水平扩展能力。

为了应对海量数据的处理,很多企业使用单机版,比如InfluxDB开源版,只好自己投入研发人力,在单机版的基础上,开发自己的Proxy, 对数据进行分片。对于数据写入,这种方法简单而且有效。但是对于查询,往往牵涉到多个节点,那么Proxy就要做各种查询的聚合,因此开发的工作量及其之大。有些公司为了避免麻烦,就选用OpenTSDB, 它是开源的而且是分布式的。

从使用的角度来看,OpenTSDB是一个相当差的产品,它底层的存储引擎用的是HBase, 安装维护极为复杂,存储的压缩也不够,查询效率也很低。但它仍然有相当大的用户量,的原因就是由于它支持分布式,可以水平线性扩展。

因此我在2016年底准备做TDengine的时候,就决定必须是分布式的。因此整个TDengine的设计从天起,就是分布式设计。而且在2020年8月,我们将分布式版本也开源了。从分布式开源后,TDengine的用户量持续增长,全球监测到的集群安装实例数已经超过10万,这是一个相当可观的数字。这证明了我们将集群开源是非常明智的决定。

2:高性能

时序数据有其特点(详细请看我写的博客:物联网、工业互联网大数据的特点 - TDengine ), 如果充分利用时序数据的特点,我们可以将性能大幅提高,数据压缩率也能大幅提高。

我之所以在2016年决定开发TDengine,其中一个核心原因是我认为InflxuDB并没有充分利用时序数据特点。如果我充分利用,就能在性能上碾压它。在我仔细研究后,我提出来”一个数据采集点一张表”的概念,让一个采集点来的数据按照时间顺序一块一块用列式存储。这样就会导致写入变成简单的追加操作,而且一个读的IO操作,就能把一个数据采集点的数据点成片读出,数据命中率一下提高很多,这样导致查询效率极其之高,而且压缩率也会极其之高。同时我提出“超级表“概念,来解决多个数据点数据高效聚合的问题。通过标签将需要聚合的数据采集点先过滤出来,大幅减小需要扫描的数据集,这样聚合速度就大幅提升。

那么性能是否不重要呢?毫无疑问极为重要,因为如果用户不关心性能,那就用普通数据库来处理时序数据就是。如果都是时序数据库,用户当然也会选择性能或效率更高的产品。因此从研发的天起,我以及整个团队一直在追求的性能。

3:SQL支持

任何一款新产品,都有进入门槛。降低门槛,好的方法就是不改变用户使用习惯。SQL是全球流行的查询语言,所有学过计算机的都会用SQL写查询语句的。

但时序数据的处理有历史,相当多的时序数据库或实时数据库都有自己的查询语言,比如InfluxDB, OpenTSDB, Prometheus等等都有自己的查询语言,这样大大增加了学习成本,而且也增加了应用的迁移成本。

采用SQL还有一个好处,就是能与众多的BI、可视化工具对接,生态一下丰富很多。如果采用自己研发的查询语言,所有工具都要对你的产品做开发,难度一下大了很多。有名的例子就是kdb, 完全是自有语法,因此虽然很多指标相当不错,但十几年过去,还是不温不火。

从TDengine研发的天起,我就决定采用SQL做查询语言,而且采用关系数据库模型,而不是InfluxDB, OpenTSDB, Prometheus等数据库的tag-set模型。根本原因就是想降低学习成本。目前看来,这个策略是极其正确的。

4:开源

作为基础软件,在开源大势所趋的情况下,不开源,而且不将核心代码开源,要赢得市场是完全不可能的,因此我们才将TDengine完全开源。开源引来了涛思数据的高速增长,这是一个完全正确的决定。

但从产品角度来看,开源是TDengine的一大优势吗?看起来是,但细想一下,其实不是。因为市场上开源的的时序数据库产品很多,大家不会由于TDengine是开源的就选择它,而是有其他特点才会选用它。

如果市场上还没有开源的时序数据库,那么开源就是TDengine大的亮点。我决定将集群开源,根本的原因是由于InfluxDB没有把集群开源。只有别人做不到或比不上你的功能或性能,那才是你需要宣传的特点。

5:其他:

TDengine还有很多其他优点,比如All in One的特性,TDengine自身带有缓存、流计算、数据订阅等功能,因此在不少场景,不再需要集成Kafak/Redis/Spark等软件,TDengine就可以作为一个大数据平台来使用,能大幅降低系统的复杂度和运维成本。

与大部分研发同学一样,我也喜欢罗列各种开发的功能和亮点。我还可以罗列很多TDengine的优点。但是作为一个连续创业者,很清楚无论是产品还是市场,必须做减法,而不是加法。因此过去的几年,我们一直仅仅强调TDengine是一个独特的物联网大数据平台,聚焦在物联网细分市场,强调的是All in One的特性,这样与其他时序数据库做出差异化来。

但TDengine开源2年多时间,大部分用户还是把我们当做时序数据库来使用,而且不仅物联网行业用户在用,金融、IT运维、电力、工业互联网等行业的用户也在用。因此经过很多思考之后,我决定将TDengine重新定位回时序数据库。

6:结论:

那么作为时序数据库,怎么与众多的时序数据库PK或差异化,我个人认为就是:集群、高性能与SQL支持。因此在我们近的网站改版时,大胆的将TDengin标为:高性能、分布式、支持SQL的时序数据库。

贪多爵不烂,而且用户没法记住你那么多特点优点,因此我们罗列至多三个。那我给TDengine就仅仅列出三大优点:集群、高性能与SQL支持。这三个特点做实做的足够好,TDengine与其他时序数据库就会有足够的差异化,我们就一定能赢得开发者的信赖,赢得市场。

来源   https://www.zhihu.com/question/518466998/answer/2364671782

相关文章