InfuxDB简介

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),用来让我们自定义数据的保留时间。可以指定多个保留策略,如需访问不是默认策略的访问策略需显示指定策略名称。
创建

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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容