时序数据库InfluxDB介绍
InfluxDB可以用来监控数据统计,每毫秒记录电脑内存使用情况,根据统计的数据结合图形化界面工具制作内存使用情况折线图,比如Grafana。InfluxDB适用于DevOps监控,应用程序指标,物联网传感器数据和实时分析的后端存储。使用pip install influxdb
安装客户端。
1、什么是InfluxDB
InfluxDB是开源时序型数据,着力于高性能地查询与存储时序型数据。InfluxDB广泛应用于监控数据、实时数据等场景。
特点
(1)为时间序列数据专门编写的自定义高性能数据存储,TSM引擎具有高性能的写入和数据压缩;
(2)采用Golang语言编写,没有其他依赖;
(3)提供高性能写入、查询HTTP API,内置HTTP支持,支持类SQL查询语句;
(4)tags可以索引序列化,提供快速有效的查询;
(5)Retention policies自动处理过期数据;
(6)无结构schemaless,可以是任意数量的列;
(7)提供了min,max,sum,count,mean,median等一系列函数,方便统计;
(8)Continuous queries自动聚合,提供查询效率。
特性
(1)时间序列:可以使用与时间有关的函数;
(2)度量:可以实时对大量数据进行计算;
(3)事件:支持任意数量的事件数据。
2、InfluxDB对比MySQL
概念 | MySQL | InfluxDB |
---|---|---|
数据库 | database | database |
表 | table | measurement(测量; 度量) |
列 | column | tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键) |
(1)InfluxDB相关概念
- 数据库:database
- 数据库中的表:measurement
- 系列:series(表中的额数据可以在图表中华城几条线,线条个数通过tags排列组合计算出来)。
- 表中的一行数据:point,由时间戳time(主索引,自动生成)、数据field(必须存在)、标签tags(可选的有索引的属性)组成。tag只能是字符串类型,field类型无限制,不支持json。
- 下载InfluxDB,chronograf,配置参考
(2)常用InfluxQL
-- 查看所有的数据库
show databases;
-- 使用特定的数据库
use database_name;
-- 查看所有的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
-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;
3、python访问InfluxDB示例
from influxdb import InfluxDBClient
import time,math,random
while True:
a = psutil.virtual_memory().percent #内存占用率
b = psutil.cpu_percent(interval=1.0) #cpu占用率
json_body = [
{
"measurement": "cpu_load_short",
"tags": {
"host": "localhost",
"region": "us-east"
},
"time": "2022-11-10T23:00:00Z",
"fields": {
"cpu": b,
"mem": a
}
}
]
client = InfluxDBClient('localhost', 8086, 'root', 'root', 'xxyyxx')
client.create_database('xxyyxx')
client.write_points(json_body)
result = client.query('select value from cpu_load_short;')
print("Result: {0}".format(result))
time.sleep(2)