InfluxDB2.0

时序数据库(influxdb)按照时间顺序记录系统、设备状态变化的数据被称为时序数据(Time Series Data),如 CPU 利用率、服务器指标、应用程序性能指标、函数接口调用指标、网络流量数据、探测器数据、日志等等。时序数据以时间作为主要的查询纬度,通常会将连续的多个时序数据绘制成线,制作基于时间的多纬度报表,用于揭示数据背后的趋势、规律、异常,进行实时在线预测和预警,时序数据普遍存在于 IT 基础设施、运维监控系统和物联网中。

图片[1]-InfluxDB

特点

1.数据特点:数据量大,数据随着时间增长,相同维度重复取值,指标平滑变化(某辆车的某个设备上传上来平滑变化的轨迹坐标)。
2.写入特点:高并发写入,且不会更新(轨迹不会更新)【基本上都是插入,没有更新的需求】。
3.查询特点:按不同维度对指标进行统计分析,存在明显的冷热数据,一般只会查询近期数据(一般我们只会关心近期的轨迹数据)。
4.数据基本上都有时间属性,随着时间的推移不断产生新的数据。
5.数据量大,每秒钟需要写入千万、上亿条数据

常见需求
获取最新状态,查询最近的数据(例如传感器最新的状态)
展示区间统计,指定时间范围,查询统计信息,例如平均值,最大值,最小值,计数等。。。
获取异常数据,根据指定条件,筛选异常数据

使用

influxdb 1.x 客户端需要使用账号密码进行访问。
influxdb 2.x 客户端需要使用token进行访问(不支持账号密码的形式)。

# 先下载所需模块 influxdb-client
pip install -i https://pypi.doubanio.com/simple influxdb-client

配置

支持以下选项:
host InfluxDB主机, 默认为 ‘localhost’
port (int) 端口号,默认8086
username (str) 用户名,默认root
password (str) 密码,默认root
pool_size (int) urllib3 连接池大小,默认10
database (str) 要连接的数据库名,默认None
ssl (bool) 是否使用https连接InfluxDB,默认False
verify_ssl (bool) 是否对https请求采用ssl认证,默认False
timeout (int) 请求创建连接到客户端的timeout秒数,默认None
retries (int) 连接客户端重试次数,默认3
use_udp (bool) 是否使用udp连接InfluxDB, 默认False
udp_port (int) UDP port, 默认4444
proxies (dict) HTTP(S) 代理,默认为空dict
path (str) 服务器上InfluxDB的连接路径, 默认为’ ’

名词介绍

influxdb 几个重要的名词介绍
organization: 组织;
database:数据库;
measurement:数据库中的表;
point:表里面的一行数据。
每个行记录由time(纳秒时间戳)、字段(fields)和tags组成。
time:每条数据记录的时间,也是数据库自动生成的主索引;
fields:记录各个字段的值;
tags:各种有索引的属性,一般用于where查询条件。

InfluxDB与关系型数据库(MySQL)的概念对比


属性
MySQLInfluxDB
数据库databasebucket
表名tablemeasurement
记录rowspoint
字段columnstime+tag+field
示例数据(方便解释某些概念)
_time_measurementlocationscientist_field_value
2019-08-18T00:00:00Zcensusklamathandersonbees23
2019-08-18T00:00:00Zcensusportlandmullenants30
2019-08-18T00:06:00Zcensusklamathandersonbees28
2019-08-18T00:06:00Zcensusportlandmullenants32

连接

from influxdb_client import BucketRetentionRules, InfluxDBClient
from influxdb_client.client.write_api import SYNCHRONOUS


''' 
Influx v2只支持token认证
# url  influxdb连接地址
# token  连接许可
# debug  是否启动http详细的请求记录
# timeout  超时时间 毫秒
# enable_zip  是否启动Gzip压缩
# org  组织名称
'''
flux_db = {"url": "http://127.0.0.1:8086", "token": "mytoken",
           "org": "fluid_org", "bkt": "fluid_bkt", "timeout": 10, "enable_gzip": True}
def init_db():
    try:
        # 读取文件连接
        # flux_client = InfluxDBClient.from_config_file("config.ini")
        # 字符连接
        flux_client = InfluxDBClient(url=flux_db["url"], token=flux_db["token"], org=flux_db["org"], enable_gzip=flux_db["enable_gzip"], timeout=flux_db["timeout"])
        # 增
        write_api = flux_client.write_api(write_options=SYNCHRONOUS)
        # 查
        query_api = flux_client.query_api()
        # 删
        delete_api = flux_client.delete_api()

    except Exception as e:
        print(" * InfluxDB service connect failed - ", e)
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容