indexDB 学习笔记
influxDB 学习笔记 官方文档:https://docs.influxdata.com/influxdb/v1.8/ 一、 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 的其他函数:https://docs.influxdata.com/influxdb/v1.8/query_language/functions/#aggregations 4、influxDB v1.8 下载/安装 下载地址:https://docs.influxdata.com/influxdb/v1.8/introduction/download/ 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)常用 官方文档:https://docs.influxdata.com/influxdb/v1.8/query_language/explore-schema/ 常用查询数据库相关语句:
-- 查询数据库 SHOW DATABASES
-- 查询数据库中的保留策略 SHOW RETENTION POLICIES [ON <database_name>]
-- 查询数据库中的 series 列表
SHOW SERIES [ON <database_name>] [FROM_clause] [WHERE <tag_key>
-- 查看所有的 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>
-- 返回所有 fields SELECT *::field FROM <measurement_name>
-- 返回 fields 的计算值 SELECT ("<field_key>" * 2) + 4 FROM <measurement_name>
-- 从数据库某种保留策略中的数据表查询 FROM <database_name>.<retention_policy_name>.<measurement_name>
3)WHERE where 语句是基于 fields, tags, and/or timestamps 做数据过滤。其中 OR 两边不能为 time,否则会返回空。 语法: SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
fileds 语法:
field_key
where 语句中 fileds 支持的运算符:
tags 语法:
tag_key
tags 支持的运算符:
关于时间戳: 对于大多数 SELECT 语句,默认时间范围是介于 1677-09-21 00:12:43.145224194 和2262-04-11T23:47:16.854775806Z UTC 之间。对于 SELECT 带有 GROUP BY time() 语句,默认时间范围是 UTC 1677-09-21 00:12:43.145224194 和 UTC now() 之间。 4)GROUP BY 分组展示查询结果。 GROUP BY 语句在 WHERE 语句之后。 GROUP BY 后面可以接 tag_key 或者 时间间隔。(结果就是以时间聚合、或者以 tag_key 聚合后的数据) 语法: — 以 tag 分组 SELECT_clause FROM_clause [WHERE_clause] GROUP BY [* | <tag_key>[,<tag_key]]
— 以时间间隔分组
SELECT
— 所有的 tags 分组 GROUP BY *
— 查询多个 tag 组合 GROUP BY <tag_key>,<tag_key>
时间语法:
4)INTO INTO 语句是将查询结果写到一个单独的表中。 语法:SELECT_clause INTO <measurement_name> FROM_clause [WHERE_clause] [GROUP_BY_clause]
5)LIMIT LIMIT <N> 是将返回结果限制在 N 条 points。 语法:SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] LIMIT <N>
- 数据库管理
- 连续查询
- Functions