Skip to content

Latest commit

 

History

History
87 lines (35 loc) · 4.42 KB

1、时序数据库.md

File metadata and controls

87 lines (35 loc) · 4.42 KB

数据如同空气一样普遍。对个人来说,可能是熬夜写过的一份份报告,也可能是拍摄的一张张照片。对企业来说,数据更是成为了活跃的生产要素,推动着企业创造更大的价值。

我们正在进入万物互联的时代,虽然科幻电影中的场景也许离我们还很遥远,但其实一些应用早已成熟,比如在无人值守的高山,风机出现状况要怎么处理?如果我们在风机上布置传感器,监测数据并传到数据库,就可以实时告警了。而这,正是IoTDB,一个时序数据库的应用案例。

什么是时序数据库,为什么选择它,IoTDB有哪些特性,这是接下来要介绍的内容。

关系数据库和时序数据库

最早流行的数据库是关系数据库,它至今仍然是应用最多的数据库,比如Oracle、MySQL、SQL Server等。但应用最多,不代表它适应所有场景。

关系数据

关系数据的“关系”,并不是简单的现实世界的关系,而是数学语言,可以理解为一种集合,例如“张三”是一个集合,“人名”是一个集合,这些集合进行运算,得到的结果也是集合,称为“关系”。

关系数据库是以关系模型为基础设计的一类数据库,上面这个“关系”,用表格来表示如下:

人名
张三

一切数据都可以“装”进表里,那我们为什么还要寻找其他类型的数据库呢?答案很简单,关系数据库有它自身的缺陷,某些特殊的数据,例如时序数据,有更合适的数据库。

什么是时序数据,本质上,一切数据都可以是时序数据,毕竟哪个数据的产生不需要时间呢?当你录入“张三”这个数据时,必然是有准确的录入时间的,如果每录入一个数据,就记下这个时间点,那么这一串数据就叫时序数据。

人名 录入时间
张三 x年x月
李四 x年x月
... ...

时序数据

时序(Time Series)数据,即带着时间戳的一系列数据,通常表示被测量的物体在一段时间内的每个时间戳对应的变化。如果你炒股,那应该非常熟悉时序数据,比如每只股票每时每刻的股价,就是再典型不过的时序数据。又或者我们把历年的GDP数据汇总起来,就得到了以年为单位的时序数据。

现在你理解了关系数据库和时序数据库中数据组织的不同,好像时序数据能做的事,关系数据库也能做啊——加上“录入时间”这一列不就行了?诚然,在时序数据库出现以前,人们就是这么处理时序数据的,但随着技术的发展,数据大量增长,关系数据库力不从心了。

关系数据库的不足

关系数据库的单表列数是有限的,如MySQL一个表里最多可有1017列,单表行数也不能超过一千万行。而在物联网终端设备,这些数据轻易就能超出。如果非要用它,也不是不可以,例如人工分库分表,但这就很麻烦且增加了人力成本。

不仅是存储有上限,写入方面,高频数据千万级的写入压力也是关系数据库难以应对的难题。即使耗费大量成本写入数据了,数据是需要压缩的否则存储成本很高,关系数据库对时序数据的压缩也不理想。数据最终是要用的,关系数据库在面对简单查询的时候还好,但时序数据的应用往往需要聚合查询,例如我们想知道过去一个月里每天晚上八点到十点的气温,这在关系数据库中的查询会非常缓慢。

这些难题,正是时序数据库要解决的问题。

那在各种时序数据库中,IoTDB又如何脱颖而出呢?

时序数据库中的佼佼者

市面上时序数据库数不胜数,为什么要重复造轮子?很简单,因为性能不一样。

IoTDB数据库的诞生,最初便起源于清华大学在承担国家项目时深感已有系统的性能太差,从而重新设计数据库内核。具体的机制不赘述了,感兴趣可以点击链接阅读官方公众号文章《IoTDB核心技术剖析》:https://mp.weixin.qq.com/s/5duBCArZ1yi04j5Et_YOxA。

来看看实际的性能表现吧。

写入性能对比

img1

查询性能对比

img2

可以看到,无论在写入、原始数据查询还是聚合查询,IoTDB都遥遥领先于同类数据库。