InfluxDB教程

InfluxDB教程,第1张

InfluxDB教程 InfluxDB是什么?

InfluxDB 是一个由InfluxData开发的开源时序性数据库。它由Go语言组成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,loT行业的实时数据等场景。

Influxdb 三大特性:

基于时间序列可度量性基于事件

时序性数据库:

opentsdb 基于HbaseInfluxDBTimeScaleDB 基于PostgreSQLKairosDB 基于Cassandra

通用数据库:

kuduCreateDB 基于 ElasticSearch

InfluxDB数据模型

1.IMeasurement(表)

2.Tags(维度列,相当于主键,数据库中的索引列)

device=dev1 building=b1

device=dev1 building=b2

device=dev2 building=b1

device=dev2 building=b2

不同的设备在不同的时间有不同的数据

3.Field (数值列,相当数据库中的未索引列)

4.Point(一条完整的记录,类似于SQL行)

InfluxDB时间线


 时间线:一个数据源采集的一个指标随着时间变化而源源不断吐出的数据,形成的一条数据线。

InfluxDB系统架构


 RP:数据保留策略(是数据库级别,不是表级别)

每个数据库有多个保留策略,但是只能有一个默认策略。


ShardGroup:分片组

每个ShardGroup只存储指定时间段的数据,不同的ShardGroup指定的时间段不会重合。


为什么这么划分?

1.InfluxDB中数据过期删除的执行力度就是ShardGroup

2.可以有效根据时间维度选择目标分区,淘汰部分数据。

InfluxDB安装部署 (Mac版本)

参考链接:mac上安装influxdb - 云+社区 - 腾讯云

InfluxDB进行HTTP API查询

使用HTTP API在InfluxDB进行查询主要是发送 GET 请求到 InfluxDB的 /query 端,调用示例如下所示:


curl -GET 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb"

--data-urlencode "q=SELECt value FROM mt WHERe name = 'wenhao'"


参数db指定了需查询的数据库,q代表了需执行的查询语句。

我们可能需要用InfluxDB进行多条查询,HTTP API提供的多条查询的格式如下所示:


curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECt value FROM mt WHERe name='wenhao';

SELECt count(value) FROM mt WHERe name='wenhao'" 


格式与单条查询相同,只是在多条语句之间要用分号“;”分隔。

返回值也是包含结果的json串。

InfluxDB 数据保留策略 *** 作

语法:CREATE RETENTION POLICY ON DURATION REPLICATION [SHARD DURATION ] [DEFAULT]

:保留策略名称:数据库名称:保留策略对应数据的过期时间REPLICATION:副本因子SHARD DURATION:分片组默认时长[DEFAULT]:是否为默认的保留策略 创建数据保留策略

CREATE RETENTION POLICY  "influx_retention" ON "mydb" DURATION 30d REPLICATION DEFAULT;
查看保留期
SHOW RETENTION POLICIES ON mydb
修改保留期
ALTER RETENTION POLICY "influx_retention" ON mydb DURATION 15d
删除保留期
DROp RETENTION POLICY "influx_retention" ON mydb 
InfluxDB 表 *** 作 显示所有表
show measurements
插入数据
use mydb

insert weather,altitude=1000,area=北,temperature=11,humidity=-4

insert weather,altitude=500,area=北,temperature=18,humidity=5

insert weather,altitude=1000,area=南,temperature=12,humidity=-5

insert weather,altitude=500,area=南,temperature=25,humidity=7
查询表
select * from weather
 设置一下时间格式
precision rfc3339
删除表
DROp MEASUREMENT weather
 InfluxDB 用户 *** 作 显示用户
show users
创建用户
【普通用户】创建并设置密码

create user zhouwenhao with password '999999';

【管理员用户】创建并设置密码

create user “admin” with password ‘admin’ all privileges;
 修改用户密码
set password for zhouwenhao = '123456'
删除用户
drop user admin;

 InfluxDB 数据库访问权限 *** 作  用户授权

授权用户数据库 *** 作权限 

GRANT ALL PRIVILEGES ON mydb T0 zhouwenhao

赋予用户管理员权限

GRANT ALL PRIVILEGES T0 zhouwenhao

备注:只能使用admin权限才可以 *** 作数据库


撤销授权 

 撤销用户数据库 *** 作权限

REVOKE ALL PRIVILEGES ON mydb from zhouwenhao

撤销用户管理员权限   

REVOKE ALL PRIVILEGES FROM zhouwenhao

 InfluxDB开启用户登录认证  开启登陆验证

在influxdb配置文件influxdb.conf中,开启用户登录认证,添加如下内容:

[http] auth-enabled = true
开启认证后无密码登录
bin /zhouwenhao
开启认证后无密码登录
bin /zhouwenhao -username zhouwenhao -password 123456

 InfluxDB聚合 Count()

返回非空字段值的数量

语法

SELECt COUNT([*||/]) [INTO_clause] FROM_clause [WHERe_clasuse] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

嵌套语法

SELECt COUNT(DISTINCT([*|  | //]))[...]

COUNT(field_key)
返回与字段键关联的字段值的数量。

COUNT(/regular_expression/)
返回与匹配正则表达式的每个字段键关联的字段值的数量。

COUNT(*)
返回与测量中的每个字段键关联的字段值的数量。

COUNT()支持所有字段值数据类型。InfluxQL 支持DISTINCT()与COUNT().

例子

计算与字段键关联的字段值

> SELECT COUNT("water_level") FROM "h2o_feet"

name: h2o_feet
time                   count
----                   -----
1970-01-01T00:00:00Z   15258

查询返回测量中water_level字段键中非空字段值的数量。h2o_feet

计算与测量中每个字段键关联的字段值

> SELECt COUNT(*) FROM "h2o_feet"

name: h2o_feet
time                   count_level description   count_water_level
----                   -----------------------   -----------------
1970-01-01T00:00:00Z   15258                     15258

h2o_feet该查询返回与测量关联的每个字段键的非空字段值的数量。

测量h2o_feet有两个字段键:level description和water_level。

计算与匹配正则表达式的每个字段键关联的字段值

> SELECt COUNT(/water/) FROM "h2o_feet"

name: h2o_feet
time                   count_water_level
----                   -----------------
1970-01-01T00:00:00Z   15258

water查询返回包含测量中单词的每个字段键的非空字段值的数量h2o_feet。

计算与字段键关联的字段值并包含多个子句

> SELECt COUNT("water_level") FROM "h2o_feet" WHERe time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(200) LIMIT 7 SLIMIT 1

name: h2o_feet
tags: location=coyote_creek
time                   count
----                   -----
2015-08-17T23:48:00Z   200
2015-08-18T00:00:00Z   2
2015-08-18T00:12:00Z   2
2015-08-18T00:24:00Z   2
2015-08-18T00:36:00Z   2
2015-08-18T00:48:00Z   2

water_level查询返回字段键中非空字段值的数量。它涵盖了和之间的时间范围2015-08-17T23:48:00Z,并将结果分组为 12 分钟的时间间隔和每个标签。该查询用空的时间间隔填充并将返回的点和系列的数量限制为 7 和 1。2015-08-18T00:54:00Z200

计算与字段键关联的不同字段值

> SELECt COUNT(DISTINCT("level description")) FROM "h2o_feet"

name: h2o_feet
time                   count
----                   -----
1970-01-01T00:00:00Z   4

level description该查询返回字段键和h2o_feet度量的唯一字段值的数量。

COUNT() 的常见问题 count() 和 fill()

大多数 InfluxQL 函数报告null没有数据的时间间隔的值,并将 )">fill() 该null值替换为fill_option. COUNT()报告0没有数据的时间间隔,并将fill()任何0值替换为fill_option.

例子

下面代码块中的第一个查询不包括fill(). 最后一个时间间隔没有数据,因此该时间间隔的报告值为零。第二个查询包括fill(800000);它将最后一个间隔中的零替换为800000.

> SELECt COUNT("water_level") FROM "h2o_feet" WHERe time >= '2015-09-18T21:24:00Z' AND time <= '2015-09-18T21:54:00Z' GROUP BY time(12m)

name: h2o_feet
time                   count
----                   -----
2015-09-18T21:24:00Z   2
2015-09-18T21:36:00Z   2
2015-09-18T21:48:00Z   0

> SELECt COUNT("water_level") FROM "h2o_feet" WHERe time >= '2015-09-18T21:24:00Z' AND time <= '2015-09-18T21:54:00Z' GROUP BY time(12m) fill(800000)

name: h2o_feet
time                   count
----                   -----
2015-09-18T21:24:00Z   2
2015-09-18T21:36:00Z   2
2015-09-18T21:48:00Z   800000

更多聚合语法请看InfluxDB官方文档:InfluxQL functions | InfluxDB OSS 1.7 documentation

关于为什么 InfluxDB 不是 CRUD 的说明

InfluxDB 是一个针对时间序列数据进行了优化的数据库。这些数据通常来自分布式传感器组、大型网站的点击数据或金融交易列表等来源。

这些数据的一个共同点是它在聚合中更有用。一篇文章说您的计算机的 CPU 在星期二 12:38:35 UTC 的利用率为 12%,很难从中得出结论。当与该系列的其余部分结合并可视化时,它会变得更加有用。这是随着时间的推移开始显示趋势的地方,并且可以从数据中得出可行的见解。另外,时序数据一般只写一次,很少更新。

结果是 InfluxDB 不是一个完整的 CRUD 数据库,而是更像一个 CR-ud,将创建和读取数据的性能优先于更新和销毁,并防止某些更新和销毁行为以使创建和读取性能更高:

要更新一个记录,请插入一个具有相同Measurement、Tags 和时间戳的记录。你可以删除或删除一个系列,但不能基于字段值删除单个记录。作为一种解决方法,您可以搜索字段值,检索时间,然后根据time字段删除。如果你还不能更新或重命名标签 - 请参阅 GitHub 问题#4157了解更多信息。要修改一系列点的标记,请找到具有违规标记值的点,将值更改为所需的值,将点写回,然后删除具有旧标记值的系列。你不能按标签键(而不是值)删除标签  InfluxDB 设计见解和权衡

InfluxDB 是一个时间序列数据库。针对这个用例进行优化需要一些权衡,主要是为了以功能为代价来提高性能。下面列出了一些导致权衡的设计见解:

    对于时间序列用例,我们假设如果多次发送相同的数据,那么它就是客户端刚刚发送多次的完全相同的数据。

    优点:简化冲突解决提高了写入性能。
    缺点:不能存储重复数据;在极少数情况下可能会覆盖数据。

    删除很少发生。当它们确实发生时,几乎总是针对大量冷写的旧数据。

    优点:限制对删除的访问可以提高查询和写入性能。
    缺点:删除功能受到很大限制。

    对现有数据的更新很少发生,有争议的更新永远不会发生。时间序列数据主要是从未更新的新数据。

    优点:限制对更新的访问可以提高查询和写入性能。
    缺点:更新功能受到很大限制。

    绝大多数写入都是针对具有最近时间戳的数据,并且数据是按时间升序添加的。

    优点:按时间升序添加数据的性能明显更高。
    缺点:使用随机时间或时间不按升序写入点的性能显着降低。

    规模至关重要。数据库必须能够处理大量的读取和写入。

    优点:数据库可以处理大量的读取和写入。
    缺点: InfluxDB 开发团队被迫做出权衡以提高性能。

    能够写入和查询数据比拥有高度一致的视图更重要。

    优点:写入和查询数据库可以由多个客户端在高负载下完成。
    缺点:如果数据库负载过重,查询返回可能不包括最近的点。

    许多时间序列都是短暂的。经常有时间序列只出现几个小时然后就消失了,例如一个新主机启动并报告了一段时间然后被关闭。

    优点: InfluxDB 擅长管理不连续的数据。
    缺点:无模式设计意味着不支持某些数据库功能,例如没有交叉表连接。

    没有Point很重要。

    优点: InfluxDB 有非常强大的工具来处理聚合数据和大型数据集。
    Con:Point 没有传统意义上的ID,它们是通过时间戳和序列来区分的。

使用 InfluxQL 进行数据探索 Data exploration using InfluxQL | InfluxDB OSS 1.7 documentationExplore time series data using InfluxData’s SQL-like query language. Understand how to use the SELECt statement to query data from measurements, tags, and fields.https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/ 使用 InfluxQL 进行模式探索

Schema exploration using InfluxQL | InfluxDB OSS 1.7 documentationInfluxQL is an SQL-like query language for interacting with data in InfluxDB. The following sections cover useful query syntax for exploring your schema.SHOW DATAbaseS SHOW RETENTION POLICIES SHOW SERIES SHOW MEASUREMENTS SHOW TAG KEYS SHOW TAG VALUES SHOW FIELD KEYS Filter meta queries by time Sample dataThe data used in this document are available for download on the Sample Data page.https://docs.influxdata.com/influxdb/v1.7/query_language/schema_exploration/

使用 InfluxQL 进行数据库管理 Database management using InfluxQL | InfluxDB OSS 1.7 documentationUse InfluxQL to administer your InfluxDB server and work with InfluxDB databases, retention policies, series, measurements, and shards.https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/ InfluxQL 连续查询

COUNT() 的常见问题

InfluxQL 数学运算符

InfluxQL mathematical operators | InfluxDB OSS 1.7 documentationhttps://docs.influxdata.com/influxdb/v1.7/query_language/math_operators/

InfluxDB 常见问题

InfluxDB frequently asked questions | InfluxDB OSS 1.7 documentationThis page addresses frequent sources of confusion and places where InfluxDB behaves in an unexpected way relative to other database systems. Where applicable, it links to outstanding issues on GitHub.AdministrationHow do I include a single quote in a password? How can I identify my version of InfluxDB? Where can I find InfluxDB logs? What is the relationship between shard group durations and retention policies? Why aren’t data dropped after I’ve altered a retention policy?https://docs.influxdata.com/influxdb/v1.7/troubleshooting/frequently-asked-questions/


参考InfluxDB 1.7文档:InfluxDB OSS 1.7 documentation 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5716366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存