本文正在参加「技能专题19期 闲谈数据库技能」活动

前言

TDengine 是一款高功用、分布式、支撑 SQL 的时序数据库

  • 学习新知识,无非便是搞懂他是什么,能处理什么痛点,该怎么快速入门

功用介绍

  • 他是一个高功用、分布式、支撑SQL的时序性数据库,这便是他的功用。
  • 除此以外他还支撑缓存、订阅、流计算功用。这么一听是不是感觉TDengine=Mysql+Redis+MQ+Stream了

TDengine 时序性数据库为什么海量数据下不卡顿呢

TDengine 时序性数据库为什么海量数据下不卡顿呢

使用场景

  • TDengine作为时序性数据库他的场景必定便是针对那种时序场景。说到时序便是对应咱们物联网设备。设备的数据上报是即时性的,在物联网体系中读少写多。其中只有读写,基本不存在删去和更新这两个操作。比方咱们的电表数据上报,只会随着时间的递加叠加式推送数据。不行能说前一分钟推送的数据他需求修正一下的。作为点表设备他也不支撑这个功用。
  • 所以TDengine的使用场景便是针对物联网,车联网,工业互联等场景。或许说是数据持续性输出的场景,比方咱们互联网体系中的日志办理。

TDengine 时序性数据库为什么海量数据下不卡顿呢

  • 现在咱们公司体系是对医院进行数据收集,从而根据收集设备的数据进行数据汇总陈述。
  • 咱们有电表丈量电流,电压,相位等数据;还有水表丈量水压,用水量等数据;还有空调收集设备丈量空调出风状况等数据;
  • 并且每一类型的设备中会针对不同地方设置多个设备别离丈量。在TDengine中每一种类型对应一张超级表(STable)。同一类型下的设备,每一个设备对应Stable下的一张独自的表。

以下表格摘自于官网

设备ID 时间戳 收集量 标签
Device ID Time Stamp current voltage phase location groupId
d1001 1538548685000 10.3 219 0.31 Beijing.Chaoyang 2
d1002 1538548684000 10.2 220 0.23 Beijing.Chaoyang 3
d1003 1538548686500 11.5 221 0.35 Beijing.Haidian 3
d1004 1538548685500 13.4 223 0.29 Beijing.Haidian 2
d1001 1538548695000 12.6 218 0.33 Beijing.Chaoyang 2
d1004 1538548696600 11.8 221 0.28 Beijing.Haidian 2
d1002 1538548696650 10.3 218 0.25 Beijing.Chaoyang 3
d1001 1538548696800 12.3 221 0.31 Beijing.Chaoyang 2
  • DeviceId对应的便是咱们实践的一个收集点的收集设备。Time Stamp是TDengine规则的必有字段。
  • currentvoltagephase别离是设备丈量的数据,表明电流,电压,相位等数据
  • locationgroupId是设备的静态特点数据,location可以表明设备出厂厂家地址,groupId可以表明分组批次。总归标签属功可以作为设备的描绘功用使用
  • TDengine为什么要这么设计呢?每一个设备对应一张表这样做的好处是每个设备的数据是连贯的且不受干扰的。
  • 别的还有一点一个设备的收集频率是固定,或许说设备收集频率是个常量值,这个在存储的一段时间就可以预测出来的。也便利咱们汇总一段时间的数据统计,TDengine也供给函数帮咱们统计一段周期INTERVAL(1s, 500a),500毫秒开端统计1S距离时间内的数据状况。

为什么设备对应表

  • TDengine中有几个关键名词【收集量】【标签】【收集点】
  • 所谓的收集点便是咱们的收集设备。在一个物理设备上可以能装备多个收集设备。这个也很好理解比方咱们的空调设备就可能有收集电的收集设备,也有收集出风的收集设备。按收集的功用区别的这些收集设备TDengine中可以理解为【收集点】
  • 上面咱们现已知道了一个收集点实践上对应一张表,这样就能保证这张表只有一个写入口,所以TDengine就不需求考虑事物的问题了。单入口功用提高很大
  • 1个收集点不一定只收集一处数据,上面的电表收集了电流,电压,相位三个数据,咱们称之为【收集量】
  • 针对收集点来说,除了收集量是随着时间的推移不断变换的特点外,还有一些针对设备的描绘的特点是不会发生变化的。这些对应TDegine中的【标签】
  • 别的因为一个设备对应一张表,数据都是时效性的,这样在写数据的时分只需求追加即可,从这个视点也能说明TDengine的写入功用会很高。
  • 和mysql按页存储相同,TDengine是按照块进行存储读取的。因为物联网的特性,咱们重视的也是一段时间内的数据。所以按块读取也可以提高咱们的命中率。比方说用电量,咱们不重视某一刻用多少点。咱们更加重视的是1天用了多少,1月用了多少。

分的那么完全,聚合怎么办?

  • 在大数据年代下,分库分表是一种趋势,现在关于分库分表的技能也在不断的迭代完善。TDengine的分表策略正好契合分库分表的需求。在结合TDengine的分布式特性。这便是一种分库分表的实践。关于分库分表咱们这儿不做赘述
  • 已然你是一种分库分表,那在查询时分需求关联时该怎么办?总不能让我join下去吧。

TDengine 时序性数据库为什么海量数据下不卡顿呢

  • 针对医院不同楼层都有独自一套收集设备。e代表电表,这个时分我想看医院一天总用电量,就需求聚合e1-e3电表丈量的所有数据。
select * from e1
union all 
select * from e2
...
  • 明显,这不是最优的方法,要知道这种代码写在程序里一旦部署了便是静态代码,如果哪天医院电表坏了更换了那么他的DeviceId就不相同了。关于咱们程序来说就丢失了新电表的查询记录了。
  • 那么该怎么处理呢? TDengine给我引出了超级表的概念。超级表是针对同一类型的设备而言的一种描绘性表结构,咱们在新添子表时也可以从模板中直接增加

TDengine 时序性数据库为什么海量数据下不卡顿呢

  • 根据模板创建表时咱们只需求填写标签数据即可
CREATE TABLE ttt USING meters TAGS ("nanjing.liuhe", 2);

装置

  • 好了,前面咱们介绍了些TDengine理论性的东西,下面咱们就来实践操作一把吧。想要可以操作前咱们还的先装置好。官网引荐的方法时Docker 。 我这儿也引荐使用Docker方法装置,可是Docker实在没啥可说的,这儿我就演示装置包方法装置吧。
  • 点我下载
sudo dpkg -i TDengine-server-2.4.0.18-Linux-x64.deb
  • 装置的时分注意了,如果是集群方法装置那么FQDN需求填写共同
sudo dpkg -r tdengine # 卸载

TDengine 时序性数据库为什么海量数据下不卡顿呢

  • 咱们重视的便是cfg目录下是关于TDengine的装备,在装置的时分需求咱们装备FQDN,如果设置了又后悔了咱们可以在cfg中找到装备。
  • 别的便是data文件夹里存储的是数据表的信息与数据。
  • TDengine是经过systemed方法发动的。关于服务的办理大致咱们需求以下指令即可
功用 指令
发动 systemctl start taosd
关停 systemctl stop taosd
重启 systemctl restart taosd
状况 systemctl status taosd
  • 服务装置好之后,咱们就可以衔接数据库了。在server装置中默许会有Client的装置。咱们只需求在装置的服务器上输入taos即可。

TDengine 时序性数据库为什么海量数据下不卡顿呢

本文正在参加「技能专题19期 闲谈数据库技能」活动