欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

InfluxDB学习总结和python操作数据库案例

程序员文章站 2022-04-02 08:09:01
Influxdb学习总结一、InfluxDB简介二、和Mysql数据库比较1、注意点2、数据示例三、常用InfluxQL1、基本命令2.添加删除语句3、数据保留策略四、Python操作InfluxDB数据库一、InfluxDB简介InfluxDB(时序数据库),它是由Go语言编写,着力于高性能地查询与存储时序型数据。常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;I...


一、InfluxDB简介

InfluxDB(时序数据库),它是由Go语言编写,着力于高性能地查询与存储时序型数据。常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;InfluxDB是一个由InfluxData开发的开源时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

二、和Mysql数据库比较

概念 Mysql InfluxDB
数据库 database database
table measurement
column tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键)

1、注意点

  • tag 只能为字符串类型
  • field 类型无限制
  • 不支持join
  • 支持连续查询操作(汇总统计数据):CONTINUOUS QUERY
  • 配合Telegraf服务(Telegraf可以监控系统CPU、内存、网络等数据)
  • 配合Grafana服务(数据展现的图像界面,将influxdb中的数据可视化)

2、数据示例

其中census是measurement,butterflies和honeybees是field key,location和scientist是tag key
name: census
————————————
time                 butterflies     honeybees     location     scientist
2015-08-18T00:00:00Z      12             23           1         langstroth
2015-08-18T00:00:00Z      1              30           1         perpetua
2015-08-18T00:06:00Z      11             28           1         langstroth
2015-08-18T00:06:00Z      11             28           2         langstroth

三、常用InfluxQL

1、基本命令

-- 创建数据库
create database 数据库名称;
-- 查看所有的数据库
show databases;
-- 使用特定的数据库
use database_name;
-- 创建表
create measurement 表名;
-- 查看所有的measurement
show measurements;
-- 查询10条数据
select * from measurement_name limit 10;
-- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式
-- 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339
-- 查看一个measurement中所有的tag key 
show tag keys
-- 查看一个measurement中所有的field key 
show field keys

2.添加删除语句

代码如下(示例):

-- 查询语句
select * from census
-- 添加语句
insert census,location scientist,butterflies honeybees;
-- 删除语句
delete from census where time < "特定时间"
-- 例如:删除30d天前的数据
delete from census where time < now() -30d tz('Asia/Shanghai')

3、数据保留策略

  1. 声明

InfluxDB的数据保留策略(RP)用来定义数据在InfluxDB中存放的时间,或者定义保存某个期间的数据.
一个数据库可以有多个保留策略, 但每个策略必须是独一无二的.

2.目的

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

3.操作

-- 查询数据库策略语句
show retention policies on telegraf

其中属性描述:

  • name 名称, 此示例名称为default
  • duration 持续时间, 0代表无限制
  • shardGroupDuration shardGroup的存储时间, shardGroup是InfluxDB的一个基本存储结构, 应该大于这个时间的数据在查询效率上应该有所降低.
  • replicaN 全称是REPLICATION, 副本个数
  • default 是否是默认策略
-- 新建策略
CREATE RETENTION POLICY "2_hours" ON "telegraf" DURATION 2h REPLICATION 1 DEFAULT
通过上面的语句可以添加策略, 本例在telegraf库添加了一个2小时的策略, 名字叫做2_hours,duration为2小时, 副本为1, 设置为默认策略.
因为名为default的策略不再是默认策略, 因此, 在查询使用default策略的表时要显示的加上策略名"defalut"
select * from "default".cpu limit 2

--修改策略
ALTER RETENTION POLICY "2_hours" ON "telegraf" DURATION 4h DEFAULT
--删除策略
drop retention POLICY "2_HOURS" ON "telegraf"

四、Python操作InfluxDB数据库

from influxdb import InfluxDBClient
#插入数据
json_body = [
    {
        "measurement": "table_name",  # 表名
        "tags": {
            "host": "server01",    
            "region": "us-west"
        },
        "time": "2009-11-10T23:00:00Z",  # 插入的时间必需在数据保留时间范围内,如策略保留时间为7天,则传的时间不能为7天前
        "fields": {
            "value": 240.64345           #插入的值不能为0
        }
    },
    {
        "measurement": "table_name",
        "tags": {
            "host": "server01",
            "region": "us-west"
        },
        "time": "2018-04-22T011:05:00Z",
        "fields": {
            "value": 240
        }
    }
]

client = InfluxDBClient('localhost', 8086, 'root', 'root', 'database')
client.write_points(json_body)
#查询数据
client.query("select * from census")
#删除数据
client.query("delete from census where time < now() -30d tz('Asia/Shanghai')")

其中tz(‘Asia/Shanghai’)调整时区,数据库默认时区时间和北京相差8个小时。
使用tz方法需要引入golang,下面链接介绍。


[添加golang](https://www.cnblogs.com/itdragon/p/11608812.html)

本文地址:https://blog.csdn.net/qq_42529023/article/details/109459863