时序数据库-InfluxDB概念详解1

InfluxDB相关概念

在influxDB中,有很多概念,例如DataBase,Measurement,point,Field等等。这些概念都是什么含义,本篇文章将会对常用的基本概念和操作做一个总结。

Database和Measurement

DataBase和Measurement都是对数据的一个归类,只不过粒度不同。这个举个例子就明白了,文件和文件夹的概念,DataBase是一个文件夹,里面存放放了很多文件,每个文件就可以理解为一个Measuremen。关于这个概念,如果了解其他关系型数据库例如MySQL的同学,这里的Database和MySQL中的Database基本是一个意思,Measurement就类似于MySQL中的表,也就是table的概念。

新建Database和Measurement

新建Database和Measurement是比较简单的,首先是新建Database,例如新建一个名字为csdn的database:

create database csdn;

新建完之后可以show一下:

show databases;

在这里插入图片描述
可以看到有csdn出现,说明新建成功了

新建measurement

新建measurement不像database那样直接create,measurement是在数据插入的时候自动新建的,例如我们在measurement名字为test插入一条数据:

insert test,name=t1 value=100

然后可以查询一下:
在这里插入图片描述
这个时候发现数据已经插入了,也说明measurement已经新建好了。

Point,Field,Tag

Point

首先什么是point?简单讲就是插入的一条数据就是一个point。这个也经常叫做DataPoint,为啥这样叫呢?因为我们的时序数据经常要被展示出来,例如存储的某只股票的价格,这个信息要经常被展示成一个曲线图。构成这个曲线图的就是一个一个的数据点,所以存储的每一条数据经常就被叫做point。

Field

那么什么叫做Field?Field这个就是你存储的信息字段。还是拿股票为例子,对于某支股票,你要存储它在某一时刻的最大值,最小值,涨幅等等。在这里面你的最大值,最小值,涨幅这三个信息,就是field。到这里我觉得应该明白啥事field了,field就是你存储的信息,每一个信息叫做一个fileld。所以结合上述的概念,一个point里面可以存储多个field,携带多个信息。例如我们存储a公司的股票在某一时刻的最大值,最小值,平均值:

insert stock mx=100,min=90,avg=80

查询一下:
在这里插入图片描述
可以看到没有问题,这里的mx,min,avg就是三个filed。

Field Key/Field Value/Field Set

上面说了什么是Field,那么什么是Field Key和Field Value呢?其实这个概念很简单,Field Key就是你这个Filed的name,比如mx,min,avg就是Field Key,就是我这个Field叫什么名字,那么Value呼之欲出了,value就是我这个Field具体是多少。那么啥事Field Set呢?Field Set就是Filed组成的集合。注意这里的Field指的是Field Key和Field Value一起。举个例子:
假设我们有一支股票在两个时刻的信息:
在这里插入图片描述

那么Field Set就是[(agv:80,min:90,mx:100),(avg:85,min:90,mx:100)]。简单讲就是把所有的Field放在一起就好了,但是这是一个集合,注意,集合!集合的意思就是没有重复,这个去重复的规则是时间不能一样。某个时间点只能有1条数据。

Tag

学习完Field之后,接下来是tag。那么什么是tag呢?tag就是标记。举个例子,我们有支两支股票,一支是公司a的,一支是公司b的。存储的信息还是最大值,最小值,平均值。例如a公司在某个时刻的数据为:

insert stocka mx=100,mn=80,avg=85

b公司为:

insert stockb mx=100,mn=80,agv=90

注意,我们这里是插入了两个measurement stocka和stockb,为啥呢?因为这两支股票的field一样,如果都插入到一个measurement里面,那你咋区分谁是a谁是b?从存储的角度来看,这两个measurement完全可以合并到一起,因为结构一模一样。为了解决这些问题,我们可以给point加上tag,也就是打上标记,标记出这个数据到底是谁的。
所以我们可以这样写:

insert stock,company=a mx=100,mn=80,avg=85
insert stock,company=b mx=100,mn=70,avg=85

这里加了一个company的tag,指明这个数据到底是a还是b。查询的时候:

select * from stock where "company"='a'

加上tag的条件即可。我想到了这里你应该明白tag的含义了,tag其实就是给数据打标记,方便寻找的。这里说了,方便寻找,那到底多方便呢?后面再讲。其实tag的含义远远不止这些。

Tag Key/Tag Value/Tag Set

这里就和Field Key,Field Value,Field Set是一样了。不再赘述。

怎么区分Tag和Field?行协议:Line Procotol

然后有的人就问了,对于一条SQL,我怎么区分什么是tag什么是field啊?比如你看下面这个:

insert payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230

这一大串tag和field到底是哪些?
先说句废话,tag其实不是你要存储的信息,只是为了方便查找的。tag才是你真正要存储的信息。
so?我怎么知道他到底想存啥?这个sql看起来什么都想存储的🦆。
好的,别着急,influxDB开发者比你还懵逼。其实在我们执行insert的时候,是要遵循协议的。这个协议,通过这个协议就可以知道那些是tag那些是field。这个协议也叫做行协议。这个协议规定了一个point到底长什么样子:

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

可以看出来,首先是measurement,你要告诉别人要把数据放到哪个measurement,然后是tag信息,注意这里的tag:

[,<tag-key>=<tag-value>...]

这个东西首先在一个大括号内,这表示条件表达式。意思是可有可无,也就说一个point可以没有tag。然后如果有,开头第一个必须要使用一个逗号和measurement隔开,这里肯定是英文半角逗号,就是编程常用的,别搞中文逗号进去。逗号之后就是tagk=tagv的模式。tagkv可以有多组,每一组使用逗号隔开。最后一组不用tag。所以如果你有三个tag,写法是这样的:

measurement,tagk1=v1,tagk2=v2,tagk3=v3

这里的第三个tag没有逗号,这里是很重要的,如果你有了,那么influxdb会认为tag没有结束,会继续往后解析tag。
接着是field,

[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...]

可以看到,field开始于tag的第一个空格,也就是最后一个tagkv和第一个field要使用空格隔开,如果没有tag,那就是measurement和第一个field使用空格隔开。然后是多组field,每一组都是fieldk=fieldv的模式,中间使用逗号分隔。
最后就是timestamp了
可以看到,timestamp和最后一个field使用的是空格分开。

行协议总结

看完整个行协议我想你对开始提出来的那个sql到底哪些事tag哪些是field有了答案。对于一个point来说,可以有measurement+tag+field+timestamp一起组成。每个组成成分之间,使用的都是空格隔开,在各个组件内部,使用的是逗号隔开。这就是influxDB的行协议。

聚合函数

聚合这个概念可能很多人不是很明白,聚合指的是把多条数据按照某种方式聚合为一条数据。比如我举个简单的例子,求最大值,求最小值,求平均值。这就是聚合。influxDB里面也提供了一些聚合函数,例如求最大值:

select max(mx) from stock

在这里插入图片描述
可以看出来这就是最大值,还有最小值,平均值等等。可以自己试一下。

总结

本文介绍了很多基本概念,例如db,measurement,tag/field 行协议,聚合等。下一章介绍一下进阶的概念,例如retention policy,shard,shard group等。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值