InfluxDB学习(二):InfluxDB数据库、database、measurement、tag、field等基本操作

摘要:
输入指定的数据库˃usedatabase_名称三。测量(表格)操作1。将数据插入InfluxDB数据库中指定的度量值(表)时,遵循以下语法格式:[,=…]=[,=…][unix-nanotimeamps]。将数据插入度量值(表)时,不需要预先创建度量值,InluxDB将自动创建它。“<field key>=<field value>…”中的字段也是一个或多个键值对。类似地,字段的键可以理解为列名,字段的值可以理解为该列的对应值。与标记不同,索引不用于条件查询的字段字段中。当数据量较大时,字段字段用作where子句中的过滤条件,这将导致性能瓶颈。

一. InfluxDB命令介绍

InfluxDB安装完成后,在安装目录的usr/bin下包含InfluxDB的日常使用和管理的二进制文件

$ ls -lh usr/bin/
total 164M
-rwxr-xr-x 1 tnuser dba 51M Apr 12 15:56 influx
-rwxr-xr-x 1 tnuser dba 63M Apr 12 15:56 influxd
-rwxr-xr-x 1 tnuser dba 19M Apr 12 15:56 influx_inspect
-rwxr-xr-x 1 tnuser dba 12M Apr 12 15:56 influx_stress
-rwxr-xr-x 1 tnuser dba 21M Apr 12 15:56 influx_tsm

 influx:客户端命令行工具

influxd:服务启动脚本

influx_inspect:数据导出、TSM、Series文件操作等

influx_stress:数据库压力测试

influx_tsm:数据库格式转换工具,用户将b1 or bz1 format 转化为 tsm1格式

二. 数据库操作

使用influx客户端命令时,建议加上"-precision rfc3339"参数,这样交互界面返回的时间将不再是timestamp,而是符合rfc339时间格式的时间戳"YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)"

新建数据库

> create database database_name

 查看数据库

> show databases
name: databases
name
----
_internal

注意:“_internal”数据库为InfluxDB内部存放元数据的数据库。

进入指定数据库

> use database_name

三. measurement(表)操作

1. InfluxDB语法

向InfluxDB数据库中指定的measurement(表)中插入数据时遵循以下语法格式

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

其中,向measurement(表)中插入数据时并不需要预先创建measurement,InfluxDB会自动创建。

"<tag-key>=<tag-value>..."中的tag为一个或者多个键值对,tag的键可以理解为列名而tag的值可以理解为这个列对应的值,这个tag标签的键和值在查询时可以通过SQL的where条件进行过滤,并且是可以进行索引的。

"<field-key>=<field-value>..."中的field也是一个或者多个键值对,同样,field的键可以理解为列名而field的值可以理解为这个列对应的值,与tag不同的是,field字段where条件查询时不走索引,在数据量较大的时候再where子句中将field字段作为过滤条件,会引起性能瓶颈。

"unix-nano-timestamp"时间戳是可选的,如果向measurement中插入数据时不指定timestamp,InfluxDB会将本地系统时间作为timestamp插入到数据库中。

根据以上描述,可以这样定义:根据筛选条件查询出来的数据可以作为field字段,而所有的筛选条件作为tag字段,因为tag可以作为where的条件过滤来筛选出你要的查询的值(field字段)

2. 向InfluxDB插入数据

举例说明:

现在要统计aws的ec2三台服务器的资源使用率,包括cpu使用率、mem使用率,disk使用率等指标

我们向InfluxDB插入以下数据

insert cpu,dc=us-west-2,server=ec2-dcas-address-db-01 user=5.2,system=1.0,idle=90.7,wait=3.1
insert cpu,dc=us-west-2,server=ec2-dcsindexsvc-01 user=11.1,system=15.9,idle=73.0,wait=4.0
insert cpu,dc=us-west-2,server=ec2-autodenalicontentpoi-01 user=3.1,system=8.6,idle=85.5,wait=2.0
insert memory,dc=us-west-2,server=ec2-dcas-address-db-01 total=8009556,free=1429412,used=278416
insert memory,dc=us-west-2,server=ec2-dcsindexsvc-01 total=32394732,free=482728,used=10256020
insert memory,dc=us-west-2,server=ec2-autodenalicontentpoi-01 total=31960732,free=16169728,used=421492
insert disk,dc=us-west-2,server=ec2-dcas-address-db-01,device=nvme0n1p1,path=/,fstype=xfs total=10474240,used=4657264,free=5816976,used_percent=45
insert disk,dc=us-west-2,server=ec2-dcas-address-db-01,device=nvme1n1,path=/data/01,fstype=xfs total=3144448000,used=1706236084,free=1438211916,used_percent=55
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=xvda1,path=/,fstype=ext4 total=10189112,used=6806312,free=2858564,used_percent=71
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=xvdb1,path=/data/01,fstype=ext4 total=206290964,used=88052144,free=107753200,used_percent=45
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme0n1p1,path=/,fstype=xfs total=10474240,used=7232364,free=3241876,used_percent=70
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme1n1p1,path=/data/02,fstype=ext4 total=515927296,used=236115064,free=253581500,used_percent=49
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme2n1p1,path=/data/backup,fstype=ext4 total=206291944,used=61476,free=195728376,used_percent=1
insert disk,dc=us-west-2,server=ec2-dcsindexsvc-01,device=nvme4n1p1,path=/data/01,fstype=ext4 total=103079864,used=78398680,free=19421972,used_percent=81

以上命令执行完成后,会在当前数据库下新建三张measurement(表),查看当前数据库中的measurement,可以看到我们当前有cpu、disk、memory三张measurement(表)

> show measurements
name: measurements
name
----
cpu
disk
memory

我们向三张measurement插入了不少数据,如何判断每个字段是field或者是tag呢,例如存放cpu的measurement,我们插入的数据时就可以判断,dc和server即为tag的键,而user、system、idle、wait为field,也可通过如下命令查看一个measurement中的tag和field字段

> show tag keys from disk
name: disk
tagKey
------
dc
device
fstype
path
server
> show field keys from disk
name: disk
fieldKey     fieldType
--------     ---------
free         float
total        float
used         float
used_percent float

3. 从Influxdb查询数据

1. 从名称为disk的measurement中查询所有的数据

> select * from "disk"
name: disk
time                           dc        device    free       fstype path         server                      total      used       used_percent
----                           --        ------    ----       ------ ----         ------                      -----      ----       ------------
2020-04-19T15:16:40.866657083Z us-west-2 nvme0n1p1 5816976    xfs    /            ec2-dcas-address-db-01      10474240   4657264    45
2020-04-19T15:16:40.910642698Z us-west-2 nvme1n1   1438211916 xfs    /data/01     ec2-dcas-address-db-01      3144448000 1706236084 55
2020-04-19T15:16:40.930617525Z us-west-2 xvda1     2858564    ext4   /            ec2-autodenalicontentpoi-01 10189112   6806312    71
2020-04-19T15:16:40.950442939Z us-west-2 xvdb1     107753200  ext4   /data/01     ec2-autodenalicontentpoi-01 206290964  88052144   45
2020-04-19T15:16:40.970310916Z us-west-2 nvme0n1p1 3241876    xfs    /            ec2-dcsindexsvc-01          10474240   7232364    70
2020-04-19T15:16:40.99050202Z  us-west-2 nvme1n1p1 253581500  ext4   /data/02     ec2-dcsindexsvc-01          515927296  236115064  49
2020-04-19T15:16:41.010722937Z us-west-2 nvme2n1p1 195728376  ext4   /data/backup ec2-dcsindexsvc-01          206291944  61476      1
2020-04-19T15:16:41.660406121Z us-west-2 nvme4n1p1 19421972   ext4   /data/01     ec2-dcsindexsvc-01          103079864  78398680   81

2.根据过滤条件查询数据

查询server名称为"ec2-dcsindexsvc-01"的磁盘总大小

> select "device", "path", "total" from "disk" where "server" = 'ec2-dcsindexsvc-01'
name: disk
time                           device    path         total
----                           ------    ----         -----
2020-04-19T15:16:40.970310916Z nvme0n1p1 /            10474240
2020-04-19T15:16:40.99050202Z  nvme1n1p1 /data/02     515927296
2020-04-19T15:16:41.010722937Z nvme2n1p1 /data/backup 206291944
2020-04-19T15:16:41.660406121Z nvme4n1p1 /data/01     103079864

这里需要注意的是:

  1. "device"、"path"为tag,实际执行中应该将tag作为where子句的字段,而不能将field作为where子句的字段,因为field不能索引。
  2. 在查询语句中,tag、field键名需要用双引号引起来,而将键值用单引号引起来,否则查询的数据为空,或者报错"ERR: error parsing query: found ******, expected identifier, string, number, bool at ******"

3. 根据聚合函数查询

分别查询disk中field total字段求和、最大值、平均值、最小值、时间戳最早的值、时间戳最近的值

> select sum("total"), max("total"), mean("total"), min("total"), first("total"), last("total") from disk
name: disk
time                 sum        max        mean        min      first    last
----                 ---        ---        ----        ---      -----    ----
1970-01-01T00:00:00Z 4207175660 3144448000 525896957.5 10189112 10474240 103079864

免责声明:文章转载自《InfluxDB学习(二):InfluxDB数据库、database、measurement、tag、field等基本操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VScode调试ros代码Table显示滚动条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kettle连接DM7(达梦7)数据库

0.需求背景 应项目国产化适配需要,后续需要将数据迁移至DM7数据库中,调研kettle连接DM7 1.kettle连接DM7的相关操作 1.1 DM7驱动安装 kettle连接DM7,本质上是通过JDBC连接,因而需要将DM7的JDBC驱动放到${kettle_home}lib目录中。DM7的JDBC驱动可以到DM7的安装目录中${dm_home}dri...

cloudera目录位置

http://www.aboutyun.com/thread-9189-1-1.html 这里来的嘿嘿。 1. 相关目录/var/log/cloudera-scm-installer : 安装日志目录。/var/log/* : 相关日志文件(相关服务的及CM的)。/usr/share/cmf/ : 程序安装目录。/usr/lib64/cmf/ : Age...

MongoDB 不断发展:发布 1.4 版本,10gen 提供商业支持

3 月25日 MongoDB(取自“humongous”)1.4 版发布 后不久,其创始人Dwight Merriman(前DoubleClick CEO/CTO)宣布10gen —— 开源文档数据库MongoDB背后的公司,将为其提供商业培训和支持。 InfoQ借此机会采访了Merriman,了解了MongoDB的特性、适用性以及在NoSQL数据库社区中...

在Linux上使用mssql-conf工具配置SQL Server 2017

mssql-conf是在Linux上安装SQL Server 2017后的一个配置脚本。你可以使用这个实用工具设置以下参数: Agent 启用SQL Server代理 Collation 设置一个新的排序规则 Customer feedback 选择是否发送反馈给微软 Database Mail Profile 设置默认数据库邮件配置...

10条技巧优化数据库速度

  大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。   1、小心设计数据库   第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。   譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库...

数据源与数据库连接池

什么是数据源? JDBC2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接,当在应用程序中访问数据库时,不必编写连接数据库的代码,直接引用DataSource获取数据库的连接对象即可。用于获取操作数据的Connection对象。 什么是数据库连接池? 数据库连接池的思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一...