InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
三大特性:
Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
Metrics(度量):你可以实时对大量数据进行计算
Eevents(事件):它支持任意的事件数据
特点:
schemaless(无结构),可以是任意数量的列
Scalable
min, max, sum, count, mean, median 一系列函数,方便统计
Native HTTP API, 内置http支持,使用http读写
Powerful Query Language 类似sql
Built-in Explorer 自带管理工具
基本概念
传统数据库 | Infuxdb |
---|---|
数据库 | database |
表 | measurement |
记录 | point |
Point
point由时间戳(time)、数据(fields)、标签(tags)组成。
Point属性 | 传统数据库中的概念 |
---|---|
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度 |
tags | 各种有索引的属性:地区,海拔 |
** series**
表中所有的tags的组合数据,每个series代表一组数据,参照图表的概念
> show series from h2o_feet
key
---
h2o_feet,location=coyote_creek
h2o_feet,location=santa_monica
基本语法
数据库操作
数据库创建
CREATE DATABASE <database_name> [WITH [DURATION <duration>] [REPLICATION <n>] [SHARD DURATION <duration>] [NAME <retention-policy-name>]]
- DURATION 保存时间
- REPLICATION 复制数量(集群)
- SHARD DURATION 每个分片持续的时间(时间段内所有Point保存在该分片中),SHARD为InfuxDB存储单元
- NAME 数据保留策略名称
如果不指定WITH语句,默认使用autogen
策略:保存时间永久,分片时间1周,复制数量1
数据库删除
DROP DATABASE <database_name>
数据删除
DROP SERIES FROM <measurement_name[,measurement_name]> WHERE <tag_key>='<tag_value>'
或
DELETE FROM <measurement_name> WHERE [<tag_key>='<tag_value>'] | [<time interval>]
删除的条件只能是tag
,field
不支持。其中DELETE
支持time
条件,支持正则表达式语法。
数据保留策略(Retention Policies)
InfluxDB每秒可以处理成千上万条数据,要将这些数据全部保存下来会占用大量的存储空间,有时我们可能并不需要将所有历史数据进行存储,因此,InfluxDB推出了数据保留策略(Retention Policies),用来让我们自定义数据的保留时间??梢灾付ǘ喔霰A舨呗?,如需访问不是默认策略的访问策略需显示指定策略名称。
创建
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
- DURATION 保存时间
- REPLICATION 复制数量(集群)
- SHARD DURATION 每个分片持续的时间(时间段内所有Point保存在该分片中),SHARD为InfuxDB存储单元
如果未指定该值,将按照如下规则创建:
Retention Policy’s DURATION | Shard Group Duration |
---|---|
< 2 days | 1 hour |
>= 2 days and <= 6 months | 1 day |
> 6 months | 7 days |
最小为1小时,如果小于1小时,系统会默认指定为1小时
- DEFAULT 是否默认
修改
ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> SHARD DURATION <duration> DEFAULT
删除
DROP RETENTION POLICY <retention_policy_name> ON <database_name>
连续查询(Continuous Queries)
通过数据保留策略我们可以指定数据存活时间,但超过时间后数据就会被删除,我们不想删除数据,又不想保留所有数据(数据量太大),那我们就可以通过连续查询保留我们想要的数据(比如降低精度存储,原先采样是5s,可以改成5m)
基础语法
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
BEGIN
SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]
END
例子
> SELECT "passengers","complaints" FROM bus_data
name: bus_data
--------------
time passengers complaints
2016-08-28T07:00:00Z 5 9
2016-08-28T07:15:00Z 8 9
2016-08-28T07:30:00Z 8 9
2016-08-28T07:45:00Z 7 9
2016-08-28T08:00:00Z 8 9
2016-08-28T08:15:00Z 15 7
2016-08-28T08:30:00Z 15 7
2016-08-28T08:45:00Z 17 7
2016-08-28T09:00:00Z 20 7
##执行按每1小时保存
> CREATE CONTINUOUS QUERY "cq_basic" ON "transportation" \
BEGIN \
SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h) \
END
##结果
> SELECT * FROM "average_passengers"
name: average_passengers
------------------------
time mean
2016-08-28T07:00:00Z 7
2016-08-28T08:00:00Z 13.75
插入(INSERT)
INSERT <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]