欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库笔记 InfluxDB 基础概念及操作

程序员文章站 2022-03-09 08:05:30
...

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


数据库笔记 InfluxDB 基础概念及操作