安装
安装文档: https://docs.influxdata.com/influxdb/v1.6/introduction/installation/
个人建议使用 Docker 一键启动 (参考: https://hub.docker.com/_/influxdb/)
1 | docker run -p 8086:8086 \ |
默认查询写入端口 8086, 运维端口 8088.
时间同步: 时序数据库最主要的键值就是时间, 所以必须保证服务器时间与网络 NTP 时间同步.
快速开始
- 链接数据库
influx -precision rfc3339
, RFC3339 意为使用YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ
时间格式显示. - 退出
exit
- 创建数据库:
CREATE DATABASE ${DB_NAME}
- 查看可用数据库
SHOW DATABASES
- 切换数据库
USE ${DB_NAME}
- 查看数据表
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' |
核心概念
- database 数据库
- measurement 度量(表), 是 field 值的整体描述
- timestamp 时间, 唯一标记, 时间重复的 insert 即为覆盖.
- retention policy 用于设置数据存储时间(超出自动删除), 集群中的分片策略等, 参考: 数据库管理, 默认
autogen
数据永不过期, 分片备份 1 份. - point 一条基于时间的数据
- series 是 measurement, tag set, retention policy 三者做唯一主键的数据的集合.
TagKey, TagValue => TagSet 索引的键值, 只能是字符串类型, 可供高速查询(一般取值数量有限)
FieldKey, FieldValue => FieldSet 未索引的键值, 可以是字符串/数字/布尔, 根据时间变化的数据
实践建议
tag 建议为 enum 可枚举类型, 不建议存储 uuid 这种数据, 会带来 series 和内存问题.
tag 可以进行 group 分组, field 不可以; field 可以存储丰富的数据类型, 但是 tag 只能是字符串.