初识InfluxDB

原创 2018-07-18 16:05 阅读(223)次

如果对时序数据库概念还不是很了解,建议先看我的上一篇文章 What is a Time Series Database?

InfluxDB主要用来对大量带时间戳数据的存储,包括DevOps监控,应用程序metrics,物联网传感器数据和实时分析。 通过配置InfluxDB以保持数据达到规定的时间长度,自动删除过期数据,从而节省机器空间。 InfluxDB还提供类似SQL的查询语言,用于与数据交互

它用GO编写,所以编译后是没有对外部依赖的二进制文件。

它具有高性能,对相同的数据有高吞吐量的插入,压缩和实施查询。TSM引擎允许高吞吐量的数据插入和数据压缩。

它提供了高性能的API和HTTP/S的接口调用,并支持很多数据插入插件。它的tags(是相对field而言的一种字段类型,详细见下文)支持index来实现快速查询,支持连续查询自动计算聚合数据等。


目前的版本是1.5 。作为 TICK stack的一部分。开源版本目前只支持单点运行。企业版支持分布式。

下面是一个influxDB的一小部分数据样例


name: census
-————————————
time                                      butterflies     honeybees     location     scientist
2015-08-18T00:00:00Z      12                   23                    1                 langstroth
2015-08-18T00:00:00Z      1                     30                    1                 perpetua
2015-08-18T00:06:00Z      11                   28                    1                 langstroth
2015-08-18T00:06:00Z      3                     28                    1                 perpetua
2015-08-18T05:54:00Z      2                     11                    2                 langstroth
2015-08-18T06:00:00Z      1                     10                    2                 langstroth
2015-08-18T06:06:00Z      8                     23                    2                 perpetua
2015-08-18T06:12:00Z      7                     22                    2                 perpetua


time列是时间戳,butterflies,honeybees是field key, location,scientist是tag key。

time是所有数据都有的列。field key 是字段名,对应的是值就是field value,可以是字符串,数字或者bool型。

而field key 和field value就组成了field set。这里只是举例,任何字段都可以作为field或者tag,视业务情况而定。

butterflies = 12 honeybees = 23
butterflies = 1 honeybees = 30

你的数据不能没有fields。但 fields并未被索引。当以field进行查询条件的时候,会造成对全局的扫描。所以influxDB不建议用来做查询条件,否则性能不高。

而tag key 和tag value则组成了tag set,两者都被存储为字符串。如

location = 1, scientist = langstroth
location = 2, scientist = langstroth

跟field必须存在不同,tag是可选的。但tag是索引的,作为查询条件性能高,所以一般作为常用查询条件,一般还是要包含。

measurement 相当于传统数据库的表,是数据的容器。而数据的过期策略和副本数就是以measurement 作为设置的主体。上面例子中name: census就是表示了measurement 的名称。副本不适用单节点,也就是开源版本。

默认数据的是采用无限保存时间策略,自动保留策略autogen。

InfluxDB还有一个series概念,series是一个包含了保存policy,measurement,tag set。如下

Arbitrary series number Retention policy Measurement Tag set
series 1                         autogen census location = 1,scientist = langstroth
series 2                         autogen census location = 2,scientist = langstroth
series 3                         autogen census location = 1,scientist = perpetua
series 4                         autogen census location = 2,scientist = perpetua

特别注意:在上面的8条记录的样本数据中,只有4个series。为什么?

series可以理解成是相同Retention policy,Measuremen,Tag set的去重记录。类似sql的distinct的结果。

理解series对于在InfluxDB上设计schema至关重要。

point概念:是在同一个时间戳上同一个series中的field set。

如下:

name: census
-----------------
time                    butterflies honeybees   location    scientist
2015-08-18T00:00:00Z    1           30          1           perpetua
point就是相当于之前对Retention policy,Measuremen,Tag set做了distinct处理中的某条具体数据记录。


在数据表之上的就是数据库,database,这是相当于一个逻辑container,服务于用户,保存策略,连续查询和数据。

InfluxDB是一个无模式(schemaless)的数据库,意味着随时轻松添加新的 measurements, tags, and fields

本文完。

本站作品的版权皆为作品作者所有。

本站文字和内容为本站编辑或翻译,部分内容属本站原创,所以转载前务必通知本站并以超链接形式注明内容来自本站,否则以免带来不必要的麻烦。

本站内容欢迎分享,但拒绝有商业目的的转载!