数据库笔记 InfluxDB 基础概念及操作
文章目录
1 它是什么
InfluxDB is the open source time series database
2 为什么是它!
官网中列出了它的几个重要特点:
- Custom high performance datastore written specifically for time series data. The TSM engine allows for high ingest speed and data compression。采用 TSM 引擎,针对时序类型数据写入进行了优化。
- Written entirely in Go. It compiles into a single binary with no external dependencies. 没有外部依赖。
- Simple, high performing write and query HTTP APIs.
- Plugins support for other data ingestion protocols such as Graphite, collectd, and OpenTSDB.
- Expressive SQL-like query language tailored to easily query aggregated data. 类 SQL 查询语言。
- Tags allow series to be indexed for fast and efficient queries.采用 Tags 进行快速高效查询。
- Retention policies efficiently auto-expire stale data.
- Continuous queries automatically compute aggregate data to make frequent queries more efficient.
开源版本的 InfluxDB 只有一个节点。如果有高可用的需求,可考虑企业版本。
一句话:InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
3 安装
安装要求
https://docs.influxdata.com/influxdb/v1.7/introduction/installation/
要求如下端口:
- 8086 HTTP API port
- 8083 Administrator interface port, if it is enabled
- 2003 Graphite support, if it is enabled
InfluxDB 采用主机的时间进行时序数据记录,需要本机支持 NTP。
使用 Docker 镜像快速安装
https://hub.docker.com/_/influxdb?tab=description
运行容器:$ docker run --name=influxdb -d -p 8086:8086 influxdb
在容器中运行 client:$ docker exec -it influxdb influx
4 基础介绍
基础概念
先掌握 InfluxDB 的几个基本概念。
时间序列是由 0到多个 points
来组成,points 是由以下元素组成:
- 1个
time
(时间戳) - 1个
measurement
(例如“cpu_load”,仅仅是字符串表示的名称,测量值的名称) - 至少1个键值对
field
(例如“value=0.64” 或 “temperature=21.2”,是测量值的值本身) - 0到多个的
tag
(例如“host=server01”, “region=EMEA”, “dc=Frankfurt”,表示测量的一些元数据)
time
是主索引;measurement
相当于 SQL 的表;field
是 SQL 的列,没有被建立索引;tag
被建立的索引,可以通过它来查询;
InfluxDB line protocol
points
写入 InfluxDB 是按照 InfluxDB line protocol 语法,具体格式如下:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
如下是一个示例:
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
示例中有4个 point
,第1个 point
中:
-
measurement
为 cpu -
tag
为 host=serverA,region=us_west -
field
为 value=0.64
5 入门
InfluxDB 的基础使用可以查看官方的入门教程,这是命令行的操作,也支持 HTTP 直接写入和查询,可以查看 curl
示例。
命令行的进入和退出
在终端中使用 influx
命令可以进入 InfluxDB client 的命令行工具,会连接到本地的 InfluxDB 实例。接下来就可以使用 Influx Query Language (a.k.a InfluxQL) 语句。
如果想要退出 InfluxQL shell,输入 exit
就可以退出。
创建数据库
使用如下 InfluxQL 语句:CREATE DATABASE <db-name>
例如:
> CREATE DATABASE mydb
>
SHOW DATABASES
可以查看所有数据库。
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>
_internal
数据库是 InfluxDB 的内部监控日志。
我们通常要操作某个具体数据库,可以在每次 QL 语句的后面加上具体的数据库名。也可以直接进入具体数据库,使用语句 USE <db-name>
。
> USE mydb
Using database mydb
>
写入数据
> INSERT cpu,host=serverA,region=us_west value=0.64
>
查看数据
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
---------
time host region value
2015-10-21T19:28:07.580664347Z serverA us_west 0.64
>
当我们 INSERT 时没有携带时间戳的话,就会以当时的时间作为该数据的时间戳。
试试插入两个 field
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
>
查询下结果:
> SELECT * FROM "temperature"
name: temperature
-----------------
time external internal machine type
2015-10-21T19:28:08.385013942Z 25 37 unit42 assembly
6 手动初始化数据库
在 dockerhub 的镜像介绍页面有介绍了如果进行 InfluxDB 的配置以及手动初始化的实用操作。
$ docker run --rm \
-e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=supersecretpassword \
-e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=secretpassword \
-v $PWD:/var/lib/influxdb \
influxdb /init-influxdb.sh
我们进入到 influxdb 的容器内,发现根目录下确实有一个 init-influxdb.sh
的脚本,它会根据环境变量来创建用户和数据库。
# docker exec -it influxdb bash
aaa@qq.com:/# ls
bin boot dev entrypoint.sh etc home init-influxdb.sh lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
这里对手动初始化的步骤进行个验证,实践如下:
# mkdir InfluxDB
# cd InfluxDB/
# sudo docker run --rm\
-e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=supersecretpassword \
-e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=secretpassword \
-v $PWD:/var/lib/influxdb \
influxdb /init-influxdb.sh
# ls
data meta
# docker run --name=influxdb -d -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb
#
在运行这条命令后,目录下确实增加了一些文件,再次进入到容器中查看,确实增加了 db0。
7 小结
这篇笔记中介绍了 InfluxDB 的特点和基础概念,进行了 Docker 容器的安装和入门基础操作。
END
上一篇: 数据库概念总结
下一篇: Access字符串处理函数整理