前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库笔记 InfluxDB 基础概念及操作

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

作者头像
twowinter
发布2020-04-17 11:35:01
9030
发布2020-04-17 11:35:01
举报
文章被收录于专栏:twowintertwowinter

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 语法,具体格式如下:

代码语言:javascript
复制
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

如下是一个示例:

代码语言:javascript
复制
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>

例如:

代码语言:javascript
复制
> CREATE DATABASE mydb
>

SHOW DATABASES 可以查看所有数据库。

代码语言:javascript
复制
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>

_internal 数据库是 InfluxDB 的内部监控日志。

我们通常要操作某个具体数据库,可以在每次 QL 语句的后面加上具体的数据库名。也可以直接进入具体数据库,使用语句 USE <db-name>

代码语言:javascript
复制
> USE mydb
Using database mydb
>

写入数据

代码语言:javascript
复制
> INSERT cpu,host=serverA,region=us_west value=0.64
>

查看数据

代码语言:javascript
复制
> 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

代码语言:javascript
复制
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
>

查询下结果:

代码语言:javascript
复制
> SELECT * FROM "temperature"
name: temperature
-----------------
time		                        	 external	  internal	 machine	type
2015-10-21T19:28:08.385013942Z  25	        	37     		unit42  assembly

6 手动初始化数据库

dockerhub 的镜像介绍页面有介绍了如果进行 InfluxDB 的配置以及手动初始化的实用操作。

代码语言:javascript
复制
$ 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 的脚本,它会根据环境变量来创建用户和数据库。

代码语言:javascript
复制
# docker exec -it influxdb bash
root@ad46f1238d2a:/# 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

这里对手动初始化的步骤进行个验证,实践如下:

代码语言:javascript
复制
# 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 它是什么
  • 2 为什么是它!
  • 3 安装
    • 安装要求
      • 使用 Docker 镜像快速安装
      • 4 基础介绍
        • 基础概念
          • InfluxDB line protocol
          • 5 入门
            • 命令行的进入和退出
              • 创建数据库
                • 写入数据
                  • 查看数据
                    • 试试插入两个 field
                    • 6 手动初始化数据库
                    • 7 小结
                    • END
                    相关产品与服务
                    容器镜像服务
                    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档