1. introduce #
InfluxDB是一个用于存储和分析时间序列数据的开源数据库。 主要特性有:
- 内置HTTP接口,使用方便
- 数据可以打标记,这样查询可以很灵活
- 类SQL的查询语句
- 安装管理很简单,并且读写数据很高效
- 能够实时查询,数据在写入时被索引后就能够被立即查出
- …
2. concept #
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其中census是measurement,butterflies和honeybees是field key,location和scientist是tag key。
- measurement可以理解为表名,这里的measurement为census,可以表示为统计表。
- field为列,butterflies
和honeybees 都是列,称为fields,fields由field key和field value组成。field key(butterflies和honeybees)都是字符串,他们存储元数据;field keybutterflies告诉我们蝴蝶的计数从12到7;field keyhoneybees告诉我们蜜蜂的计数从23变到22。field value就是你的数据,它们可以是字符串、浮点数、整数、布尔值,因为InfluxDB是时间序列数据库,所以field value总是和时间戳相关联。field是InfluxDB数据结构所必需的一部分——在InfluxDB中不能没有field。还要注意,field是没有索引的。如果使用field value作为过滤条件来查询,则必须扫描其他条件匹配后的所有值。因此,这些查询相对于tag上的查询(下文会介绍tag的查询)性能会低很多。 一般来说,字段不应包含常用来查询的元数据。 - 样本数据中的最后两列(
location和scientist)就是tag。 tag由tag key和tag value组成。tag key和tag value都作为字符串存储,并记录在元数据中。示例数据中的tag key是location和scientist。location有两个tag value:1和2。scientist还有两个tag value:langstroth和perpetua。 - series是共同retention policy,measurement和tag set的集合
- point简单地理解为时间轴上的一个数据点,即一行数据。
3. grammar #
读取数据 -> InfluxQL的select语句来自于SQL中的select形式:
SELECT <stuff> FROM <measurement_name> WHERE <some_conditions>写入数据 -> InfluxDB的行协议是一种写入数据点到InfluxDB的文本格式
3. retention policy #
3. InfluxDB不是一个crud数据库 #
单拿一个point的数据来看,例如:在星期二UTC时间为12:38:35时根据某个用户的电脑CPU利用率为12%,这个很难得出什么结论。只有跟其他的series结合并可视化时,它变得更加有用。随着时间的推移开始显现的趋势,是我们从这些数据里真正想要看到的。另外,时间序列数据通常是一次写入,很少更新。
结果是,由于优先考虑create和read数据的性能而不是update和delete,InfluxDB不是一个完整的CRUD数据库,更像是一个CR-ud。