时序数据库扫盲-_第1页
时序数据库扫盲-_第2页
时序数据库扫盲-_第3页
时序数据库扫盲-_第4页
时序数据库扫盲-_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

时序数据库

内容什么是时序数据、时序数据库时序数据库的分类时序数据库应用场景时序数据库的特点时序数据库InfluxDB、Prometheus、OpenTSDB存储引擎介绍

为什么时序数据库插入快为什么时序数据库查询比较快InfluxDB安装使用什么是时序数据数据格式里包含timestamp字段的数据。比如股票市场的价格,环境中的温度,主机的CPU使用率等。如何去查询它。在查询的时候,对于时间序列我们总是会带上一个时间范围去过滤数据。同时查询的结果里也总是会包含timestamp字段。有什么数据是不包含timestamp的呢?几乎所有的数据都可以打上一个timestamp字段对比传统数据库仅仅记录了数据的当前值,时序数据库则记录了所有的历史数据。同时时序数据的查询也总是会带上时间作为过滤条件。什么是时序数据库时序时空数据库(TimeSeries&SpatialTemporalDatabase,简称TSDB)是一种高性能、低成本、稳定可靠的在线时序时空数据库服务,提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务,广泛应用于物联网(IoT)设备监控系统、企业能源管理系统(EMS)、生产安全监控系统和电力检测系统等行业场景;除此以外,还提供时空场景的查询和分析的能力。TSDB具备秒级写入百万级时序数据的性能,提供高压缩比低成本存储、预降采样、插值、多维聚合计算、可视化查询结果等功能,解决由设备采集点数量巨大、数据采集频率高造成的存储成本高、写入和查询分析效率低的问题。。按照底层技术分类

一般数据量:1、直接基于文件的简单存储:RRDTool,GraphiteWhisper。这类工具附属于监控告警工具,底层没有一个正规的数据库引擎。只是简单的有一个二进制的文件结构。2、基于K/V数据库构建:opentsdb(基于hbase),blueflood,kairosDB(基于cassandra),influxdb,prometheus(基于leveldb)3、基于关系型数据库构建:mysql,postgresql都可以用来保存时间序列数据超大数据量(从十亿条里取百万记录出来上面的数据库是无法完成的):(要完成实时聚合就不是一个产品可以完成的)检索:基于Lucene构建的“搜索引擎”:Elasticsearch,Crate.io(虽然是基于Elasticsearch,但是聚合逻辑是自己实现的),Solr;加载:列式存储数据库:Vertica(C-store的后裔)Actian(Monetdb的后裔)等;Druid.io。分布式计算Hadoop和spark。一般数据量的的查询特点类型一:其表结构是这样的:[metric_name][timestamp][value]其优化的查询方式是:

SELECTvalueFROMmetricWHEREmetric_name=”A”ANDtimestamp>=BANDtimestamp<C

超大数据量的的查询特点另外一类数据库其表结构是:[timestamp][d1][d2]..[dn][v1][v2]..[vn]其优化的查询方式不限于查询原始数据,而是可以组合查询条件并且做聚合计算,比如:SELECTd2,sum(v1)/sum(v2)FROMmetricWHEREd1=“A”ANDtimestamp>=BANDtimestamp<CGROUPBYd2实时聚合需要的能力想要在在查询阶段做数据的聚合和转换,需要能够支持以下三点。1、用索引检索出行号:能够从上亿条数据中快速过滤出几百万的数据。2、从主存储按行号加载:能够快速加载这过滤出的几百万条数据到内存里。3、分布式计算:能够把这些数据按照GROUPBY和SELECT的要求计算出最终的结果集。

时序数据高效读写

TSDB提供时序数据的高效读写。对于百万数据点的读取,响应时间小于5秒,且最高可以支撑每秒千万数据点的写入。

数据写入

TSDB支持通过HTTP协议和TSDBJavaClient两种方式进行数据写入。

数据查询

TSDB支持通过HTTP协议、TSDBJavaClient以及TSDB控制台三种方式进行数据的查询操作。用户也可以通过TSDB产品控制台的数据查询功能进行数据分组、降采样、空间聚合的可视化数据查询展现。

数据管理

数据时效设置

您可以通过控制台或者API设置数据的有效期。数据时效开启并设置完成后,系统对于定义的过期数据将立即标记失效,并在特定时间进行自动化清理。

数据清理

您可以在控制台上根据度量(Metric)进行数据清理,或者通过API进行更灵活的数据清理。

高效压缩存储

TSDB使用高效的数据压缩技术,将单个数据点的平均使用存储空间降为1~2个字节,可以降低90%存储使用空间,同时加快数据写入的速度。

时序数据计算能力

TSDB提供专业全面的时序数据计算函数,支持降采样、数据插值和空间聚合计算,能满足各种复杂的业务数据查询场景。

监控运维

TSDB提供实例运维系统,让您可以实时的掌握实例的运行情况、性能指标和存储空间使用情况,并通过设置报警通道,实时发现资源瓶颈。时序数据库的特点应用场景物联网设备监控分析电力化工及工业制造监控分析物联网设备无时无刻不在产生海量的设备状态数据和业务消息数据,这些数据有助于进行设备监控、业务分析预测和故障诊断。设备将原始数据通过MQTT协议发送到物联网套件,经由物联网套件将数据转发到消息服务系统,继而通过流计算系统对这些数据进行实时计算处理后写入到TSDB中存储,或者经由物联网套件直接将原始数据写入TSDB中存储。前端的监控系统和大数据处理系统会利用TSDB的数据查询和计算分析能力进行业务监控和分析结果的实时展现。系统运维和业务实时监控

通过对大规模应用集群和机房设备的监控,实时关注设备运行状态、资源利用率和业务趋势,实现数据化运营和自动化开发运维。

通过日志或者其他方式对原始指标数据进行采集和实时计算,最后将实时计算的结果数据存储到TSDB,实现监控和分析的展现。应用场景InfluxDBInfluxDB®是一款专门处理高写入和查询负载的时序数据库,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、应用指标和IoT传感器上的数据。主要特点InfluxDB®是帮助您处理时序数据的一个绝佳选择,目前有以下特点:专为时间序列数据量身订造高性能数据存储。TSM引擎提供数据高速读写和压缩等功能。简单高效的HTTPAPI写入和查询接口。针对时序数据,量身订造类似SQL的查询语言,轻松查询聚合数据。允许对tag建索引,实现快速有效的查询。数据保留策略(Retentionpolicies)能够有效地使旧数据自动失效。InfluxDB®isatrademarkregisteredbyInfluxDataInc.whichisnotaffiliatedwith,anddoesnotendorse,TSDBforInfluxDB®.OpenTSDB数据模型hbase表结构hbase写入系统如何找到某个rowkey(或者某个rowkeyrange)所在的regionbigtable使用三层类似B+树的结构来保存region位置。第一层是保存zookeeper里面的文件,它持有rootregion的位置。第二层rootregion是.META.表的第一个region其中保存了.META.z表其它region的位置。通过rootregion,我们就可以访问.META.表的数据。.META.是第三层,它是一个特殊的表,保存了hbase中所有数据表的region位置信息。hbase寻址Prometheus

Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统,由工作在SoundCloud的Google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布。2016年,Prometheus正式加入CloudNativeComputingFoundation,成为受欢迎度仅次于Kubernetes的项目。作为新一代的监控框架,Prometheus具有以下特点:强大的多维度数据模型:i.时间序列数据通过指标(metric)名和键值对(key/valuepairs)来识别。ii.所有的指标(metric)都可以设置任意的多维标签(label)。iii.数据模型更随意,不需要刻意设置为以点分隔的字符串。iv.可以对数据模型进行聚合,切割和切片操作。v.支持双精度浮点类型,标签可以设为全unicode。灵活而强大的查询语言PromQL,在同一个查询语句,可以对多个指标(metrics)进行乘法、加法、连接、取分数位等操作。使用拉取(pull)模式采集时间序列数据,避免有问题的服务器推送有问题的指标(metrics)。可以兼容采用推送(push)模式,利用Pushgateway把时间序列数据推送至Prometheus服务。可以通过服务发现或者静态配置去获取监控的目标(targets)。有多种可视化图形界面。Prometheus

metric名字:该名字应该具有语义,一般用于表示metric的功能,例如:http_requests_total,表示http请求的总数。其中,metric名字由ASCII字符,数字,下划线,以及冒号组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。标签:使同一个时间序列有了不同维度的识别。例如http_requests_total{method="Get"}表示所有http请求中的Get请求。当method="post"时,则为新的一个metric。标签中的键由ASCII字符,数字,以及下划线组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。样本:实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳。格式:<metricname>{<labelname>=<labelvalue>,…},例如:http_requests_total{method="POST",endpoint="/api/tracks"}。Prometheus

OpenTSDB的数据模型几乎与普罗米修斯相同:时间序列由一组任意键值对(OpenTSDB标签是Prometheus标签)标识。度量标准的所有数据都存储在一起,从而限制了度量标准的基数。但是有一些细微差别:Prometheus允许标签值中的任意字符,而OpenTSDB则更具限制性。OpenTSDB还缺少完整的查询语言,只允许通过其API进行简单的聚合和数学运算。存储OpenTSDB的存储是在Hadoop和HBase之上实现的。这意味着可以轻松地水平扩展OpenTSDB,但您必须接受从一开始就运行Hadoop/HBase集群的整体复杂性。Prometheus最初可以更简单地运行,但是一旦超过单个节点的容量就需要显式分片。与Prometheus一样,InfluxDB数据模型将键值对作为标签,称为标签。此外,InfluxDB还有第二级标签称为字段,其使用范围更为有限。InfluxDB支持高达纳秒分辨率的时间戳,以及float64,int64,bool和字符串数据类型。相比之下,Prometheus支持float64数据类型,对字符串和毫秒分辨率时间戳的支持有限。InfluxDB使用日志结构合并树的变体进行存储,其中包含按时间分片的预写日志。这比事件记录更适合于每个时间序列方法的Prometheus附加文件。几种时序数据库的对比

时序数据库为什么插入快

LSMtree包括内存里的数据结构和磁盘上的文件两部分。分别对应Hbase里的MemStore和HLog;对应Cassandra里的MemTable和sstable。LSMtree操作流程如下:1.数据写入和更新时首先写入位于内存里的数据结构。为了避免数据丢失也会先写到WAL文件中。2.内存里的数据结构会定时或者达到固定大小会刷到磁盘。这些磁盘上的文件不会被修改。3.随着磁盘上积累的文件越来越多,会定时的进行合并操作,消除冗余数据,减少文件数量。可以看到LSMtree核心思想就是通过内存写和后续磁盘的顺序写入获得更高的写入性能,避免了随机写入。但同时也牺牲了读取性能,因为同一个key的值可能存在于多个HFile中。为了获取更好的读取性能,可以通过bloomfilter和compaction得到,这里限于篇幅就不详细展开。时序数据库面向的是海量数据的写入存储读取,单机是无法解决问题的。所以需要采用多机存储,也就是分布式存储。用多机存储,也就是分布式存储。时序数据库为什么查询快关系型数据库的查询策略

Btreebittreescanindex

数据超过了一定量就不使用索引扫描了,因为大量的随机读会把磁盘搞死的opentsdbinfluxdb后台分布式比关系型数据库处理更多的数据

b+Tree索引,。lucence

反向索引二级索引(btree+bittree)跳跃表让主存储的随机读操作变得很快,从而可以充分利用索引,而不用惧怕从主存储里随机读加载几百万行带来的代价关键词文章号[出现频率]出现位置guangzhou1[2]3,6he2[1]1i1[1]4live1[2]2,5,2[1]2shanghai2[1]3tom1[1]1Lucene的invertedindex可以比mysql的b-tree检索更快。

在Mysql中给两个字段独立建立的索引无法联合起来使用,必须对联合查询的场景建立复合索引。而lucene可以任何AND或者OR组合使用索引进行检索。

Elasticsearch支持nesteddocument,可以把一批数据点嵌套存储为一个documentblock,减少需要索引的文档数。

Opentsdb不支持二级索引,只有一个基于hbaserowkey的主索引,可以按行的排序顺序scan。这使得Opentsdb的tag实现从检索效率上来说很慢。

Mysql如果经过索引过滤之后仍然要加载很多行的话,出于效率考虑queryplanner经常会选择进行全表扫描。所以Mysql的存储时间序列的最佳实践是不使用二级索引,只使用clusteredindex扫描主表。类似于Opentsdb。

influxdb的部署模式独立模式:独立的服务器,可以通过REST

API、或基于语言的驱动等访问分布式模式:企业版下载和安装linux版本传统数据库Infuxdb数据库database表measurement记录pointPoint属性传统数据库中的概念time每个数据记录时间,是数据库中的主索引(会自动生成)fields各种记录值(没有索引的属性)也就是记录的值:温度,湿度tags各种有索引的属性:地区,海拔可以将度量看作SQL表,其中主索引总是time。

标签和字段实际上是表中的列。

标签是索引的,而字段不是。

不同之处在于,使用fuluxdb数据库,您可以有数百万个度量,您不必预先定义模式,并且不存储空值。<measurement>[,<tag-key>=<tag-value>...]<field-key>=<field-value>[,<field2-key>=<field2-value>...][unix-nano-timestamp]CREATERETENTIONPOLICY<retention_policy_name>ON<database_name>DURATION<duration>REPLICATION<n>[SHARDDURATION<duration>][DEFAULT]DURATION保存时间REPLICATION复制数量(集群)SHARDDURATION每个分片持续的时间(时间段内所有Point保存在该分片中),SHARD为InfuxDB存储单元如果未指定该值,将按照如下规则创建:从单机版本中可以一窥其存储方案:在单机上InfluxDB采取类似于LSMtree的存储结构TSM;而分片的方案InfluxDB先通过<database>+<timestamp>(事实上还要加上retentionPolicy)确定ShardGroup,再通过<metric>+<tags>的hashcode确定到具体的Shard。这里timestamp默认情况下是7天对齐,也就是说7天的时序数据会在一个Shard中。RetentionPolicy’sDURATIONShardGroupDuration<2days1hour>=2daysand<=6months1day>6months7days安装启动[root@smdw~]#influx-precisionrfc3339Connectedtohttp://localhost:8086version1.7.7InfluxDBshellversion:1.7.7>usemydbUsingdatabasemydb>INSERTcpu,host=serverA,region=us_westvalue=0.64>select*fromcpuname:cputimehostregionvalue-------------------2019-07-20T02:57:30.901438336ZserverAus_west0.64>INSERTtemperature,machine=unit42,type=assemblyexternal=25,internal=37>select*fromtemperature;name:temperaturetimeexternalinternalmachinetype-------------------------------2019-07-20T02:58:01.623299345Z2537unit42assembly客户端访问方式>SELECT"passengers","complaints"FROMbus_data

name:bus_data

--------------

timepassengerscomplaints

2016-08-28T07:00:00Z59

2016-08-28T07:15:00Z89

2016-08-28T07:30:00Z89

2016-08-28T07:45:00Z79

2016-08-28T08:00:00Z89

2016-08-28T08:15:00Z157

2016-08-28T08:30:00Z157

2016-08-28T08:45:00Z177

2016-08-28T09:00:00Z207

##执行按每1小时保存

>CREATECONTINUOUSQUERY"cq_basic"ON"transportation"\

BEGIN\

SELECT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论