influxdb简单使用

摘要:
之前对influxdb有一个简单的了解和入门的使用,近期由于想使用influxdb做一点东西玩玩,又要捡起influxdb。而在influxdb下没有细分的表的概念,influxdb下的表在插入数据库的时候自动会创建。更多用户权限设置可以参看官方文档:https://docs.influxdata.com/influxdb/v1.0/query_language/authentication_and_authorization/。这就需要InfluxDB提供的:连续查询。

之前对influxdb有一个简单的了解和入门的使用,近期由于想使用influxdb做一点东西玩玩,又要捡起influxdb。本篇就针对influxdb的数据库、表的概念,增删改查操作、RESTful操作等做下总结。

一、influxdb与传统数据库的比较

库、表等比较:

influxDB传统数据库中的概念
database数据库
measurement数据库中的表
points表里面的一行数据

influxdb数据的构成:

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

Point属性传统数据库中的概念
time每个数据记录时间,是数据库中的主索引(会自动生成)
fields各种记录值(没有索引的属性)也就是记录的值:温度, 湿度
tags各种有索引的属性:地区,海拔

这里不得不提另一个名词:series:

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

influxdb使用的端口如下:

  1. 8083: Web admin管理服务的端口, http://localhost:8083
  2. 8086: HTTP API的端口
  3. 8088: 集群端口(目前还不是很清楚, 配置在全局的bind-address,默认不配置就是开启的)

二、安装及增删改查

1、安装

  1. # wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm
  2. # rpm -ivh influxdb-1.1.0.x86_64.rpm
  3. # systemctl enable influxdb
  4. # systemctl start influxdb

注:本示例是在centos7/rhel7中配置的服务,如果在rhel6下,可以使用service进行服务配置和启动。

2、命令行下创建及查询

通过influx命令进行管理,可以使用如下命令创建数据库:

  1. >CREATE DATABASE "testDB"
  2. >show databases //查询当前的所有数据库
  3. >show databases
  4. name:databases
  5. ---------------
  6. name
  7. _internal
  8. testDB
  9. >use testDB //使用某个数据库

建库的操作可以发现非常类似于mysql下的操作。而在influxdb下没有细分的表的概念,influxdb下的表在插入数据库的时候自动会创建。可以通过SHOW measurements命令查看所有的表,这个类似于mysql下的show tables; 。

  1. >INSERT cpu,host=serverA,region=us_west value=0.64//在cpu表中插入相关的数据
  2. >SELECT *FROM cpu ORDER BY time DESC LIMIT 3//查询最近的三条数据
  3. >SELECT *FROM /.*/LIMIT 1//正则表达式查询
  4. >delete from cpu where time=1480235366557373922//删除某条数据
  5. >DROP MEASUREMENT "measurementName"//删除表

update更新语句没有,不过有alter命令,在influxdb中,删除操作用和更新基本不用到 。在针对数据保存策略方面,有一个特殊的删除方式,这个后面再提。

关于用户的操作如下:

  1. # 显示用户
  2. SHOW USERS
  3. # 创建用户
  4. CREATE USER "username"WITH PASSWORD 'password'
  5. # 创建管理员权限的用户
  6. CREATE USER "username"WITH PASSWORD 'password'WITH ALL PRIVILEGES
  7. # 删除用户
  8. DROP USER "username"

influxdb的权限设置比较简单,只有读、写、ALL几种。更多用户权限设置可以参看官方文档:https://docs.influxdata.com/influxdb/v1.0/query_language/authentication_and_authorization/。默认情况下,influxdb类似与mongodb,是不开启用户认证的,可以修改其 conf文件,配置http块内容如下:

  1. [http]
  2. enable = true
  3. bind-address = ":8086"
  4. auth-enabled = true # 开启认证

三、数据保存策略及连续查询

1、数据保存策略

一般情况下基于时间序列的point数据不会进行直接删除操作,一般我们平时只关心当前数据,历史数据不需要一直保存,不然会占用太多空间。这里可以配置数据保存策略(Retention Policies),当数据超过了指定的时间之后,就会被删除。

  1. SHOW RETENTION POLICIES ON "testDB"//查看当前数据库的RetentionPolicies
  2. CREATE RETENTION POLICY "rp_name"ON "db_name"DURATION 30dREPLICATION 1DEFAULT //创建新的RetentionPolicies
  3. #注释如下:
  4. rp_name:策略名
  5. db_name:具体的数据库名
  6. 30d:保存30天,30天之前的数据将被删除
  7. 它具有各种时间参数,比如:h(小时),w(星期)
  8. REPLICATION 1:副本个数,这里填1就可以了
  9. DEFAULT 设为默认的策略

也可以通过如下命令修改和删策略:

  1. ALTER RETENTION POLICY "rp_name"ON db_name" DURATION 3w DEFAULT
  2. DROP RETENTION POLICY "rp_name" ON "db_name"

2、连续查询(Continuous Queries)

当数据超过保存策略里指定的时间之后,就会被删除。如果我们不想完全删除掉,比如做一个数据统计采样:把原先每秒的数据,存为每小时的数据,让数据占用的空间大大减少(以降低精度为代价)。这就需要InfluxDB提供的:连续查询(Continuous Queries)。

查看当前的查询策略

  1. SHOW CONTINUOUS QUERIES

创建新的Continuous Queries

  1. CREATE CONTINUOUS QUERY cq_30m ON testDB BEGIN SELECT mean(temperature)INTO weather30m FROM weather GROUP BY time(30m)END
  2. 注释如下:
  3. cq_30m:连续查询的名字
  4. testDB:具体的数据库名
  5. mean(temperature):算平均温度
  6. weather当前表名
  7. weather30m存新数据的表名
  8. 30m:时间间隔为30分钟

当我们插入新数据之后,通过SHOW MEASUREMENTS查询发现。可以发现数据库中多了一张名为weather30m(里面已经存着计算好的数据了)。这一切都是通过Continuous Queries自动完成的。

删除Continuous Queries

  1. DROP CONTINUOUS QUERY <cq_name>ON <database_name>

四、RESTful 接口操作

插入及查询操作:

  1. # code from www.361way.com
  2. now=$(date '+%FT%T.000Z')
  3. tomorrow=$(date -v +1d'+%FT%T.000Z')
  4. echo "creating database"
  5. curl -G http://localhost:8086/query --data-urlencode "q=CREATE DATABASE foo"
  6. echo "creating retention policy"
  7. curl -G http://localhost:8086/query --data-urlencode "q=CREATE RETENTION POLICY bar ON foo DURATION INF REPLICATION 1 DEFAULT"
  8. echo "inserting data"
  9. curl -d "{"database" : "foo", "retentionPolicy" : "bar", "points": [{"measurement": "cpu", "tags": {"region":"uswest","host": "server01"},"time": "$now","fields": {"value": 100}}]}"-H "Content-Type: application/json"http://localhost:8086/write
  10. echo "inserting data"
  11. curl -d "{"database" : "foo", "retentionPolicy" : "bar", "points": [{"measurement": "cpu", "tags": {"region":"uswest","host": "server01"},"time": "$tomorrow","fields": {"value": 200}}]}"-H "Content-Type: application/json"http://localhost:8086/write
  12. sleep 1
  13. echo "querying data"
  14. curl -G http://localhost:8086/query --data-urlencode "db=foo"--data-urlencode "q=SELECT count(value) FROM "foo"."bar".cpu"
  15. echo "querying data"
  16. curl -G http://localhost:8086/query --data-urlencode "db=foo"--data-urlencode "q=SELECT count(value) FROM "foo"."bar".cpu where time < now() + 10d"

GZIP压缩数据插入及查询:

  1. # code from www.361way.com
  2. echo "inserting data"
  3. curl -v -i -H "Content-encoding: gzip" -H "Content-Type: application/json" -X POST -T foo.json.gz http://localhost:8086/write
  4. rm foo.json.gz
  5. echo "querying data with gzip encoding"
  6. curl -v -G --compressed http://localhost:8086/query --data-urlencode "db=foo" --data-urlencode "q=SELECT sum(value) FROM "foo"."bar".cpu GROUP BY time(1h)"

还可以指定数据保存策略及表的各关键值插入:

  1. echo "creating retention policy"
  2. curl -G http://localhost:8086/query --data-urlencode "q=CREATE RETENTION POLICY bar ON foo DURATION 300d REPLICATION 3 DEFAULT"
  3. curl -d '{"database" : "foo", "retentionPolicy" : "bar", "points": [{"measurement": "network", "tags": {"host": "server01","region":"uswest"},"time": "2015-02-26T22:01:11.703Z","fields": {"rx": 2342,"tx": 9804}}]}'-H "Content-Type: application/json"http://localhost:8086/write
  4. curl -d '{"database" : "foo", "retentionPolicy" : "bar", "points": [{"measurement": "network", "tags": {"host": "server01","region":"useast"},"time": "2015-02-27T22:01:11.703Z","fields": {"rx": 4324,"tx": 7930}}]}'-H "Content-Type: application/json"http://localhost:8086/write

更多可以参考github上的测试内容

无论是influx还是通过RESETful 参数进行查询,其还有pertty参数可以使输出的json格式更加美观 。除此之外,influx命令还有column、CSV等格式输出,influx命令支持通过import参数输入类csv类格式的数据。

五、influxdb.conf配置web管理

当前版本的influxdb,默认情况下未开启web管理功能。可以通过修改influxdb.conf文件中admin项的配置开启web管理界面,具体如下:

  1. [admin]
  2. # Determines whether the admin service is enabled.
  3. enabled = true
  4. # The default bind address used by the admin service.
  5. bind-address = ":8083"

influxdb

免责声明:文章转载自《influxdb简单使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MyBatisPlus使用IDEA 运行键是灰色下篇

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

相关文章

拒绝了对对象 'sp_OACreate' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限。

执行一个存储过程, 由于里面使用到了一些 --创建对象 EXEC sp_OACreate 'VBScript.RegExp', @objRegexOUT --设置属性 EXEC sp_OASetProperty @objRegex, 'Pattern', @pattern EXEC sp_OASetProperty @objRegex, 'Ign...

mysql命令行导出导入数据库

一.MYSQL的命令行模式的设置:  桌面->我的电脑->属性->环境变量->新建->PATH=“;pathmysqlin;”其中path为MYSQL的安装路径。二.简单的介绍一下命令行进入MYSQL的方法:1.C:>mysql -h hostname -u username -p  按ENTER键,等待然后输入密码。这...

SpringBoot简单连接数据库以及查询数据

实现大概思路:配置数据库环境——>实体类——>新建**Repostory接口并且继承JpaRepository——>配置URL映射以及请求方式— 首先,在数据库中新建名称为dbgirl数据库,在application.yml文件中进行对数据库以及JPA的配置,代码如下。 spring: profiles: active: de...

mongodb 安装

a.安装   本人下载的是windows版本的3.2.1mongo,路径为https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.2.1-signed.msi   或者直接去官网也可以http://www.mongodb.org/downloads   不过需要注意的是mo...

php-fpm和cgi,并发响应的理解以及高并发和多线程的关系

首先搞清楚php-fpm与cgi的关系 cgi cgi是一个web server与cgi程序(这里可以理解为是php解释器)之间进行数据传输的协议,保证了传递的是标准数据。 php-cgi php-cgi是php解释器,就是上文提到的cgi程序。 Fastcgi Fastcgi是用来提高cgi程序(php-cgi)性能的方案/协议。 cgi程序的性能问题在...

python ORM框架:SqlAlchemy

  ORM,对象关系映射,即Object Relational Mapping的简称,通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系,这样做的目的:简化sql语言操作数据库的繁琐过程(原生sql的编写及拼接等),转而直接使用对象模型来操作数据库做替代 第一部分       SqlAlchemy本身无法直接操作数据库,它是建立在第三...