influxDB 学习笔记

influxDB 学习笔记

influxDB 学习笔记
官方文档: docs.influxdata.com/inf

目录:

一、influxDB

  1. 简介
  2. 示例
  3. 词汇说明
  4. influxDB下载与安装
  5. influx CLI

二、influxQL

  1. 查询
    1)常用
    2)SELECT
    3)WHERE
    4)GROUP BY
    5)INTO
    5)LIMIT
  2. 数据库管理
  3. 连续查询
  4. Functions

一、influxDB

1. 简介

InfluxDB 是一个由 InfluxData 开发的开源时序型数据库。使用 GO 语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。InfluxDB 被广泛应用于存储系统的监控数据,IoT 行业的实时数据等场景。

influxDB 与 MySQL 的对比:
InfluxDB 目的是存储大量时间序列数据,并对这些数据快速执行实时分析。
influxDB 支持多种查询语言:Flux 和 influxQL。
influxDB 不是 CRUD,通常来说 influxDB 中的数据来自分布式传感器组、网站的点击数据和性能监控数据和金融交易列表数据等,这些数据需要聚合之后才会更有用。

2. 示例

如下示例是两位科学家在两处位置记录的蜜蜂和蝴蝶的数量,数据存储在 census 表中:


1)所有的 influxDB 数据库表中都有 time 这一列,其存储时间戳。
2)butterflies 和 honeybees 这两列是字段( fileds )。字段由字段键(filed keys)和字段值(filed values)组成。filed key 是 string 类型,filed values 就是存储的数据,可以是string、float、integer、boolean。filed set 是 filed keys 和 filed values 的组合。
3)location and scientist 这两列是标签( tags )。tags 由 tag keys 和 tag values 组成。tag keys 和 tag values 都是 string 类型,记录元数据( metadata)。tag key location 有两个值:1、2,tag key scientist 也有两个值:langstroth、perpetua。tag set 是 tag 不同 key-value 的组合。
4)tag 是可选的,且被索引,意味着 tag 查询 比 filed 查询更快。
5) measurement 是 fileds、tags 和 time 的容器,可理解为 SQL 中的 table 表。在这个示例中就是 census 表,表名类型为 string。一个 measurement 可以有不同的保留策略(retention policies),即数据保留多长时间(DURATION)、以及数据在集群中存储多少副本(REPLICATION)。
6) series 是点的集合,由 measurement、tag set、filed key 组成。在这个示例中,就有 8 个 series:


3. 词汇说明

1)filed

字段(fileds)由字段键(filed keys)和字段值(filed values)组成。存储元数据和实际记录的数据,不被索引,所以针对 filed 的查询,查询性能不佳。
2)field key
是 string 类型,存储元数据(metadata)。
3)field value
可以是 string、float、integer、boolean 类型,存储实际的数据。
4)measurement
是 fileds、tags 和 time 的容器,可理解为 SQL 中的 table 表。
5)metastore
包含系统状态的内部信息,包括用户信息、数据库、保留策略、shard metadata、连续查询和订阅。
6)now()
获取本地服务器纳秒级时间戳。
7)point
表示单行数据记录,类似于 SQL 数据库表中行。
包含:a measurement, a tag set, a field key, a field value, and a timestamp。由 series and timestamp 唯一标识。
8)series
由 measurement、tag set、filed key 组成。同一个 series 的数据在物理上会按照时间顺序存储在一起。
9)tag
InfluxDB 数据结构中记录元数据的键值对。tags 由 tag keys 和 tag values 组成。tag keys 和 tag values 都是 string 类型,记录元数据( metadata)。tag 是可选的,且被索引,对 tag 查询是高效的。
10)timestamp
与 point 关联的时间戳。InfluxDB 中的时间都是 UTC 标准。所有的 influxDB 数据库表中都有 time 这一列。
11)batch
points 数据点的批量集合,减少http请求,是的inluxDB API 写入性能更高。
12)bucket
数据存储的位置,与数据库和保留策略相关。
13)continuous query(CQ)
连续查询。一个 influxQL 查询,该查询会在数据库中自动并定期运行。
在 SELECT 语句需要一个函数,且必须包含 GROUP BY time() 语句。
14)database
数据库。是 users、retention policies、continuous queries、time series data 的逻辑容器。
15)aggregation
是一个 influxQL 函数,返回一组 points 的聚合值。
influxQL 的其他函数: docs.influxdata.com/inf

4. influxDB v1.8 下载/安装

下载地址: docs.influxdata.com/inf
mac OS 下载:
brew update brew install influxdb

配置:
influxd -config /etc/influxdb/influxdb.conf

5. influx CLI

前提是本地已安装 InfluxDB open source
1)进入交互式 CLI:
$ influx -precision rfc3339
2)创建数据库
$ CREATE DATABASE mydb
3)查看所有的数据库:
SHOW DATABASES
4)使用特定的数据库(后续命令都是基于该数据库)
USE mydb
5)插入数据
INSERT cpu,host=serverA,region=us_west value=0.64
6)查询数据
SELECT "host", "region", "value" FROM "cpu"

二、InfluxQL

InfluxQL 是一种类似 SQL 的查询语言,用于与 InfluxDB 中的数据交互。

1. 查询

1)常用
官方文档: docs.influxdata.com/inf
常用查询数据库相关语句:

-- 查询数据库
 SHOW DATABASES 
-- 查询数据库中的保留策略
 SHOW RETENTION POLICIES [ON <database_name>]  
-- 查询数据库中的 series 列表
 SHOW SERIES [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> [ '<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause] 
-- 查看所有的 measurement 
 show measurements;
-- 查看一个 measurement 中所有的 tag key 
 show tag keys 
-- 查看一个 measurement 中所有的 field key
 show field keys


常用查询数据相关的语句:

-- 查询表中某个 filed key 非空的数量
 SELECT COUNT("filed key名称") FROM measurement表名
-- 查询10条数据
 select * from measurement_name limit 10;


2)SELECT
语法:语句中必须包含 field_key。

SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]

-- 返回所有 fields 和 tags
 select * FROM <measurement_name>