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

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

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

工业物联网大数据的特点

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

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

TDengine 的设计取舍

关系型数据库模型

上文说了采集的数据都是结构化数据,为了降低上手门槛,采用传统的关系型数据库模型管理数据。用户先创建库、表,然后才能插入或查询数据。它底层采用结构化存储,而不需要像 NoSQL这类Schemeless的key-value存储。

一个数据采集点一张表

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

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

写入高效,原因:

  1. 每个采集点独占表,所以无并发写入,所以不需要加锁
  2. 跟 Kafka 类似,先写入内存,再定期写入硬盘

读取高效,原因:

  1. 数据分块存储,读取最多两次磁盘就能拿到指定时间段数据
  2. 都是顺序读取磁盘

总的来说,TDengine是通过vnode以及时间两个维度,对大数据进行切分,便于并行高效的管理,实现水平扩展。

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

留一个小问题,既然 TDegnine 是为时序数据库而生,那它是否可以用来代替 Prometheus 呢?

欢迎关注我的微信公众账号,会在第一时间更新,博客园上只有部分文章会发布

TDengine能比Hadoop快10倍?的更多相关文章

  1. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  2. 比hive快10倍的大数据查询利器presto部署

    目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...

  3. [转帖]推荐一款比 Find 快 10 倍的搜索工具 FD

    推荐一款比 Find 快 10 倍的搜索工具 FD https://www.hi-linux.com/posts/15017.html 试了下 很好用呢. Posted by Mike on 2018 ...

  4. 比传统事务快10倍?一张图读懂阿里云全局事务服务GTS

    近日,阿里云全局事务服务GTS正式上线,为微服务架构中的分布式事务提供一站式解决方案.GTS的原理是将分布式事务与具体业务分离,在平台层面开发通用的事务中间件GTS,由事务中间件协调各服务的调用一致性 ...

  5. 搜索 比MySQL快10倍?这可能是目前AWS Aurora最详解读!

    作者介绍 朱阅岸,中国人民大学博士,现供职于腾讯云数据库团队.研究方向主要为数据库系统理论与实现.新硬件平台下的数据库系统以及TP+AP型混合系统.   编者按 Aurora作为AWS云上的关系数据库 ...

  6. 多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!

    图像标注速度提升10倍! 这是多伦多大学与英伟达联合公布的一项最新研究:Curve-GCN的应用结果. Curve-GCN是一种高效交互式图像标注方法,其性能优于Polygon-RNN++.在自动模式 ...

  7. npm ci命令比npm installer命令快2至10倍

    npm 5.7.1的发布给我们带了一系列新的功能. 其中我最喜欢的就是npm ci命令了. npm ci命令 1.npm ci命令只根据lock-file去下载node_modules. 如果你的pa ...

  8. 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上

    在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...

  9. grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

    这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...

随机推荐

  1. 【FZYZOJ】细菌 题解(最短路)

    题目描述 为了研究一种新型细菌(称它为S型细菌)的性质,Q博士将S型细菌放在了一个犹如迷宫一般的通道面前,迷宫中N个站点,每个站点之间以一种单向通道的形式连接,当然,也有可能某两个站点之间是互不联通的 ...

  2. Ajax 提交图片

    话不多说,直接上代码 页面部分 <form id="form1" enctype="multipart/form-data"> id_token: ...

  3. Iconfont的代码使用

    1.Iconfont官网 相关阅读: Iconfont-阿里巴巴矢量图标库 Iconfont-阿里巴巴矢量图标库-代码使用 2.下载代码 注意到把鼠标悬停到图标上,会出现三个按钮. 我们点击" ...

  4. 打破你的认知!Java空指针居然还能这样玩,90%人不知道…

    相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解. 本文可能有点另类,也可能会打破你对空指针的认知. 1.null.method() 空指针? 我们知 ...

  5. Linux中文解决

    中文编码问题 安装中文语言包 locale -a | grep zh 查看是否有中文语言包 local 查看是否 LC_TYPE 为空 在 /etc/profile.d/ 下创建 lc_type.sh ...

  6. SwaggerUI看烦了,IGeekFan.AspNetCore.Knife4jUI 帮你换个新皮肤

    背景 好像是上周四,看到微信群有人说java有轮子swagger-bootstrap-ui,而c#,就是找不到. 于是我一看,就说大话:"这个只是一套UI,他这个有开源地址么" 被 ...

  7. java 判断集合元素唯一的原理

    一 ArrayList的contains方法判断元素是否重复原理 ArrayList的contains方法会使用调用方法时,传入的元素的equals方法依次与集合中的旧元素 所比较,从而根据返回的布尔 ...

  8. k8s使用需认证的私服仓库

    本文内容 在K8s中使用需认证的私服仓库需要导入认证信息到集群中,常规导入方式有两种: 使用Docker已登录的仓库密文导入 使用命令行创建Secret对象导入 本文介绍的就是以上两种方法. 使用Do ...

  9. C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4005 访问. 给定两个大小为 m 和 n 的有序数组 nums1 ...

  10. C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3746 访问. 在一个给定的数组nums中,总是存在一个最大元素 ...