一小时入门时序数据库 influxDB

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

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。

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服务:

sudo yum install influxdb
sudo service influxdb start

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

sudo yum install influxdb
sudo systemctl start influxdb

配置

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

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

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

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

相关概念

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

概念 MySQL InfluxDB
数据库(同) database database
表(不同) table measurement
列(不同) column tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键)

创建数据库

# 执行influx连接到本地的InfluxDB实例上
influx -precision rfc3339
# 创建数据库
CREATE DATABASE mydb
# 显示有哪些数据库
SHOW DATABASES
# 删除数据库
SHOW DATABASES mydb
# 使用指定数据库
use mydb

Measurement(表) 操作

# 显示所有表
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,只需要遵守如下的行协议:

# 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的格式示例:

# 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时不存在则为创建表

读取数据

# 查询语句格式
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的过滤。

语法

SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]

语法描述

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

fields
field_key <operator> ['string' | boolean | float | integer]

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

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

支持的操作符:

= 等于

<> 不等于

!= 不等于

> 大于

>= 大于等于

< 小于

<= 小于等于

tags
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的语法:

# 返回当前实例上的所有的数据库
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

参考

InfluxDB中文文档

目录
相关文章
|
23天前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
32 3
SpringBoot入门 - 添加内存数据库H2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
49 4
SpringBoot入门(4) - 添加内存数据库H2
|
4月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
382 0
|
12天前
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
39 1
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
36 2
SpringBoot入门(4) - 添加内存数据库H2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
66 13
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
43 4
|
2月前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
152 6
|
2月前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
133 2
|
2月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)

热门文章

最新文章