一, 基础操作

# 创建数据库

create database <dataname>

# 删除数据库

drop database <dataname>

# 查看数据库

show databases

# 创建用户和设置密码

create user <user> with password <password>

# 创建用户,密码,并赋予所有的权限 (需要注意的是密码必须使用引号括起来,否则会报错)

create user user with password 'admin' with all privileges

# 重设密码

set password for xxx='newpwd'

# 删除用户

drop user xxx

# 查看用户

show users

# 授权  数据库给指定用户

grant all privileges on <database> to <user>
or
grant [read,write,all] on <database_name> to <username>

# 回收

revoke all privileges from <username>
or
revoke [read,write,all] on <database_name> from <username>

# 查询权限

show grants for <username>

# 新增数据

insert <tbname>,<tags> <values> [timestamp]

# 删除一条数据

delete from students where time=1532515056470523491

# 显示直接阅读的友好方式 (InfluxDB中time默认显示为19位的ns级别的时间戳,查看不方便)

precision rfc3339

1.measurements

在influxdb中measurement相当于mysql中的表,可以理解为一条一条记录都是存与measurent中的,一个数据库中可以有多个measurement,一个measurement中可以存很多的数据。虽然可将measurement类比为mysql中的表,但是他们之间的差别也挺明显的

首先我们先了解一下measurement的几个常用命令,如何查看、新增删除

# 查看一个数据库中有哪些measurement

show measurements

# 我们也可以在不执行use databaseName的时候,进行查看;

show measurements on <measurements>

如何创建measurement?

在influxdb中没有专门用来创建measurement的命令,在执行向某个measurement新增记录的时候,如果不存在measurement,则会新创建一个, 下面是一条简单的演示:

insert userInfo,name=一灰灰blog userId=10,blog="https://www.www.com"

 # 删除 measurement

drop measurement <measurement>

measurement是没有修改操作的

 

2. tag

influxdb数据结构中记录元数据(metadata)的kv对,不要求必须存在,tag key/value 都是字符串类型,而且会建立索引,因此基于tag进行查询效率比单纯的基于field进行查询是要高的;后续的一些sql也会发现,某些查询只能基于tag.

重点提炼

  • tag key/value: 字符串类型
  • 有索引

常见的查询tag的语法如下

show tag keys on <database> from <measurement>

下面给出一个实际的例子, insert语句后面会说到,我们塞入的一条数据,指定name为tag,另外三个为field

> insert yhh,name=一灰灰 age=26,id=10,blog="http://blog.hhui.top"
> select * from yhh
name: yhh
time                age blog                 id name
----                --- ----                 -- ----
1563888301725811554 26  http://blog.hhui.top 10 一灰灰
> show tag keys from yhh
name: yhh
tagKey
------
name

 上面是获取tag keys的查询方式,下面介绍下查询tag values的使用姿势

show tag values on <database> from <measurement> with KEY [ [<operator> "<tag_key>" | <regular_expression>] | [IN ("<tag_key1>","<tag_key2")]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]

举例说明:

show tag values from bar_data with key="vt_symbol"

 

 

3. field

成员,也可以理解为一条记录中,不需要建立索引的数据,一般来说,不太会有参与查询语句建设的可以设置为field

区别与tag,field有下面几个特性

  • 类型可以为:浮点,字符串,整形
  • 没有索引

查看field key的语句如下

show field keys on <database> from <measurement>

 下面给出一个实际的例子, insert语句后面会说到,我们塞入的一条数据,指定name为tag,另外三个为field

> insert yhh,name=一灰灰 age=26,id=10,blog="http://blog.hhui.top"
> select * from yhh
name: yhh
time                age blog                 id name
----                --- ----                 -- ----
1563888301725811554 26  http://blog.hhui.top 10 一灰灰
> show tag keys from yhh
name: yhh
tagKey
------
name

4. point

https://docs.influxdata.com/influxdb/v1.7/concepts/glossary/#point

在influxdb中,你可以将一条mysql中的记录简单的理解为一个point,它由四个组件

  • measurement
  • tag set
  • field set
  • timestamp

每个point是根据 timestamp + series 来保证唯一性。

关于point可以怎么理解呢?因为influxdb是时序数据库,简单来讲就是每个数据都是时间轴上的一个点,这些数据与时间强相关,其中的tag用来检索,field用来记录一些信息,measurement用来将相同类型的数据归集

5. series

官方的说明是:

The collection of data in the InfluxDB data structure that share a measurement, tag set, and retention policy.

influxdb中measurement + tags set + retention policy 组成的数据集合

直接看定义可能有点懵逼,官方提供查看series的命令如下

show series on <database> from <measurement>

 举个实际例子:

> select * from myapp
name: myapp
time                cpu   host      load mem   qps  rt   service
----                ---   ----      ---- ---   ---  --   -------
1532597158613778583 45.23 127.0.0.1 1.21 4145m 1340 1313 app.service.index
1532597501578551929 45.23 127.0.0.1 1.21 4145m 1341 1312 app.service.index
1532597510225918132 45.23 127.0.0.1 1.21 4145m 1341 1312 app.service.about
1532597552421996033 45.23 127.0.0.2 1.21 4145m 1341 1312 app.service.about

上面四条数据,对应几个series呢 ?

根据前面的说法,tagKey + tagValue 确定给一个series (实际上是 measurement + retention policy + tags来确定),因此上表总共有三个series

  • 127.0.0.1 | app.service.index
  • 127.0.0.1 | app.service.about
  • 127.0.0.2 | app.service.about

那么这个series到底是什么东西呢?

如果将上面的数据图表化的方式显示出来,我们可以怎么办?

  • 首先我们确定好应用及其和服务名,然后查看这个服务在这台机器上,在时间线上的服务性能
  • 翻译过来就是,将cpu/service作为检索条件,以time为时间轴,将value(cpu,load,mem,qps,rt)映射到二维坐标上作为一个点(point),然后将所有的point连接成线,最终得到连续的图表

所以series就是上面的检索条件,同时point的概念也容易理解了

 

 

二, insert 添加数据

  • 在insert执行语句中,tag与tag、field与field之间用","进行分割,tag与field之间用空格分割
  • tag的value都是String类型,不需要加双引号
  • field的String类型数据,需要放在双引号中,否则会报错
  • 如果需要显示添加时间戳,在filed后添加空格,再添加时间戳

一条实际的插入数据如下: 

> insert myapp,host=127.0.0.1,service=app.service.index qps=1340,rt=1313,cpu=45.23,mem="4145m",load=1.21
> select * from myapp
name: myapp
time                cpu   host      load mem   qps  rt   service
----                ---   ----      ---- ---   ---  --   -------
1532597158613778583 45.23 127.0.0.1 1.21 4145m 1340 1313 app.service.index
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐