influxDB

和自甴很熟 提交于 2020-07-27 13:55:41

开源的分布式时序、时间和指标数据库,使用Go语言编写,无需外部依赖。其中,时间序列数据库是数据格式里包含Timestamp字段的数据,比如某一时间用户上网流量、通话详单等。但是,有什么数据不包含Timestamp呢?几乎所有的数据都可以打上一个Timestamp字段。时间序列数据更重要的一个属性是如何去查询它,包括数据的过滤、计算等。

 

它有三大特性:

  • 时序性(Time Series):与时间相关的函数的灵活使用(例如最大、最小、求和等);

  • 度量(Metrics):对实时大量数据进行计算;

  • 事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。

 

个人认为InfluxDB的几个优点:

  • 无特殊依赖,几乎开箱即用(如ElasticSearch需要Java)

  • 自带数据过期功能;

  • 自带权限管理,精细到“表”级别;

  • 原生的HTTP支持,内置HTTP API

  • 强大的类SQL语法,支持min, max, sum, count, mean, median 等一系列函数,方便统计。

  • 自带管理界面(如下图),免插件配置。

 

 

InfluxDB基本概念

 

1、与传统数据库中的名词做比较

 

InfluxDB中的名词

传统数据库中的概念

database

数据库

measurement

数据库中的表

points

表里面的一行数据

 

2、InfluxDB中特有的概念

 

1)Point

 

Point由时间戳(time)、数据(field)、标签(tags)组成。

 

Point相当于传统数据库里的一行数据,如下表所示:

 

Point属性

传统数据库中的概念

time

每个数据记录时间,是数据库中的主索引(会自动生成)

fields

各种记录值(没有索引的属性)也就是记录的值:温度,   湿度

tags

各种有索引的属性:地区,海拔

 

2)series

 

所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。

 

如下所示:

 

 

3、InfluxDB相关API

 

InfluxDB 支持http api 方式写入数据。使用curl这个工具来模拟HTTP 请求,在实际使用中,可以将请求写入代码中,通过其他编程语言来模拟HTTP请求。

 

例如:通过HTTP API向Internet_users这张表添加数据

curl -v –XPOST "http:// localhost:8086/write?db=Internet&u=user&p=password" --data-binary "Internet_users,users=小区上网用户,mobile=移动端上网用户,users_num=56,

mobile_num=21 1493571600000000000"

 

 

说明:

  • db=Interne是指使用Interne数据库;

  • --data-binary后面是需插入数据,其中:

  1. Internet_users:表名(measurement)

  2. tag字段:users和mobile,值分别为:小区上网用和移动端上网用户

  3. field key字段:users_num和mobile_num,值分别为56和21

  4. 时间戳(timestamp):1493571600000000000

 

这样,就向Interne数据库的Internet_users表中插入了一条数据。

 

需要注意,DB参数必须指定一个数据库中已经存在的数据库名,数据体的格式遵从InfluxDB规定格式,首先是表名,后面是tags,然后是field,最后是时间戳。tags、field和时间戳三者之间以空格相分隔。

 

InfluxDB 数据可视化工具

 

InfluxDB 用于存储基于时间的数据,比如监控数据,因为InfluxDB本身提供了Http API,所以可以使用InfluxDB很方便的搭建了个监控数据存储中心。对于InfluxDB中的数据展示,这里不得不提数据展示利器-Grafana。

本文出自https://www.cnblogs.com/davidwang456/p/7795263.html


三、influxdb基本语法介绍

create database "db_name" #创建数据库 

show databases  #显示所有的数据库 

drop database "db_name"  #删除数据库 

use db_name  #使用数据库 

show measurements  #显示该数据库中所有的表 

insert test,host=127.0.0.1,monitor_name=test count=1  #创建表,直接在插入数据的时候指定表名 

drop measurement "measurement_name"  #删除表 

Select * from access_list  #查询access_list表

注意:influxdb显示time是时间戳,需要时间戳格式化,influxdb 默认支持UTC时间格式。

#将时间格式转为yyyy-MM-ddTHH:mm:ss.nnnnnnnZ 请输入 influx -precision rfc3339  命令

 

四、influxDB聚合类函数

1)count()函数

返回一个(field)字段中的非空值的数量。

2)、DISTINCT()函数

返回一个字段(field)的唯一值。

3)MEAN() 函数

返回一个字段(field)中的值的算术平均值(平均值)。字段类型必须是长整型或float64。

4、MEDIAN()函数

从单个字段(field)中的排序值返回中间值(中位数)。中值是在一组数值中居于中间的数值。字段值的类型必须是长整型或float64格式。

5)SPREAD()函数

返回字段的最小值和最大值之间的差值。数据的类型必须是长整型或float64。

6)SUM()函数

返回一个字段中的所有值的和。字段的类型必须是长整型或float64。

 

五、continuous queries(连续查询)

创建基本语法格式:

CREATE CONTINUOUS QUERY  cq_name ON    database 

BEGIN   

cq_query

END

本文出自influxdb+grafana实战总结

https://www.pianshen.com/article/2543514208/


 保留策略(retention policy)

  1. 每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,在集群中的副本个数为1,之后用户可以自己设置(查看、新建、修改、删除),例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。

  2. 每个数据库可以有多个过期策略:
    show retention policies on "db_name"

  3. Shard 在 influxdb中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。
    这样做的目的就是为了可以通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效。

  4. 建议在数据库建立的时候设置存储策略,不建议设置过多且随意切换
    create database testdb2 with duration 30d

存储目录

influxdb的数据存储有三个目录,分别是meta、wal、data:

  • meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件;

  • wal 目录存放预写日志文件,以 .wal 结尾;

  • data 目录存放实际存储的数据文件,以 .tsm 结尾。




 操作优化

  1. 控制 series 的数量;

  2. 使用批量写;

  3. 使用恰当的时间粒度;

  4. 存储的时候尽量对 Tag 进行排序;

  5. 根据数据情况,调整 shard 的 duration;

  6. 无关的数据写不同的database;

  7. 控制 Tag Key, 与 Tag Value 值的大小;

  8. 存储分离 ,将 wal 目录与 data 目录分别映射到不同的磁盘上,以减少读写操作的相互影响



上述出自链接:https://www.jianshu.com/p/f0905f36e9c3





易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!