• InfluxDB的安装和简介


    InfluxDB简介

    InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载。它是TICK堆栈的组成部分 。InfluxDB旨在用作涉及大量带时间戳数据的任何用例的后备存储,包括DevOps监控,应用程序指标,物联网传感器数据和实时分析。

    功能特点

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

    主要特点

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

    InfluxDB与传统数据库的比较

    InfluxDB的名词传统数据库的概念
    database 数据库
    measurement 数据库的表
    points 表里的一行数据

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

    point属性传统数据库中的概念
    time(时间戳) 每个数据记录时间,是数据库中的主索引(会自动生成)
    fields(字段、数据) 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度
    tags(标签) 各种有索引的属性:地区,海拔

    注意

    在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
    tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。
    series
    相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

    > select * from students
    name: students
    time                score stuid value
    ----                ----- ----- -----
    1542848518465067760 89    s123
    1542850528630385278 79    s123
    1542850533581732431 69    s123
    1542850536266169940 39    s123
    1542850676477097687 99    s123
    1542874869654197110       s124  100
    1542874898710687064       s125  60
    > show series from students
    key
    ---
    students,stuid=s123
    students,stuid=s124
    students,stuid=s125

    shard
    shard 和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复;
    例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。
    每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

    组件
    TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。

    Cache:cache 相当于是 LSM Tree 中的 memtabl。插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中的数据在内存中的缓存。当 InfluxDB 启动时,会遍历所有的 wal 文件,重新构造 cache,这样即使系统出现故障,也不会导致数据的丢失。
    cache 中的数据并不是无限增长的,有一个 maxSize 参数用于控制当 cache 中的数据占用多少内存后就会将数据写入 tsm 文件。如果不配置的话,默认上限为 25MB,每当 cache 中的数据达到阀值后,会将当前的 cache 进行一次快照,之后清空当前 cache 中的内容,再创建一个新的 wal 文件用于写入,剩下的 wal 文件最后会被删除,快照中的数据会经过排序写入一个新的 tsm 文件中。

    WAL:wal 文件的内容与内存中的 cache 相同,其作用就是为了持久化数据,当系统崩溃后可以通过 wal 文件恢复还没有写入到 tsm 文件中的数据。
    TSM File:单个 tsm file 大小最大为 2GB,用于存放数据。
    Compactor:compactor 组件在后台持续运行,每隔 1 秒会检查一次是否有需要压缩合并的数据。
    主要进行两种操作
    一种是 cache 中的数据大小达到阀值后,进行快照,之后转存到一个新的 tsm 文件中。
    另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成。

    安装

    环境: CentOS7.0_x64
    InfluxDB版本:1.7.0

    基础环境

    yum install go

    InfluxDB的安装

    wget  https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm
    rpm -ivh influxdb-1.2.0.x86_64.rpm

    安装后产生的InfluxDB相关文件讲解
    /usr/bin下文件

    文件名  文件解析
    influxd influxdb服务器
    influx influxdb 命令行客户端
    influx_inspect  查看工具
    influx_stress  压力测试工具
    influx_tsm  数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)

    /var/lib/influxdb下文件夹(建完表和库的时候才会有)
    文件夹文件夹解析
    data 存放最终存储的数据,文件以**.tsm**结尾
    meta 存放数据库元数据
    wal 存放预写日志文件
    /etc/influxdb下文件
    文件文件解析
    influxdb.conf influxdb数据库配置文件

    启动服务
    操作服务的相关命令

    服务式启动命令
    service influxdb start
    
    服务式的其他命令
    停止服务
    service influxdb stop
    
    重启服务
    service influxdb restart
    
    尝试重启服务
    service influxdb try-restart
    
    重新加载服务
    service influxdb reload
    
    强制重新加载服务
    service influxdb force-reload
    
    查看服务状态
    service influxdb status

     以非服务方式启动

     cd /usr/bin;./influxd

    服务启动查看是否正常
    • 通过查看服务对应进程

    InfluxDB默认使用以下网络端口:

    • TCP端口8086用于通过InfluxDB的HTTP API进行客户端 - 服务器通信
    • TCP端口8088用于RPC服务以进行备份和还原

    除了上面的端口,InfluxDB还提供了多个可能需要自定义端口的插件。可以通过配置文件修改所有端口映射,配置文件位于/etc/influxdb/influxdb.conf默认安装位置。

    InfluxDB 客户端命令行方式操作

    • InfluxDB数据库操作

    客户端命令行方式操作
    [root@localhost influxdb]# influx
    Connected to http://localhost:8086 version 1.7.0
    InfluxDB shell version: 1.7.0
    Enter an InfluxQL query
    >
    
    显示数据库
    > show databases
    name: databases
    name
    ----
    _internal
    
    新建数据库
    > create database testdb
    > show databases
    name: databases
    name
    ----
    _internal
    testdb
    
    删除数据库
    > drop database testdb
    > show databases
    name: databases
    name
    ----
    _internal
    
    使用数据库
    
    > create database testdb
    > use testdb
    Using database testdb

    InfluxDB 数据表操作
    在InfluxDB当中,并没有表(table)这个概念,取而代之的是measurement,measurement的功能与传统数据库中的表一致,因此我们也可以将measurement称为InfluxDB中的表。

    显示所有表
    show measurement

    新建表
    InfluxDB中没有显示的创建表的语句,只能通过insert数据的房还是来建立新表。
    其中 disk_free 就是表名,hostname 是索引(tag),value=xx 是记录值(field),记录值可以有多个,系统自带追加时间戳。

    > insert disk_free,hostname=server01 value=442221834240i
    > select * from disk_free
    name: disk_free
    time                hostname value
    ----                -------- -----
    1435362189575692180 server01 442221834240

    或者添加数据时,自己写入时间戳(写入相同时间戳、相同tags,对原有数据进行update操作)

    > insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
    > select * from disk_free
    name: disk_free
    time                hostname value
    ----                -------- -----
    1435362189575692180 server01 442221834240
    1435362189575692182 server01 442221834240

    删除表

    > drop measurement disk_free

    数据保存策略(Retention Policies)
    InfluxDB 是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。

    查看当前数据库Retention Policies

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

    > show retention policies on testdb
    name    duration shardGroupDuration replicaN default
    ----    -------- ------------------ -------- -------
    autogen 0s       168h0m0s           1        true

    创建新的Retention Policies

    rp_name:策略名。
    db_name:具体的数据库名。
    3w:保存3周,3周之前的数据将被删除,influxdb 具备各种事件参数,持续时间必须至少为1小时;比如:h(小时)、d(天)、w(星期)。
    replication 1:副本个数,一般为1即可。
    default:设置为默认策略。

    create retention policy "rp_name" on "db_name" duration 3w replication 1 default
    修改Retention Policies
    alter retention policy "rp_name" on "db_name" duration 30d default
    
    删除Retention Policies
    drop retention policy "rp_name" on "db_name"

    连续查询(Continuous Queries)
    InfluxDB 的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 select 关键字 和 group by time() 关键字。
    InfluxDB 会将查询结果放在指定的数据表中。
    目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低 InfluxDB 的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。

    新建连续查询

    CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
    [RESAMPLE [EVERY <interval>] [FOR <interval>]]
    BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>
    FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]
    END

    样例

    CREATE CONTINUOUS QUERY wj_30m ON testdb BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END

    在 testdb 库中新建了一个名为 wj_30m 的连续查询,每三十分钟取一个 connected_clients 字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的数据保留策略都是default。
    不同 database 样例:

    CREATE CONTINUOUS QUERY wj_30m ON testdb_30 BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO testdb_30.autogen.redis_clients_30m FROM testdb.autogen.redis_clients GROUP BY ip,port,time(30m) END
    显示所有已存在的连续查询
    show continuous queries
    
    删除Continuous Queries
    drop continuous query <cq_name> on <database_name>
  • 相关阅读:
    pytesser模块WindowsError错误解决方法
    Django 1.10中文文档-聚合
    Django 1.10中文文档-执行查询
    Python NLP入门教程
    Django1.10中文文档—模型
    曲线点抽稀算法-Python实现
    Python判断文件是否存在的三种方法
    epoll原理
    多线程编程
    后端知识地图
  • 原文地址:https://www.cnblogs.com/yinfutao/p/11618887.html
Copyright © 2020-2023  润新知