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以及时间两个维度,对大数据进行切分,便于并行高效的管理,实现水平扩展。
留一个小问题,既然 TDegnine 是为时序数据库而生,那它是否可以用来代替 Prometheus 呢?
欢迎关注我的微信公众账号,会在第一时间更新,博客园上只有部分文章会发布
TDengine能比Hadoop快10倍?的更多相关文章
- Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性
Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...
- 比hive快10倍的大数据查询利器presto部署
目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...
- [转帖]推荐一款比 Find 快 10 倍的搜索工具 FD
推荐一款比 Find 快 10 倍的搜索工具 FD https://www.hi-linux.com/posts/15017.html 试了下 很好用呢. Posted by Mike on 2018 ...
- 比传统事务快10倍?一张图读懂阿里云全局事务服务GTS
近日,阿里云全局事务服务GTS正式上线,为微服务架构中的分布式事务提供一站式解决方案.GTS的原理是将分布式事务与具体业务分离,在平台层面开发通用的事务中间件GTS,由事务中间件协调各服务的调用一致性 ...
- 搜索 比MySQL快10倍?这可能是目前AWS Aurora最详解读!
作者介绍 朱阅岸,中国人民大学博士,现供职于腾讯云数据库团队.研究方向主要为数据库系统理论与实现.新硬件平台下的数据库系统以及TP+AP型混合系统. 编者按 Aurora作为AWS云上的关系数据库 ...
- 多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!
图像标注速度提升10倍! 这是多伦多大学与英伟达联合公布的一项最新研究:Curve-GCN的应用结果. Curve-GCN是一种高效交互式图像标注方法,其性能优于Polygon-RNN++.在自动模式 ...
- npm ci命令比npm installer命令快2至10倍
npm 5.7.1的发布给我们带了一系列新的功能. 其中我最喜欢的就是npm ci命令了. npm ci命令 1.npm ci命令只根据lock-file去下载node_modules. 如果你的pa ...
- 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上
在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
随机推荐
- requests入门实践02_下载斗图拉最新表情包
新版本移步:https://www.cnblogs.com/zy7y/p/13376228.html 下载斗图拉最新表情包 要爬取的目标所在网址:http://www.doutula.com/phot ...
- hibernate自动创建表报错,提示不存在
报错:ERROR: HHH000299: Could not complete schema update 或 不能执行statement等 解决方式: 根据mysql版本更改hibernate.c ...
- 用Python做一个简单的翻译工具
编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过 ...
- 用 Python 下载抖音无水印视频
说起抖音,大家或多或少应该都接触过,如果大家在上面下载过视频,一定知道我们下载的视频是带有水印的,那么我们有什么方式下载不带水印的视频呢?其实用 Python 就可以做到,下面我们来看一下. 很多人学 ...
- 蜻蜓点水说说Redis的ziplist的奥秘
本篇博客参考: Redis 深度历险:核心原理与应用实践 Redis内部数据结构详解(4)--ziplist Redis的压缩列表ZipList 上篇博客中,我给大家蜻蜓点水般的介绍了Redis中SD ...
- 2020-04-18:synchronized和reentrantLock的异同
福哥答案2020-04-19:采纳群员答案: 1 synchronized是关键字,reentrantlock是类,API层面的2 前者是通过monitor来实现锁机制,后者是基于AQS实现的,通过内 ...
- C#LeetCode刷题之#28-实现strStr()(Implement strStr())
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3895 访问. 实现 strStr() 函数. 给定一个 hays ...
- go微服务系列(三) - 服务调用(http)
1. 关于服务调用 2. 基本方式调用服务 3. 服务调用正确姿势(初步) 3.1 服务端代码 3.2 客户端调用(重要) 1. 关于服务调用 这里的服务调用,我们调用的可以是http api也可以是 ...
- Homekit_人体感应器
前置需求: 苹果手机一台 Homekit人体感应一台 USB供电线一根 这款产品内置人体红外感应器,使用圆环设计,增大了其接触面积,使感应变得更加灵敏,重量轻,方便将其粘贴到墙上,同时支持二次开发,如 ...
- LeetCode 64最小路径和
题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5 ...