一:准备环境
下载:
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9_linux_amd64.tar.gz
解压:
tar xvfz influxdb-1.7.9_linux_amd64.tar.gz
mv influxdb-1.7.9-1/ influxdb
二:启动服务端
操作步骤:
1、进入安装目录/influxdb/usr/bin
./influxd #可后台执行
#此时启动的是服务端,可用curl命令进行操作数据库
2、运行另一个命令启动sql客户端
./influx #进入sql客户端进行交互
InfluxDB提供三种操作方式:
1)客户端命令行方式(登录机器,输入influx即可登录)
2)HTTP API接口
3)各语言API库
三: 基本介绍
InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。
该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。
————————————————
influxDB名词
database:数据库;
measurement:数据库中的表;
points:表里面的一行数据。
————————————————
influxDB中独有的一些概念
Point由时间戳(time)、数据(field)和标签(tags)组成。
time:每条数据记录的时间,也是数据库自动生成的主索引;
fields:各种记录的值;
tags:各种有索引的属性。
四:常用SQL语法
show databases #显示所有数据库
use database_name #使用数据库
create database_name #创建数据库
drop database_name #删除数据库
show measurements #显示所用库下面所有表
insert 表名,tag1=aaa,tag2=bb count=1 #创建表并且插入一条数据 例如
insert test_1203_2,host=127.0.0.2,monitor_name=env,other=aaa count=3
select * from 表名 #查询表中所有数据(可以添加where条件进行过滤)
show series from test_1203_2; #显示series
Series相当于是 InfluxDB 中一些数据的集合,
在同一个database中,retention policy、measurement、tag sets
完全相同的数据同属于一个 series,
同一个series的数据在物理上会按照时间顺序排列存储在一起。
五: 常用HTTP API接口
InfluxDB API提供了较简单的方式用于数据库交互。该API使用了HTTP的方式,并以JSON格式进行返回。
Endpoint 描述
/ping 使用/ping用于检查InfluxDB的状态或者版本信息
/query 使用/query用于查询数据,管理数据库、rp、users等
/write 使用/write去写数据到数据库中
1.ping
/ping支持GET和HEAD,都可用于获取指定信息。
定义:
http://localhost:8086/ping
curl -G 'http://localhost:8086/query' --data-urlencode 'q=SHOW DATABASES'
创建数据库
curl -G 'http://localhost:8086/query' --data-urlencode 'q=CREATE DATABASE "impression_monitor"'
查询数据
curl -G 'http://localhost:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas"'
curl -XPOST 'http://localhost:8086/query?db=mydb' --data-urlencode 'q=SELECT * INTO "newmeas" FROM "mymeas"'
参数 是否可选 描述
consistency=[any,one,quorum,all] 可选 设置point的写入一致性,默认是one.详细的请参考HERE
db={db_name} 必选 设置数据库名
precision=[h,m,s,ms,u,n] 可选 指定时间戳的精度,默认是ns
p={password} 可选 如果设置了认证,则需要用户密码
rp={rp_name} 可选 设置查询的rp。如果没有设置,则查询默认的rp
u={username} 可选 如果设置了认证,则需要用户密码
curl -i -XPOST "http://localhost:8086/write?db=mydb&precision=s" --data-binary 'mymeas,mytag=1 myfield=90 1463683075'
data-binary的格式为:
measurement,tags value timestamp
示例如下:
–data-binary ‘mymeas,tag1=type,tag2=oid value=10 1463683075’
measurement与tags用,隔开,tags可以是多个‘key=value‘的键值对,用逗号隔开,value也是以键值对的形式表示,timestamp是时间戳。tags与value用空格隔开,value和timestamp用空格隔开。
六: 代码对接influxDB(读写)
1.javaAPI
在pom.xml中导入java集成influx的jar包依赖
<!-- 引入influxdb依赖 -->
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.5</version>
</dependency>
使用scala编程时可以导入scala集成influxdb的jar包
<!-- https://mvnrepository.com/artifact/com.paulgoldbaum/scala-influxdb-client -->
<dependency>
<groupId>com.paulgoldbaum</groupId>
<artifactId>scala-influxdb-client_2.11</artifactId>
<version>0.6.1</version>
</dependency>
scala代码 示例:
连接库
import scala.concurrent.ExecutionContext.Implicits.global
val influxdb = InfluxDB.connect(_host, _port.toInt, _username, _password)
val database = influxdb.selectDatabase(_influxConfig.db_name)
println(database.databaseName)
读取数据
var querySQL = ""
if (_influxConfig.filter == "" || _influxConfig.filter == null) {
querySQL = s"select * from ${_influxConfig.table_name}"
} else {
querySQL = s"select * from ${_influxConfig.table_name} where ${_influxConfig.filter}"
}
val eventualQueryResult = _database.query(querySQL, Precision.NANOSECONDS)
val resultValue: QueryResult = Await.result(eventualQueryResult, 2000 seconds)
val series = ListBuffer[String]()
for (rows <- resultValue.series.head.records) {
val point = rows.allValues.mkString(",")
series += point
}
series
写入数据
val abf = ArrayBuffer[Point]()
val point = Point(_influxConfig.table_name)
abf += point
val eventualBoolean = _database.bulkWrite(abf.toList, Precision.MICROSECONDS, Consistency.ALL)
val bool = Await.result(eventualBoolean,2000 seconds)
println(bool.toString)