InfluxDB是一个开源分布式的时间序列、事件和指标数据库。使用 GoLand 编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
influxDB | MySQL | 描述 |
---|---|---|
database | database | 数据库 |
measuremen | table | 数据表 |
points | row | 数据行 |
InfluxDB中独有的概念
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据,如下表所示:
Point | 描述 |
---|---|
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性) |
tags | 各种有索引的属性 |
从概念上讲,您可以将 measurement 视为一个SQL表,其中主索引始终是时间。 tags并且fields是表中的有效列。 tags被编入索引,而fields不是。不同之处在于,使用InfluxDB,您可以进行数百万次测量,您不必预先定义模式,也不会存储空值。
入门实践
root@a0bfadf454e6:/# ./usr/bin/influx
Connected to http://localhost:8086 version 1.7.4
InfluxDB shell version: 1.7.4
Enter an InfluxQL query
>
显示所有数据库:
> SHOW DATABASES
name: databases
name
----
_internal
TestDataBase
DeviceManage
创建数据库:
CREATE DATABASE "db_name"
删除数据库:
DROP DATABASE "db_name"
新增一条数据:
语法格式:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
INSERT Device,host=Server_1,region=ck value=740
以下几行都是可以写入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
使用数据库:
> USE TestDataBase
Using database TestDataBase
显示数据库中所有数据表:
> SHOW MEASUREMENTS
name: measurements
name
----
Device
显示数据表中所有数据:
> SELECT * FROM "Device"
name: Device
time host region value
---- ---- ------ -----
1551838714809273800 Server_1 zh 510
1551838773182374400 Server_1 ck 740
1551838784114047000 Server_1 sz 880
1551838793649884400 Server_1 df 245
1551838808490581100 Server_1 bj 543
1551839343592639700 Server_1 kd 324
1551839352626367200 Server_1 cc 674
1551839361132222700 Server_1 gk 932
1551839370771752200 Server_1 kk 633
警告:在大型数据库上使用*不带LIMIT子句可能会导致性能问题。您可以使用Ctrl+C取消响应时间过长的查询。
> SELECT * FROM /.*/ LIMIT 1
> SELECT * FROM /.*/ WHERE "value" > 0.9
实例:
# 查询最新的三条数据
SELECT * FROM "Device" ORDER BY time DESC LIMIT 3
在InfluxDB中并没有提供数据的删除与修改方法。不过我们可以通过数据保存策略(Retention Policies)来实现删除。
查看当前数据库的Retention Policies:
SHOW RETENTION POLICIES ON "DataBase_Name"
创建新的Retention Policies:
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 30d REPLICATION 1 DEFAULT
- rp_name:策略名
- db_name:具体的数据库名
- 30d:保存30天,30天之前的数据将被删除
- 它具有各种时间参数,比如:h(小时),w(星期)
- REPLICATION 1:副本个数,这里填1就可以了
- DEFAULT 设为默认的策略
修改Retention Policies:
ALTER RETENTION POLICY "rp_name" ON db_name" DURATION 3w DEFAULT
删除Retention Policies:
DROP RETENTION POLICY "rp_name" ON "db_name"
删除数据表:
DROP MEASUREMENT "measurementName"
网友评论