Inlfux 时序数据库

安装

安装文档: https://docs.influxdata.com/influxdb/v1.6/introduction/installation/

个人建议使用 Docker 一键启动 (参考: https://hub.docker.com/_/influxdb/)

1
2
3
docker run -p 8086:8086 \
-v $PWD:/var/lib/influxdb \
influxdb

默认查询写入端口 8086, 运维端口 8088.

时间同步: 时序数据库最主要的键值就是时间, 所以必须保证服务器时间与网络 NTP 时间同步.

快速开始

  1. 链接数据库 influx -precision rfc3339, RFC3339 意为使用 YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ 时间格式显示.
  2. 退出 exit
  3. 创建数据库: CREATE DATABASE ${DB_NAME}
  4. 查看可用数据库 SHOW DATABASES
  5. 切换数据库 USE ${DB_NAME}
  6. 查看数据表 SHOW MEASUREMENT, 实际上是某一个度量维度.

插入数据

1
INSERT ${measurement}[,tag=val,...] field=val[,...] [unix-nano-timestamp]

measurement 表示一个度量维度
tag 为建立索引的标记(快速查询)
field 为度量维度上的值
时间戳可选, 默认当前时间, 格式 1434067467000000000

查询数据

与 SQL 的简单 SELECT 无异,
但是必须查询结果中有 field key, 只包含 time 和 tag 是无效的
表/tag/field 名用双引号(或省略), value 用单引号

1
SELECT * / "name" FROM "measurement" WHERE region = 'China'

核心概念

  1. database 数据库
  2. measurement 度量(表), 是 field 值的整体描述
  3. timestamp 时间, 唯一标记, 时间重复的 insert 即为覆盖.
  4. retention policy 用于设置数据存储时间(超出自动删除), 集群中的分片策略等, 参考: 数据库管理, 默认 autogen 数据永不过期, 分片备份 1 份.
  5. point 一条基于时间的数据
  6. series 是 measurement, tag set, retention policy 三者做唯一主键的数据的集合.

TagKey, TagValue => TagSet 索引的键值, 只能是字符串类型, 可供高速查询(一般取值数量有限)
FieldKey, FieldValue => FieldSet 未索引的键值, 可以是字符串/数字/布尔, 根据时间变化的数据

实践建议

tag 建议为 enum 可枚举类型, 不建议存储 uuid 这种数据, 会带来 series 和内存问题.

tag 可以进行 group 分组, field 不可以; field 可以存储丰富的数据类型, 但是 tag 只能是字符串.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.