基于PHP使用influxdb搭建监控服务系统
一、认识关键词概念
InfluxDB是领先的开源时间序列数据库(TSDB)。
InfluxDB使用Go语言编写,适用于各类时间序列数据的高效存储与检索。
influxdb中的database、measurement、point
database:数据库,同Mysql等关系型数据库中的“数据库Database”
measurement:数据表,相当于关系型数据库中的“表Table”
point:数据点,表示单条数据记录,相当于关系型数据库中的“一行数据”
由于database和measurement与传统数据库基本相同,这里不做过多解释,以下针对influxdb中特有的Point进行讲解。
retention policy:单个measurement可以有不同的retention policy。measurement默认会有一个autogen
的保留策略,autogen中的数据永不删除且备份数replication为1(只有一份数据,在集群中起作用)
Point
Point由时间(time)、数据(field)、标签(tags)三类字段组成。
time:代表每条数据的时间字段,是measurement中的数据主键,因此time字段具有索引属性。一条point只能有一个time。
field:代表各种数据的字段,例如气温、压力、股价等,field字段没有索引属性。一条point可以包括多个field。
tag:代表各类非数据字段,例如设备编码、地区、姓名等,tag字段有索引属性。一条point可以包括多个tag。
例子
两位科学家langstroth和perpetua于2015年8月18日在两个不同位置进行一项计算蝴蝶和蜜蜂数量的统计实验。假设他们使用同一个database,并使用同一个名为census的measurement录入数据。以下表示某一个point的样例数据:
其中time为time字段。butterflies和honeybees分别代表蝴蝶和蜜蜂的数量,因此他们是field字段。location和scientist代表科学家的位置和名字,因此他们是tag字段。
与常见的数据库的对比
- 概念名称 Influxdb 关系型数据库
数据库 database database
表 measurement table
行 points row
列 tag,field,timestamp columnInfluxDB独有的概念
Point: 代表一行的数据,由时间戳(time)、数据(field)和标签(tags)组成
tag sets: tags在InfluxDB中会按照字典序排序,不管是tag-key还是tag-value,只要不一致就分别属于两个key
tag: 标签,表名+tag一起作为数据库的索引是“key-value”的形式
field name: InfluxDB支持一条数据插入多个fieldName。但实际存储中还是被当做多条数据存储
timestamp: 每一条数据都需要指定一个时间戳,在 TSM 存储引擎中会特殊对待,以为了优化后续的查询操作
Series: 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起
retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据
Shard: 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file
二、PHP客户端
适用于PHP的InfluxDB客户端库
注意:该库与InfluxDB 1.x一起使用。 要连接到InfluxDB 2.x实例,请使用客户端。
概述 一个易于使用的库,用于将InfluxDB与PHP结合使用。
创建了influxdb-php库,使其具有python influxdb客户端的php端口。 这样,在不同的编程语言之间将有一个通用的抽象库。
安装 可以使用composer完成安装:
$ composer require influxdb/influxdb-php
PHP 5.3和PHP 5.4用户注意 如果您使用PHP 5.3和PHP 5.4,则仍支持0.1.x版本(错误修复和新版本修复)。
0.1.x分支将在PHP 5.3和PHP 5.4上运行,但不包含1.0.0版本具有的所有功能,例如UDP支持。 入门 初始化一个新的客户端对象:
参考:https://github.com/influxdata/influxdb-client-php
https://github.com/influxdata/influxdb-php
赞赏码
非学,无以致疑;非问,无以广识