zoukankan      html  css  js  c++  java
  • 数据库

    ---
    title: influxDB
    renderNumberedHeading: true
    grammar_cjkRuby: true
    ---

    > InfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统。

    # 简介
    InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。类似的数据库有Elasticsearch、Graphite等。

    其主要特色功能
    1)基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
    2)可度量性:你可以实时对大量数据进行计算
    3)基于事件:它支持任意的事件数据

    InfluxDB的主要特点
    1)无结构(无模式):可以是任意数量的列
    2)可拓展的
    3)支持min, max, sum, count, mean, median 等一系列函数,方便统计
    4)原生的HTTP支持,内置HTTP API
    5)强大的类SQL语法
    6)自带管理界面,方便使用

    influxdb 安装
    wget https://dl.influxdata.com/influxdb/releases/influxdb-0.13.0.x86_64.rpm
    sudo yum localinstall influxdb-0.13.0.x86_64.rpm
    服务端启动: service influxdb start(usr/bin/influx)
    客户端登录:
    ![enter description here](./images/1591177991272.png)
    influxdb自带web管理页面,
    http://IP:8083

    # 与其他数据中名词比较
    ![表格](./attachments/1591172833520.table.html)

    # InfluxDB中独有的概念
    1)point
    Point由时间戳(time)、数据(field)、标签(tags)组成。

    Point相当于传统数据库里的一行数据,如下表所示:

    ![表格](./attachments/1591173069140.table.html)

    2)series
    所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。

    # influxdb数据库操作
    ## 数据库
    如同MYSQL一样,InfluxDB提供多数据库支持,对数据库的操作也与MYSQL相同。
    1)显示数据库
    > show databases
    2) 新建数据库
    > create database test
    3)删除数据库
    > drop database test
    4)使用某个数据库
    > use test
    ## 数据表
    在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。

    1)显示表
    > show MEASUREMENTS

    2) 新建表
    InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。如下所示:
    > insert disk_free,hostname=server01 value=442221834240i 1435362189575692182

    其中 disk_free 就是表名,hostname是索引,value=xx是记录值,记录值可以有多个,最后是指定的时间

    3)删除表
    > drop measurement disk_free
    ## 数据操作
    1)新增数据
    增加数据采用insert的方式,要注意的是 InfluxDB的insert中,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。
    > insert disk_free,hostname=server01 value=442221834240i 1435362189575692182

    2)查询数据
    > select * from test

    3)删除和修改数据
    InfluxDB属于时序数据库,没有提供修改和删除数据的方法。
    但是删除可以通过InfluxDB的数据保存策略(Retention Policies)来实现,这个会在以后的文章中讲到。

    ## series操作
    series表示这个表里面的数据,可以在图表上画成几条线,series主要通过tags排列组合算出来。
    > show series from test

    # API 操作数据库
    为了方便,本文主要使用curl来发起http请求,示例当中也是使用curl这个工具来模拟HTTP 请求。
    在实际使用中,可以将请求写入代码中,通过其他编程语言来模拟HTTP请求。
    1)建立数据库
    > curl -POST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"

    2)删除数据库
    > curl -POST http://localhost:8086/query --data-urlencode "q=DROP DATABASE mydb"

    3)添加数据库
    > curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
    ```
    db=mydb是指使用mydb这个数据库。
    --data-binary后面是需插入数据。
    cpu_load_short是表名(measurement),tag字段是host和region,值分别为:server01和us-west。
    field key字段是value,值为0.64。
    时间戳(timestamp)指定为1434055562000000000。
    就向mydb数据库的cpu_load_short表中插入了一条数据。
    其中,db参数必须指定一个数据库中已经存在的数据库名,数据体的格式遵从InfluxDB规定格式,首先是表名,后面是tags,然后是field,最后是时间戳。tags、field和时间戳三者之间以空格相分隔
    ```
    4)添加多条数据
    ```
    curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server02 value=0.67
    cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
    cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'
    ```
    5) 查询
    > curl -GET 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb"
    --data-urlencode "q=SELECT value FROM cpu_load_short WHERE region='us-west'"

    - 格式化输出
    ```
    HTTP查询时可以使用 epoch 参数指定输出的时间格式。可选值有 epoch=[h,m,s,ms,u,ns]
    curl -G 'http://localhost:8086/query' --data-urlencode "db=mydb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT value FROM cpu_load_short WHERE region='us-west'"
    ```
    - 指定每次查询数据大小
    ```
    可以使用 chunk_size 参数来指定每次结果的大小
    curl -G 'http://localhost:8086/query' --data-urlencode "db=mydb" --data-urlencode "chunk_size=200" --data-urlencode "q=SELECT value FROM cpu_load_short WHERE region='us-west'"
    ```

    # API响应

    - 2xx:204代表no content,200代表InfluxDB可以接收请求但是没有完成请求。一般会在body体中带有出错信息。
    - 4xx:InfluxDB不能解析请求。
    - 5xx:系统出现错误。

    # Retention Policies 数据保留策略
    > InfluxDB每秒可以处理成千上万条数据,要将这些数据全部保存下来会占用大量的存储空间,有时我们可能并不需要将所有历史数据进行存储,因此,InfluxDB推出了数据保留策略(Retention Policies),用来让我们自定义数据的保留时间
    ## 保留策略说明
    InfluxDB的数据保留策略(RP) 用来定义数据在InfluxDB中存放的时间,或者定义保存某个期间的数据。
    一个数据库可以有多个保留策略,但每个策略必须是独一无二的。

    ## 保留策略目的
    InfluxDB本身不提供数据的删除操作,因此用来控制数据量的方式就是定义数据保留策略。
    因此定义数据保留策略的目的是让InfluxDB能够知道可以丢弃哪些数据,从而更高效的处理数据。

    ## 保留策略操作
    **注意**
    > 策略这个关键词“POLICY”在使用是应该大写
    > 当一个表使用的策略不是默认策略时,在进行操作时一定要显式的指定策略名称,否则会出现错误。


    1)查询策略
    > SHOW RETENTION POLICIES ON telegraf

    - name--名称,此示例名称为 default
    - duration--持续时间,0代表无限制
    - shardGroupDuration--shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,应该大于这个时间的数据在查询效率上应该有所降低。
    - replicaN--全称是REPLICATION,副本个数
    - default--是否是默认策略

    2)新建策略
    > CREATE RETENTION POLICY "2_hours" ON "telegraf" DURATION 2h REPLICATION 1 DEFAULT

    3)修改策略
    > ALTER RETENTION POLICY "2_hours" ON "telegraf" DURATION 4h DEFAULT

    4)删除策略
    > drop retention POLICY "2_hours" ON "telegraf"

  • 相关阅读:
    线性参考
    unix下安装Server(静默方式)
    ArcGIS Server REST开发模式
    Python中调用AO
    Oracle 冷备份
    平头缓冲
    Oracle 热备份
    Socket获取远程连接者的IP
    c#调用cmd执行相关命令
    C#_winform_DataGridView_的18种常见属性 (转)
  • 原文地址:https://www.cnblogs.com/yumo1627129/p/13097739.html
Copyright © 2011-2022 走看看