简介
时序时空数据库(TimeSeriesSpatialTemporalDatabase,简称TSDB)是一种高性能、低成本、稳定可靠的在线时序时空数据库服务,提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务,广泛应用于物联网(IoT)设备监控系统、企业能源管理系统(EMS)、生产安全监控系统和电力检测系统等行业场景;除此以外,还提供时空场景的查询和分析的能力。
三个数据库时序时空数据库文档最近经过几次大的变动,有点乱,看的时候注意一下。
时序数据库TSDB版
经过阿里集团大规模验证的时序数据库,支持分布式集群架构水平扩展,支持千万物联网设备接入,基于自研压缩算法,具备高效压缩比。
-针对时序数据优化,包括存储模型,多值数据模型,时序数据压缩、聚合、采样,高效压缩算法,列存,边缘一体化;-具备高性能,内存优先数据处理,分布式MPPSQL并行计算,动态schema,实时流式数据计算引擎,海量时间线自适应索引;-高可扩展,数据动态分区,水平扩展,动态弹性扩容,动态升降配规格;高可靠性,自动集群控制,线程级读写分离,多层数据备份,分级存储;-瞄准的是大规模指标数据,事件数据场景
协议兼容OpenTSDB,但后面内核实现是阿里自研的。但还是完全可以把它当作OpenTSDB的阿里云版,参见相比OpenTSDB优势
InfluxDB®
不仅仅是一个数据库,更是一个监控系统,围绕采集,可视化,分析服务,事件和指标存储和计算系统;走的是tick生态,瞄准指标,事件,trace,日志,实时分析场景。
InfluxDB®刚上线不久,现在还处在公测阶段。写入速度经测试,每次500条数据,每秒可以执行26次左右,平均速度达到1万/s,增加每次写入数据条数应该还能提高速度。另外,请求地址是外网,如果使用vpc网络速度应该还会加快不少。
注意:InfluxDB在阿里云上有时间线限制(数据库级别最高1万),时间线的定义参见后面简介。
时空数据库
时空数据库能够存储、管理包括时间序列以及空间地理位置相关的数据。时空数据是一种高维数据,具有时空数据模型、时空索引和时空算子,完全兼容SQL及SQL/MM标准,支持时空数据同业务数据一体化存储、无缝衔接,易于集成使用。
时空数据库主要是空间相关的场景,比如热力图,店铺选址等等。
时序数据库简介(主要是InfluxDB)时序数据库英文全称为TimeSeriesDatabase,提供高效存取时序数据和统计分析功能的数据管理系统。主要的时序数据库包括OpenTSDB、Druid、InfluxDB以及Beringei这四个。本人主要了解一点OpenTSDB和InfluxDB,不过时序数据库有很多共性。
基本名词
measurement:
tag,field和time列的容器对InfluxDB:measurement在概念上类似于传统DB的table(表格)从原理上讲更像SQL中表的概念,这和其他很多时序数据库有些不同对其他时序DB:Measurement与Metric等同
field(数值列):
TSDBForInfluxDB®中不能没有field。注意:field是没有索引的在某种程度上,可以把field理解为k/v表的value
tag(维度列):
tag不是必须要有的字段tag是被索引的,这意味着以tag作为过滤条件的查询会更快在某种程度上,可以把field理解为k/v表的key
timestamp(时间戳):
默认使用服务器的本地时间戳时间戳是UNIX时间戳,单位:纳秒最小的有效时间戳是-9223372036854775806或1677-09-21T00:12:43.145224194Z最大的有效时间戳是9223372036854775806或2262-04-11T23:47:16.854775806Z
point(数据点):
由时间线(series)中包含的field组成。每个数据点由它的时间线和时间戳(timestamp)唯一标识您不能在同一时间线存储多个有相同时间戳的数据点
Series(时间线)
Series是InfluxDB中最重要的概念,时序数据的时间线就是:一个数据源采集的一个指标随着时间的流逝而源源不断地吐出数据这样形成的一条数据线称之为时间线。
下图中有两个数据源,每个数据源会采集两种指标:
Series由Measurement和Tags组合而成,Tags组合用来唯一标识Measurement就是说:1.Measurement不同,就是不同的时间线2.Measurement相同,Tags不同也是不同的时间线
retentionpolicy(保留策略,简称RP)
一个保留策略描述了:
1.InfluxDB保存数据的时间(DURATION)2.以及存储在集群中数据的副本数量(REPLICATION)3.指定ShardGroupDuration注:复本系数(replicationfactors)不适用于单节点实例。autogen:无限的存储时间并且复制系数设为1
RP创建语句如下:
CREATERETENTIONPOLICYONretention_policy_nameONdatabase_nameDURATIONdurationREPLICATIONn[SHARDDURATIONduration][DEFAULT]实例:CREATERETENTIONPOLICY"one_day_only"ON"water_database"DURATION1dREPLICATION1SHARDDURATION1hDEFAULT
写入时指定rp进行写入:
%如果没有指定任何RP,则使用默认的RPcurl-XPOST'http://localhost:8086/write?db=mydbrp=six_month_rollup'--data-binary'disk,host=server01value=442221834240i75692182'
ShardGroup
ShardGroup是InfluxDB中一个重要的逻辑概念:
ShardGroup会包含多个Shard,每个ShardGroup只存储指定时间段的数据不同ShardGroup对应的时间段不会重合
每个ShardGroup对应多长时间是通过RetentionPolicy中字段”SHARDDURATION”指定的:
如果没有指定,也可以通过RetentionDuration(数据过期时间)计算出来,两者的对应关系为:RetentionDurationSHARDDURATION2days1h=2daysand=6month1day6month7day
Shard:
类似于HBase中Region,Kudu中Tablet的概念1.Shard是InfluxDB的存储引擎实现,具体称之为TSM(TimeSortMergeTree)Engine负责数据的编码存储、读写服务等。TSM类似于LSM,因此Shard和HBaseRegion一样包含Cache、WAL以及DataFile等各个组件,也会有flush、compaction等这类数据操作2.ShardGroup对数据按时间进行了分区InfluxDB采用了Hash分区的方法将落到同一个ShardGroup中的数据再次进行了一次分区InfluxDB是根据hash(Series)将数据映射到不同的Shard,而非根据Measurement进行hash映射InfluxQL
行协议
格式:
measurement[,tag_key=tag_value[,tag_key=tag_value]]field_key=field_value[,field_key=field_value][timestamp]
以下是符合格式的数据写入TSDBForInfluxDB®的示例:
1.cpu,host=serverA,region=us_westvalue=0.642.payment,device=mobile,product=Notepad,method=creditbilled=33,licenses=3,symbol=AAPLbid=127.46,ask=127.484.temperature,machine=unit42,type=assemblyexternal=25,internal=3700000000
登录
//登录gt;influx-ssl-username账号名称-password密码-host网络地址-port3242//创建用户createusergordonwithpassword'1QAZ2wsx'//赋值权限grantallprivilegestogordon//创建数据库createdatabasetestdb
基本QL
1.显示度量showmeasurements3.显示数据字段的Keyshowfieldkeys
查询:
1.select*查看指定的Field和Tagselect"load1","role"from"CPU"orderbytimedesc查询指定Tag的数据,注意,Where子句的字符串值要使用“单引号”,字符串值查询Field中,load120的所有数据select*from"CPU"where"load1"20
插入:
INSERTweather,location=us-midwesttemperature=8200400200
基本运算:
#执行基本的运算select("load1"*2)+0.5from"CPU"//SELECT语句支持使用基本的数学运算符,例如,+、-、/、*和()等等。SELECTfield_key1+field_key2AS"field_key_sum"FROM"measurement_name"WHEREtimenow()-15mSELECT(key1+key2)-(key3+key4)AS"some_calculation"FROM"measurement_name"WHEREtimenow()-15m//使用聚合函数计算百分比:SELECT(sum(field_key1)/sum(field_key2))*100AS"calculated_percentage"FROM"measurement_name"WHEREtimenow()-15mGROUPBYtime(1m)
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系