为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
摘要: 近日,阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。
近日,阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。
先跟大家聊一下什么叫时序数据。简单的说,就是时间上分布的一系列数值,关键字是数值,我们一般认为的时序数据是什么时间发生了什么事情,但是在时序数据这个领域里定义的时序数据全都是跟数值有关的。也就是说,如果只是一个带有时间戳的一条数据并不能叫做时序数据。举个例子,比如像我早上8点半上楼吃了个饭这条记录,相当于一个日志,这个本身不构成一个时序数据,但是如果某个餐厅早上8点半同时有50个人在那里吃饭,这个50加上餐厅的信息再加这个时间点就构成了一个时序数据。
单值与多值建模
实际上通用的建模方式有两种,其中的一种是单值。实际上我们是针对不同的东西来建模的,多值的模型是针对数据源建模,我们每一行数据针对的是一个数据源,它的三个被测量的指标在同一列上,所以每一个数据源,数据的来源在每一个时间点上都有一行,这就是多值的模型。

还有一种模型是单值的模型,单值的模型我们是把它测量的精确到时间序列上,也就在时间序列的每个时间点上只有一个值,所以是个单值,也就是说对于多值模型来说它每一行数据对应的是一个数据源,对于单值模型来说它对应的是一个时间序列,实际上多值模型对应的是一个数据源在一个时间点上就会产生一行数据,而在单值模型里一个数据源上面的每一个指标会产生一行数据。
什么是插值和降精度?
如上前面所讲,时间序列会分布在一些时间线上,数据源和测量指标确定了的话,时间序列是随着时间轴往后分布的,实际上它的采样在一个典型的场景里是固定时间间隔的,它中间一些点做处理会牵扯到插值和降精度处理。比如说中间丢失了一个点,比较简单的方法是中间插一个值,常用的方法是线性插值,就是在时间轴上画一个直线中间的点就插出来了。

另一个叫降精度,例如我们有个按秒采样的时间序列,显示时间范围是一年的数据,为了便于查看,需要把时间精度降到一天。比如我们只选这一天中的最大值或者最小值或者平均值,作为这一天的气温,也就是最高气温,最低气温和平均气温的概念。用算法或者把时序数据转换成精度比较低的时间序列以便于观察和理解它,这是在传统数据库里没有的一种方式。

再一个就是数据聚合,也是非常典型的基于设备的数据统计,比如这里有很多设备指标数据构成的时间线,时序数据的聚合是在时间线的维度上的,而不是按点的,在处理平时处理的空间聚合的话,一般是把很多数据点按照一个个聚合起来,而实际数据处理的时候一般会把它抽象的点连成线就是刚才看的时间序列,每个数据源在一个测量值上会产生一行时间线,加上时间序列,如果是根据某一个维度上的测量的话,在同一维度就能调成线就把时间序列处理出来了。
举个例子, 智慧园区的业务系统需要查看一个楼宇的某盏灯的耗电量情况,那么就需要把这盏灯的耗电量数据从数据库中查询并展示出来,如果由于采集的故障导致某个时刻用电量数据缺失,那么需要通过特定算法来近似的估算出这个数据,这个计算补全数据的过程就是“插值”。而当需要查看这盏灯一年的耗电趋势情况时,通常只需要计算出每一天的耗电量,进行查看,而不需要把每一个时刻采集的数据全部输出出来,这个将原始精度转化为业务需求精度的过程就是“降精度”。而如果要统计某一个楼层或者楼宇的用耗电量整体趋势数据时,就需要将所有统计范围内的灯具的耗电量数据做“合并统计”,这个类似的统计过程就是Aggregation。
时序数据降精度是在时间序列维度上做的。对于关系数据库来说,首先要把时间序列维度拿出来,然后在中间插值,而实际上 SQL 是按点来操作的。所以如果要做降精度的话,需要用一个值查询把整条时间序列上的数据查询出来,插好值之后才能做时间序列之间的聚合,那么服务和 SQL 服务器之间的吞吐量非常大,相当于 SQL 只是一个数据通道需要把所有值都拉出来运算一遍,这个查询性能会非常慢,并且每一次计算都需要重新拉取数据,相对 HiTSDB,这个性就能差了几百倍,在空间聚合 Aggregator 支持也非常全面,支持 ADhoc 查询,HiTSDB 通过引入倒排索引和数据分片提升检索时间序列的效率,通过并行计算架构,整体计算性能提升非常明显。
HiTSDB高压缩技术 存储成本降低90%
物联网领域是最典型的时序数据产生和应用的场景,这些场景具备一些特征,技术数据量特别大,比如某个智能设备的温度传感器,首先第一是时间序列会持续的产生大量的数据,持续的产生什么意思呢?因为我们往往对时间序列来说是定时采样功能,如果每秒测量一次,一天是86400秒,如果24小时都要用,平均每一个传感器仪表在一个时间点上产生一个数据点,一个仪表就产生86400个数据,如果把全国各个县都布一个采样点,那一天数据就上亿了,实际上大家作为气象采样来说每一个县对应一个温度传感器显然有点不够的,可能我们是每一个街道甚至每个小区都有这样的传感器,那么这个数据加起来实际上是一个非常惊人的数字。
利用HiTSDB 的高压缩技术,相比较 OpenTSDB 提升10倍左右,通常原始时序数据的大小在 200-300 Byte,OpenTSDB 单数据点消耗约20 Byte,HiTSDB 单数据点消耗约 2Byte,通过 HiTSDB 可以节约90%以上的数据库存储成本。
对于物联网平台企业可以利用HiTSDB 和阿里云的产品能力基于如下的架构构建云上的物联网平台。

HiTSDB 除了在云上提供高效的时序数据服务能力,企业可以也可以利用HiTSDB 结合阿里云工业大脑和城市大脑的大数据方案实现智能制造生产和智慧城市。 利用HiTSDB 的“边缘+ 中心”的解决方案,可以满足工业物联网IoT尤其是电力能源行业的数据边缘端本地存储分析,逐级数据上报 ,以及网络不稳态的数据数据稳定上报和中心端的全局设备数据监控分析,打通智慧大脑的数据通道。
转载于:https://my.oschina.net/yunqi/blog/1648709
为物联网而生:高性能时间序列数据库HiTSDB商业化首发!的更多相关文章
- 时间序列数据库(TSDB)初识与选择
时间序列数据库(TSDB)初识与选择 本文作者由 MageByte 团队的 「借来方向」编写,关注公众号 给你更多硬核技术 背景 这两年互联网行业掀着一股新风,总是听着各种高大上的新名词.大数据.人工 ...
- 时间序列数据库(TSDB)初识与选择(InfluxDB、OpenTSDB、Druid、Elasticsearch对比)
背景 这两年互联网行业掀着一股新风,总是听着各种高大上的新名词.大数据.人工智能.物联网.机器学习.商业智能.智能预警啊等等. 以前的系统,做数据可视化,信息管理,流程控制.现在业务已经不仅仅满足于这 ...
- 重新定义数据库历史的时刻——时间序列数据库Schwartz认为InfluxDB最有前途,Elasticsearch也不错
转自:http://www.infoq.com/cn/news/2017/04/redefine-database-history 提起VividCortex公司的创建者兼CEO Baron Schw ...
- [转帖]时间序列数据库 (TSDB)
时间序列数据库 (TSDB) https://www.jianshu.com/p/31afb8492eff 0.3392019.01.28 10:51:33字数 5598阅读 4030 背景 2017 ...
- Android高性能ORM数据库DBFlow入门
DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...
- Akumuli时间序列数据库——列存储,LSM,MVCC
Features Column-oriented time-series database. Log-structured append-only B+tree with multiversion c ...
- OpenTSDB介绍——基于Hbase的分布式的,可伸缩的时间序列数据库,而Hbase本质是列存储
原文链接:http://www.jianshu.com/p/0bafd0168647 OpenTSDB介绍 1.1.OpenTSDB是什么?主要用途是什么? 官方文档这样描述:OpenTSDB is ...
- 时间序列数据库选型——本质是列存储,B-tree索引,抑或是搜索引擎中的倒排索引
时间序列数据库最多,使用也最广泛.一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这 ...
- 时间序列数据库武斗大会之 KairosDB 篇
[编者按] 刘斌,OneAPM后端研发工程师,拥有10多年编程经验,参与过大型金融.通信以及Android手机操作系的开发,熟悉Linux及后台开发技术.曾参与翻译过<第一本Docker书> ...
随机推荐
- C++类的成员初始化
C++类的成员初始化 学到一个类的成员初始化,目前已知的用途是给类内部的const类型变量进行赋值. 首先,如果像这么干,编译器会报错. class MyClass{ public: Myclass( ...
- php--理解PHP的依赖注入和laravel的服务容器
写在前面 为了了解laravel的服务容器在网上搜了许多文章,其中大多数都有其侧重点,没有很系统的一套东西以供参考,看完之后仍觉似乎少了一根把他们串起来的绳子,近期有幸拜读了陈昊的<Larave ...
- 使用ping命令探测系统
什么是ping命令 ping命令是测试网络连接.信息发送和接收状况的实用型工具,是系统内置的探测性工具.它的原理是:每台网络上的主机都有唯一确定的IP地址,用户给目标IP发送一个数据报,对方就要返回一 ...
- 使用tap、Fragment等相关相关知识点。实现类似微信的界面
实验结果,可以实现通过左右活动来切换不同的界面.也可以通过点击不同的下方按钮来实现切换不同的界面. 自己也添加了相关的自己编写的小页面来展示相关的效果.主要的是对于碎片Fragment对于tap的相关 ...
- Python 1基础语法三(变量和标识符的区别)
一.字面量: 就是一个一个的值,如1.2.3.‘world’,就是它自己本身表达的字面值.字面意思,在程序中可以直接使用. 二.变量(variable): 可以用来保存字面量,变量本身没有任何意思:如 ...
- ThinkPHP中的行为扩展和插件详解
原理分析 将标签与类之间的对应关系(如'app_init'=>array('Common\Behavior\InitHook')),通过Hook类中import或add方法,加载到Hook类中静 ...
- Git 常见问题 冲突原因分析及解决方案
仅结合本人使用场景,方法可能不是最优的 1. 忽略本地修改,强制拉取远程到本地 主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉 git fetch --a ...
- 关于node中两个模块相互引用却不会死循环的问题
关于node中两个模块相互引用却不会死循环的问题 node中是通过require来导入加载模块的,require有两个作用: 1.加载文件模块并执行里面的代码 2.拿到被加载文件模块导出的接口对象 现 ...
- 【Java】从Null开始,在Windows上下载和安装JDK
下载部分: 方式一: 从官方网站上下载:https://www.oracle.com/java/technologies/javase-downloads.html Oracle已经更新了软件政策,要 ...
- PHP代码审计(初级篇)
一.常见的PHP框架 1.zendframwork: (ZF)是Zend公司推出的一套PHP开发框架 功能非常的强大,是一个重量级的框架,ZF 用 100%面向对象编码实现. ZF 的组件结构独一无二 ...
