InfluxDB | 入门指南
Contents
通过命令行工具 influx 完成数据库的创建和读写练习
入门指南
这部分内容主要通过 influx
(CLI) 工具操作 influxdb 数据库,即:创建数据库和读写数据。
说明:也可以直接发送裸的HTTP请求来操作数据库,例如 curl
通过这些操作,先简单熟悉一下 influxdb 相关内容,然后带着这些初步认识,再去学习其概念等知识
创建数据库
用
influx
命令连接到influxd
服务,进入交互式 shell:1 2 3 4
$ influx Connected to http://localhost:8086 version 1.7.0~n201807280800 InfluxDB shell version: 1.7.0~n201807280800 >
Note: InfluxDB 的 HTTP 接口默认起在 8086 上,所以 inlux 默认也是连的本地的 8086 端口,你可以通过 influx –help 来看怎么修改默认值。
查看 influx 交互式 shell 下的命令列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
> help Usage: connect <host:port> connects to another node specified by host:port auth prompts for username and password pretty toggles pretty print for the json format chunked turns on chunked responses from server chunk size <size> sets the size of the chunked responses. Set to 0 to reset to the default chunked size use <db_name> sets current database format <format> specifies the format of the server responses: json, csv, or column precision <format> specifies the format of the timestamp: rfc3339, h, m, s, ms, u or ns consistency <level> sets write consistency level: any, one, quorum, or all history displays command history settings outputs the current settings for the shell clear clears settings such as database or retention policy. run 'clear' for help exit/quit/ctrl+d quits the influx shell show databases show database names show series show series information show measurements show measurement information show tag keys show tag key information show field keys show field key information A full list of influxql commands can be found at: https://docs.influxdata.com/influxdb/latest/query_language/spec/
创建数据库:mydb
1 2 3 4 5 6 7
> CREATE DATABASE mydb > show databases name: databases name ---- _internal mydb
Note: _internal 是由 influxdb 创建,用来存储其内部运行时指标数据的数据库。
使用
use
命令切换到 mydb,切换成功后所有的命令将使用在 mydb 数据库上use mydb Using database mydb
读写数据
首先对数据存储的格式做个入门介绍:
InfluxDB 中的数据按时间序列进行组织,其中包含一个测量值,如 “cpu_load” 或 “temperature”。时序数据有零个或多个数据点(points), 每一个都是一个离散的度量样本。数据点(Points)包括:
time
(时间戳)、- a
measurement
(指标: cpu_load)、 - 至少一个 k-v 格式的
field
(即测量值本身, 例如:value=0.64, or temperature=21.2)、 - 零个或多个
tag
,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。
在概念上来讲,你可以将一个
measurement
(测量) 看作是 SQL 表, 其中primary index
主索引始终是时间。tags
和fields
实际上是表格中的列。 tags 是被索引起来的,而 fields 没有。不同之处在于,在 InfluxDB 里,你可以有几百万的 measurements,你不用事先定义数据的 scheme,并且 null 值不会被存储。
将数据点写入 influxdb, 只需要遵守如下
行协议
:1
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
下面是数据写入InfluxDB的格式示例:
cpu,host=serverA,region=us_west value=0.64 payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230 stock,symbol=AAPL bid=127.46,ask=127.48 temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
说明:关于写入格式的更多语法,请参考写入语法这一章
使用CLI插入单条的时间序列数据到InfluxDB中, 输入 INSERT,后跟一个 Point
1 2
> INSERT cpu,host=serverA,region=us_west value=0.64 >
这样,一个
measurement
为 cpu,tag
为host
和region
,测量值value
为0.64
的数据点point
就被写入了 InfluxDB现在我们将查询刚才写的数据:
1 2 3 4 5 6 7
> SELECT host,region,value FROM cpu name: cpu time host region value ---- ---- ------ ----- 1532889113525004206 serverA us_west 0.64 1532889224748413400 serverB us_east 0.56 >
说明:我们在写入的时候没有包含时间戳,当没有带时间戳的时候,InfluxDB会自动添加本地的当前时间作为它的时间戳。
让我们尝试存储另一种类型的数据,在同一测量中有两个字段:
1 2
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37 >
要使用查询返回所有字段和标记,可以使用*运算符:
1 2 3 4 5
> SELECT * FROM temperature name: temperature time external internal machine type ---- -------- -------- ------- ---- 1532889736591859552 25 37 unit42 assemly
Warning: Using * without a LIMIT clause on a large database can cause performance issues. You can use Ctrl+C to cancel a query that is taking too long to respond.
InfluxQL还有很多特性和用法没有被提及,包括支持golang样式的正则,例如:
1 2 3 4 5
> SELECT * FROM /.*/ LIMIT 1 -- > SELECT * FROM "cpu_load_short" -- > SELECT * FROM "cpu_load_short" WHERE "value" > 0.9
See Also
Thanks to the authors 🙂