前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一小时入门时序数据库 influxDB

一小时入门时序数据库 influxDB

作者头像
陈大剩博客
发布2023-03-06 09:04:54
9940
发布2023-03-06 09:04:54
举报
文章被收录于专栏:陈大剩博客专栏

InfluxDB介绍

InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 主要特性有:

  • 内置HTTP接口,使用方便
  • 数据可以打标记,这样查询可以很灵活
  • 类SQL的查询语句
  • 安装管理很简单,并且读写数据很高效
  • 能够实时查询,数据在写入时被索引后就能够被立即查出
  • ……

InfluxDB提供多种操作方式:

  1. 客户端命令行方式
  2. HTTP API接口
  3. 各语言API库
  4. 基于WEB管理页面操作

安装

准备

安装InfluxDB包需要root或是有管理员权限才可以。

RedHat & CentOS

RedHat和CentOS用户可以直接用yum包管理来安装最新版本的InfluxDB。

代码语言:javascript
复制
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

一旦加到了yum源里面,就可以运行下面的命令来安装和启动InfluxDB服务:

代码语言:javascript
复制
sudo yum install influxdb
sudo service influxdb start

如果你的系统可以使用Systemd(比如CentOS 7+, RHEL 7+),也可以这样启动:

代码语言:javascript
复制
sudo yum install influxdb
sudo systemctl start influxdb

配置

安装好之后,每个配置文件都有了默认的配置,你可以通过命令influxd config来查看这些默认配置。

在配置文件/etc/influxdb/influxdb.conf之中的大部分配置都被注释掉了,所有这些被注释掉的配置都是由内部默认值决定的。配置文件里任意没有注释的配置都可以用来覆盖内部默认值,需要注意的是,本地配置文件不需要包括每一项配置。

有两种方法可以用自定义的配置文件来运行InfluxDB:

  • 运行的时候通过可选参数-config来指定:
代码语言:javascript
复制
influxd -config /etc/influxdb/influxdb.conf
  • 设置环境变量INFLUXDB_CONFIG_PATH来指定,例如:
代码语言:javascript
复制
echo $INFLUXDB_CONFIG_PATH
/etc/influxdb/influxdb.conf


influxd

相关概念

对常见关系型数据库(MySQL)的基础概念对比

概念

MySQL

InfluxDB

数据库(同)

database

database

表(不同)

table

measurement

列(不同)

column

tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键)

创建数据库

代码语言:javascript
复制
# 执行influx连接到本地的InfluxDB实例上
influx -precision rfc3339

# 创建数据库
CREATE DATABASE mydb

# 显示有哪些数据库
SHOW DATABASES

# 删除数据库
SHOW DATABASES mydb

# 使用指定数据库
use mydb

Measurement(表) 操作

代码语言:javascript
复制
# 显示所有表
SHOW MEASUREMENTS

# 创建表
INSERT  cpu,host=serverA,region=us_west value=0.64 

# 删除表
DROP MEASUREMENTS cpu

写入数据

InfluxDB里存储的数据被称为时间序列数据,其包含一个数值,就像CPU的load值或是温度值类似的。时序数据有零个或多个数据点,每一个都是一个指标值。数据点包括 time (一个时间戳),measurement (例如cpu_load),至少一个k-v格式的 field (也即指标的数值例如 “value=0.64”或者“temperature=21.2”),零个或多个 tag,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。

在概念上,你可以将 measurement 类比于SQL里面的table,其主键索引总是时间戳。tagfield 是在table里的其他列,tag 是被索引起来的,field 没有。不同之处在于,在InfluxDB里,你可以有几百万的measurements,你不用事先定义数据的scheme,并且null值不会被存储。

将数据点写入InfluxDB,只需要遵守如下的行协议:

代码语言:javascript
复制
# measurement 类比于SQL里面的table
# <tag-key>=<tag-value> 类似于索引
# <field-key>=<field-value> 普通字段
# [unix-nano-timestamp] UTC时间戳
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

下面是数据写入InfluxDB的格式示例:

代码语言:javascript
复制
# measurement(table):cpu tags(index):host region field:value timestamp:默认
INSERT  cpu,host=serverA,region=us_west value=0.64 

# measurement(table):payment tags(index):device product method field:billed licenses timestamp:1434067467100293230
INSERT  payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230

# measurement(table):stock tags(index):symbol  field:ask timestamp:默认
INSERT stock,symbol=AAPL bid=127.46,ask=127.48

InfluxDB 无需向sql一样创建;INSERT时不存在则为创建表

读取数据

代码语言:javascript
复制
# 查询语句格式
SELECT DISTINCT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]

# 示例 *可查所有字段 database(数据库) autogen(存储策略) measurement(表)
select *::field,*::tag from "database"."autogen"."measurement"

请注意观察select中field子句一定在tag子句前

WHERE子句

WHERE子句用作field,tag和timestamp的过滤。

语法
代码语言:javascript
复制
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
语法描述

WHERE子句在field,tag和timestamp上支持conditional_expressions.

fields
代码语言:javascript
复制
field_key <operator> ['string' | boolean | float | integer]

WHERE子句支持field value是字符串,布尔型,浮点数和整数这些类型。

WHERE子句中单引号来表示字符串字段值。具有无引号字符串字段值或双引号字符串字段值的查询将不会返回任何数据,并且在大多数情况下也不会返回错误。

支持的操作符:

= 等于 <> 不等于 != 不等于 > 大于 >= 大于等于 < 小于 <= 小于等于

tags
代码语言:javascript
复制
tag_key <operator> ['tag_value']

WHERE子句中的用单引号来把tag value引起来。具有未用单引号的tag或双引号的tag查询将不会返回任何数据,并且在大多数情况下不会返回错误。

支持的操作符:

= 等于 <> 不等于 != 不等于

timestamps

对于大多数SELECT语句,默认时间范围为UTC的1677-09-21 00:12:43.1452241942262-04-11T23:47:16.854775806Z。 对于只有GROUP BY time()子句的SELECT语句,默认时间范围在UTC的1677-09-21 00:12:43.145224194now()之间。

schema查询语法

InfluxQL是一种类似SQL的查询语言,用于与InfluxDB中的数据进行交互。下面我们要介绍一些有用的查询schema的语法:

代码语言:javascript
复制
# 返回当前实例上的所有的数据库
SHOW DATABASES

# 返回指定数据库的保留策略的列表
SHOW RETENTION POLICIES

# 返回指定数据库的series列表
SHOW SERIES

# 返回指定数据库的measurement列表
SHOW MEASUREMENTS

# 返回指定数据库的tag key列表
SHOW TAG KEYS

# 返回数据库中指定tag key的tag value列表
SHOW TAG VALUES

# 返回field key以及其field value的数据类型
SHOW FIELD KEYS
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • InfluxDB介绍
  • 安装
    • 准备
      • RedHat & CentOS
      • 配置
      • 相关概念
        • 对常见关系型数据库(MySQL)的基础概念对比
        • 创建数据库
        • Measurement(表) 操作
        • 写入数据
        • 读取数据
          • WHERE子句
            • 语法
            • 语法描述
        • schema查询语法
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档