-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46585
- shell命令
-
- 文章:(42)篇
- 阅读:154317
- Git教程
-
- 文章:(36)篇
- 阅读:234929
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131964
-
influxdb的使用(一)2019-07-21 12:41 阅读(18298) 评论(0)
一、influxdb是什么
influxdb是一个由go语言开发的、用于存储和分析时间序列数据的开源数据库。特点如下:
内置HTTP接口,使用方便
数据可以打标记,查让查询可以很灵活
类SQL的查询语句
安装管理很简单,并且读写数据很高效
能够实时查询,数据在写入时被索引后就能够被立即查出
支持数据存储策略(RP)和数据归档(CQ)
更多的描述,可以看influxdb官方描述。
二、安装
我们可以直接从官方下载二进制安装,也可以基于docker镜像来安装。基于docker镜像安装,执行如下命令即可
docker run -d --name influxdb -p 8860:8086 \ -v $PWD/influxdb.conf:/usr/local/influxdb/influxdb.conf:ro \ -v $PWD:/data/influxdb \ influxdb -config /usr/local/influxdb/influxdb.conf
参数描述:
-d :在后台运行容器,并打印出容器id
--name influxdb 指定容器的名字
-p 8081:8082 指定端口映射,将宿主机的8860端口,映射到容器的8086端口
-v $PWD/influxdb.conf:/usr/local/influxdb/influxdb.conf:ro 将当前目录下面influxdb.conf挂载到容器的/usr/local/influxdb/influxdb.conf目录。因为默认挂载的路径权限为读写,通过ro,可以限制权限为只读,防止容器中修改配置文件。
-v $PWD:/data/influxdb 将当前目录,挂载到容器的 /data/infludb目录。这样,我们可以指定infludb的数据文件,写到 /data/infludb这个目录,这样可以实现数据的落盘。
关于influxdb.conf文件的配置,可以参考官方。
三、相关概念
在使用infludb之前,我们先了解一波它的一些概念,比如database、Retention Policy、measurement、Continuous Query、point、field、tag等。首先,通过下图,整体认识一下:
1、database
database即数据库,可以类比mysql、mongo等数据库。
create database "test" --创建数据库 show databases --展示所有数据库 use test --选择使用的数据库
2、Retention Policy
retention policy,即存储策略,简称RP,用来控制数据库的存储时间。 InfluxDB会比较服务器本地的时间戳和你数据的时间戳,并删除比RP里面的持续时间更老的数据。单个数据库中可以有多个RP,但是每个数据的RP是唯一的。RP的相关操作如下:
查看数据库 test的rp
SHOW RETENTION POLICIES ON "test"
给test数据库创建新的rp
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 3w REPLICATION 1 DEFAULT
rp_name:RP策略名
db_name:具体的数据库名
3w:设置数据保存3个星期,3个星期之前的数据将被删除,infludb它具有各种时间参数,比如:h(小时), d(天),w(星期)
REPLICATION 1:副本个数,这里填1就可以了。
DEFAULT 设为默认的策略。
修改数据库的rp
修改rp使用如下命令:
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 3d DEFAULT
删除数据库的rp
DROP RETENTION POLICY "rp_name" ON "db_name"
3、measurement
measurement,可以类比传统数据库中的表。传统额数据库,支持增删改查,infludb仅仅支持增和查,删除可以同RP来实现。
数据的插入
influxdb支持http和rpc方式来插入数据,当然也支持命令行方式插入数据,如下:
use test --使用 test数据库 insert weather,altitude=1000,area=北 temperature=11,humidity=-4
其中:
weather : 表名,即measurement的名字
altitude=1000,area=北 为tag,可以把tag理解为mysql中带索引的列。
temperature=11,humidity=-4 为field,,可以把field理解为mysql中不带索引的列。
针对每条插入的数据,influxdb,会自动加一列,列的名字为time,用于记录当前数据的时间。
数据的查询
influxdb支持 where、group、order、limit等字句。如下:
select * from weather order by time desc limit 5
4、连续查询(Continuous Queries)
influxdb中的数据,当超过保存策略里指定的时间之后,就会被删除。如果我们不想删除掉,但是又担心容量过大怎么办呢?可以对数据采用更大的粒度,进行归档,即以降低精度为代价。比如把原先每秒的数据,归档存为分钟的数据,把原先分钟的数据,归档存为每小时或每天的数据等,这样在容量固定的情况下,可以存储更多的数据。在influxdb中,这种操作,叫连续查询(Continuous Queries)。
查看数据库的Continuous Queries
SHOW CONTINUOUS QUERIES
创建Continuous Queries
CREATE CONTINUOUS QUERY cq_3d ON testDb BEGIN SELECT mean(age) as age INTO test_3days FROM test GROUP BY time(3d), * END
其中:
cq_3d:连续查询的名字
testDb:具体的数据库名。
mean(age) as age: 计算age的平均值,后并字段名改为age
test: measurement名称,即基数据库哪个表进行归档
test_3days: measurement名称,数据归档后,存储的表名。
3d:归档的频率,即每间隔3天,归档一次。
* :针对所有的tag进行group by操作,当然我们也可以基于特定的tag来group by操作。需要注意,针对哪些tags进行group by操作,那么归档后的表test_3days中,就会有哪些tags。
删除Continuous Queries
删除操作命令如下:
DROP CONTINUOUS QUERY <cq_name> ON <database_name>