TDengine能比Hadoop快10倍?

之前对国产的时序大数据存储引擎 TDengine 感兴趣,因为号称比Hadoop快十倍,一直很好奇怎么实现的,所以最近抽空看了下白皮书和设计文档。

如果用一句话总结,就是 TDengine 是为特定的工业物联网领域而生,为时序数据做了针对性的优化也有一些限制,所以能比 Hadoop 快。而 Hadoop 运用于工业物联网的时序数据的场景下,也是有点不合时宜。因为它是为了Map Reduce而生,想解决的是一次写入、多次读取,需要高数据吞吐的场景。

要想理解一个产品的设计,首先要理解它所面对的场景,比如TDengine面对的是工业物联网。

工业物联网大数据的特点
工业物联网中,采集的数据都是传感器等采集设备汇报的数值型数据,比如温度、电流、电压,经纬度等。这些数据有如下特点:

数据高度结构化,数据Schema是实现能确定的。不像互联网,存储的是图片、语音、视频等非结构化数据。
数据极少有更新或删除操作。采集的目的是记录,后续会进行分析。这个跟互联网公司的系统监控数据类似,不会有更新老数据或者删除某一条数据的场景。
无需传统数据库的事务处理。不需要保证几个操作要么完成,要么失败,比如需要从A转账给B。
写多读少,写入数据都带时间戳。反之写少读多的场景类似 Hadoop/GFS。GFS论文里提到了,一份爬虫拉取的TB级别的网页数据,会被很多业务线消费。
写入流量平稳。根据设备数量和采集频次,可以预测。比如有100个设备,每30s采集一次数据,那写入最高是3000次每秒。不会像互联网的To C 流量,会受营销的影响。
用户关注的是一段时间的趋势,而不是某一特定时间点的值。用户会在时序数据上进行一些聚合运算,比如求最近10分钟内某个速度传感器上的平均速度。
数据使用特点是最近的数据最常使用。比如展示最近的10条数据,或者最近的10分钟里的最大值。
数据的查询分析一定是基于时间段和空间区域;因为产生的数据都是时序数据。
产生的数据量很大。比如有1万台设备,每个设备每30s上传一次数据,那一天产生2800万条数据。
TDengine 的设计取舍
关系型数据库模型
上文说了采集的数据都是结构化数据,为了降低上手门槛,采用传统的关系型数据库模型管理数据。用户先创建库、表,然后才能插入或查询数据。它底层采用结构化存储,而不需要像 NoSQL这类Schemeless的key-value存储。

一个数据采集点一张表
比如是智能电表采集数据,那有多少设备,就需要建多少张表。所以每个表只有一个写入者,好处是:

一张表的写入操作不会并发,不需要加锁。
写入者写入的数据是时序且单调增加的,所以可以使用追加方式写入内存,相当于顺序写入,效率自然高。类似 GFS 论文里提到的,这样就不需要HDD硬盘做随机寻址然后写入的操作了。
一个表(一个采集点)的数据在硬盘上以固定大小的块为单位连续存储。所以按时间戳读取的速度会非常快,读取都是顺序读取,对计算机缓存友好。
写入高效,原因:

每个采集点独占表,所以无并发写入,所以不需要加锁
跟 Kafka 类似,先写入内存,再定期写入硬盘
读取高效,原因:

数据分块存储,读取最多两次磁盘就能拿到指定时间段数据
都是顺序读取磁盘
总的来说,TDengine是通过vnode以及时间两个维度,对大数据进行切分,便于并行高效的管理,实现水平扩展。

TDengine CEO写的整体架构设计思路

留一个小问题,既然 TDegnine 是为时序数据库而生,那它是否可以用来代替 Prometheus 呢?
转载自https://www.cnblogs.com/Jack47/p/blazing-fast-tdengine.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值