influxdb使用笔记

简介

influx的意思是涌入, 流入, 官网的介绍:

InfluxDB is a time series database designed to handle high write and query loads.
意思是说: influxdb是一个时间序列数据库, 用来应对频繁的写和查询场景.

安装

  • 这里下载相应版本, 然后安装.
  • 利用docker安装
    这里简单说下使用docker:
[root@localhost ~]# docker pull influxdb:1.7.6
[root@localhost ~]# docker run -d --name myinfluxdb -v /var/lib/influxdb:/var/lib/influxdb -p 8086:8086 influxdb:1.7.6
[root@localhost ~]# docker exec -it myinfluxdb bash # 进入容器内部
root@79884794a012:/# influx # 用influx客户端登录上去

Connected to http://localhost:8086 version 1.7.6
InfluxDB shell version: 1.7.6
Enter an InfluxQL query
>
> show databases
name: databases
name
----
_internal

具体细节可以看docker hub官网的介绍: https://hub.docker.com/_/influxdb

下面的操作是在上面运行的influxdb容器中进行的

相关概念

database: 数据库
measurement: 可理解为MySQL中的table
points: 可理解为MySQL中的一条记录(一行数据)
time: 数据插入时的时间(也可插入时自己指定时间,不指定influxdb会自己插入当前时间的纳秒值)
tag: 可理解为MySQL中建立了索引的列, 类型只能为字符串
tag set: 数据点中包含的tag, 格式为: <tag_key>=<tag_value>; 可以有多个, 以,分隔, 如: <tag_key>=<tag_value>,<tag_key>=<tag_value>
field: 可理解为MySQL中建立了没有建立索引的列, 类型可以为字符串, 浮点数等.
field set: 每个数据点中至少要有一个field, 格式与tag set一样
retention policy: 保留策略, 设置数据可以保留的时间(过期自动删除), 及副本数.

基本使用

常见命令:

  • 查看现有数据库: show databases;

  • 创建数据库testdb: create database testdb;

  • 删除数据库testdb: drop database testdb;

  • 选中数据库testdb(设置为当前默认): use testdb;

  • 查看现有measurement: show measurements;

  • 创建measurement: influxdb没有创建measurement的语句, 插入数据时默认创建.

  • 删除measurementweather: drop measurement weather;

  • 插入数据
    插入数据有两种方式, 一种是在命令行操作, 一种是调用http接口. 这里说命令行操作方法:
    influxdb写入数据用的是"行协议", 简单来说就是一行文本来代表数据点, 具体的这里不做介绍.

    如这里我们以记录天气为例子, 一条记录大概是这样:
    insert weather,location=china-beijiing,season=summer temperature=32 1562494897156400203

    其中上面的:
    weathermeasurement, 也就是表名.
    location=china-beijiing,season=summertag set, 有两个tag,tag key分别为locationseason.
    temperature=32field set, 只有一个field key, 为temperature
    1562494897156400203为time(纳秒值).

    其中tag settime都是可选的, time默认取数据插入时的时间戳(纳秒值), 如: insert weather temperature=33也可以.

  • 查询数据: 使用类似SQL中select的语法, 具体自行学习. 简单示例

    > select * from weather;
    name: weather
    time                location       season temperature
    ----                --------       ------ -----------
    1562494897156400203 china-beijiing summer 32
    1562509984038327209                       33
    
  • 查看所有tag keys: show tag keys;

  • 查看所有field keys: show field keys;

go语言客户端:

写这篇文章时, 我用的是
https://github.com/influxdata/influxdb1-client

注意事项

  • 值为字符串类型的, 查询时要用单引号引起来, 如:
    select * from weather where season='summer', 不加单引号查不出来结果

  • measurement名字为纯数字的, 查询时要用双引号引起来, 如:

> insert 1 fieldKey="fieldValue";
> select * from 1;
ERR: error parsing query: found 1, expected identifier at line 1, char 15
> select * from '1';
ERR: error parsing query: found 1, expected identifier at line 1, char 14
> select * from "1";
name: 1
time                fieldKey
----                --------
1562510351532116680 fieldValue

扩展

导出某个measurement为特定格式:

influx -username YourUsername \
	-password YourPassword \
	-format 'json' \
	-database 'test_db' \
	-execute 'select * from test_measurement;' \
	| python -m json.tool \
	> test_measurement.json

influx完整具体选项可通过influx -h查看

欢迎补充指正!

发布了231 篇原创文章 · 获赞 77 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/butterfly5211314/article/details/94130582