时序数据库influxDB基本用法

一:准备环境
下载:

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

  1. query
    支持get和post请求。
    查询所有的数据库
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"'
  1. wirte
    write只支持POST的HTTP请求,使用该Endpoint可以写数据到已存在的数据库中。
    参数说明:

参数 是否可选 描述
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)    

你可能感兴趣的:(大数据,时序数据库,scala)