时序数据库-11-[influxdb]的安装及使用

参考influxdb中文文档
参考时间序列数据库排名db-engines
参考Python操作InfluxDB指南

1 influxdb简介

InfluxDB是一个用于存储和分析时间序列数据的开源数据库。

InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。InfluxDB 包括用于存储和查询数据,在后台处理ETL或监视和警报目的,用户仪表板以及可视化和探索数据等的API。

1.1 功能

用途:处理时间序列数据。
(1)专为时间序列数据编写的自定义高性能数据存储。 TSM引擎允许高摄取速度和数据压缩。
(2)完全用 Go 语言编写。 它编译成单个二进制文件,没有外部依赖项。
(3)简单,高性能的写入和查询HTTP API。
(4)插件支持其他数据提取协议,如Graphite,collectd和OpenTSDB。
(5)专为类似SQL的查询语言量身定制,可轻松查询聚合数据。
(6)标签允许对系列进行索引以实现快速有效的查询。
(7)保留策略有效地自动使过时数据过期。
(8)连续查询自动计算聚合数据,以提高频繁查询的效率。

InfluxDB 的开源版本只支持一个节点。

2 Centos7安装InfluxDB

安装InfluxDB最新的稳定版本yum包管理器。
RHEL一般指Red Hat Enterprise Linux。
Red Hat公司发布的面向企业用户的Linux操作系统。

2.1 安装

#vi /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

#yum search influxdb
#yum list influxdb查看可安装版本【1.8.6-1】
#yum install influxdb
#systemctl enable influxdb开机自启动
#systemctl start influxdb
#systemctl status influxdb

安装完成后的配置文件/etc/influxdb/influxdb.conf。

/usr/bin/influxd    influxdb服务器
/usr/bin/influx     influxdb命令行客户端
/usr/bin/influx_inspect  查看工具
/usr/bin/influx_stress  压力测试工具
/usr/bin/influx_tsm  数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)

/var/lib/influxdb/data  存放最终存储的数据,文件以.tsm结尾
/var/lib/influxdb/meta  存放数据库元数据
/var/lib/influxdb/wal  存放预写日志文件

/var/log/influxdb/influxd.log  日志文件

/etc/influxdb/influxdb.conf  配置文件

/var/run/influxdb/influxd.pid  PID文件

2.2 修改配置文件

(1)创建数据目录
#mkdir -p /data/influxdb
#chmod -R 777 /data
(2)修改数据存储和绑定地址
#vi /etc/influxdb/influxdb.conf
找到如下配置并修改或取消注释:

[meta]
	dir = "/data/influxdb/meta"
[data]
	dir = "/data/influxdb/data"
	wal-dir = "/data/influxdb/wal"
[http]
  bind-address = ":8086"

注意:如果influxdb安装在hadoop主机上,因为8088的端口是yarn的默认端口,influxdb主服务的端口也是8088。为避免两者冲突,把其中一个端口号修改为8086。
#systemctl start influxdb启动

3 使用

3.1 存储数据格式

InfluxDB里存储的数据被称为时间序列数据,其包含一个数值,就像CPU的load值或是温度值类似的。
时序数据有零个或多个数据点,每一个都是一个指标值。

数据点包括:
(1)time(一个时间戳),
(2)measurement(例如cpu_load),
(3)零个或多个tag,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt),
(4)至少一个k-v格式的field(也即指标的数值例如 “value=0.64”或者“temperature=21.2”)。

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

<measurement>逗号
[,<tag-key>=<tag-value>...]空格 
<field-key>=<field-value>[,<field2-key>=<field2-value>...]空格 
[unix-nano-timestamp]

3.2 命令行

#influx打开客户端
>show databases
>create database mytest
>use mytest
>insert cpu,host=serverA,region=us value=0.64
>select host,region,value from cpu
>select "host","region","value" from "cpu"
>select * from cpu
>quit

当没有带时间戳的时候,InfluxDB会自动添加本地的当前时间作为它的时间戳。

InfluxDB是一个无模式(schemaless)的数据库,你可以在任意时间添加measurement,tags和fields。注意:如果你试图写入一个和之前的类型不一样的数据(例如,filed字段之前接收的是数字类型,现在写了个字符串进去),那么InfluxDB会拒绝这个数据。

3.3 使用內建的HTTP接口写入数据

3.3.1 创建数据库

#使用POST方式发送到URL的/query路径,参数q为创建数据库
# curl -i -X POST http://10.23.241.202:8086/query --data-urlencode "q=create database mydb"

3.3.2 写入数据

通过HTTP接口POST数据到/write路径是我们往InfluxDB写数据的主要方式。

# curl -i -XPOST 'http://10.23.241.202:8086/write?db=mytest' --data-binary 'cpu,host=server01,region=uk value=0.96 1434055562000000000'

写入这条数据点的时候,必须明确存在一个数据库对应名字是db参数的值。
POST的请求体我们称之为Line Protocol,包含了希望存储的时间序列数据。
它的组成部分有measurement,tags,fields和timestamp。

measurement是InfluxDB必须的,严格地说,tags是可选的,但是对于大部分数据都会包含tags用来区分数据的来源,让查询变得容易和高效。

tag的key和value都必须是字符串。
fields的key也是必须的,而且是字符串,默认情况下field的value是float类型的。

timestamp在这个请求行的最后,是一个从1/1/1970 UTC开始到现在的一个纳秒级的Unix time,它是可选的,如果不传,InfluxDB会使用服务器的本地的纳米级的timestamp来作为数据的时间戳,注意无论哪种方式,在InfluxDB中的timestamp只能是UTC时间。

世界协调时间 (UTC),Coordinated Universal Time(UTC) 。

3.3.3 同时写入多个点

要想同时发送多个数据点到多个series(在InfluxDB中measurement加tags组成了一个series),可以用新的行来分开这些数据点。

这种批量发送的方式可以获得更高的性能。

#curl -i -XPOST 'http://10.23.241.202:8086/write?db=mytest' --data-binary 'cpu,host=server01,region=uk value=0.96 1434055562000000000
cpu,host=server02,city=uu value=0.78'

在这里插入图片描述

3.4 使用内建的HTTP接口查询数据

3.4.1 使用HTTP接口查询数据

HTTP接口是InfluxDB查询数据的主要方式。

通过发送一个GET请求到/query路径,并设置URL的db参数为目标数据库,设置URL参数q为查询语句。

#curl  -G 'http://10.23.241.202:8086/query?pretty=true' --data-urlencode "db=mytest" --data-urlencode "q=SELECT value FROM cpu WHERE region='uk'"
其中
-G参数用来构造 URL 的查询字符串。
如果数据需要 URL 编码,可以结合--data--urlencode参数。

查询结果

{
 "results": [
     {
         "statement_id": 0,
         "series": [
             {
                 "name": "cpu",
                 "columns": [
                     "time",
                     "value"
                 ],
                 "values": [
                     [
                         "2015-06-11T20:46:02Z",
                         0.96
                     ]
                 ]
             }
         ]
     }
 ]
}

4 python操作influxdb

参考Python操作InfluxDB指南

CMD>pip install influxdb

4.1 写入

from influxdb import InfluxDBClient
client = InfluxDBClient('10.23.241.202', 8086, 'aiops_logwarn')  # 连接数据库
client.create_database('example')  # 创建数据库

points = [ # 待写入数据库的点组成的列表
    {
        "measurement": "cpu",
        "tags": {
            "host": "server01",
            "region": "us"
        },
        "time": "2009-11-10T23:00:00Z",
        "fields": {
            "value": 0.84
        }
    }
]
client.write_points(points, database='example')  # 将这些点写入指定database
# 查询刚刚写入的点
result = client.query('select value from cpu;', database='example')
print(result)

返回下面的内容

ResultSet({'('cpu', None)': [{'time': '2009-11-10T23:00:00Z', 'value': 0.84}]})

4.2 查询

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
时序数据库InfluxDB的性能测试是通过在特定环境下对其进行写入和查询测试来评估其性能表现。在一个具体的测试环境中,使用了4核16G的CPU内存和1Gbit/s的带宽,操作系统为Ubuntu 4.8.4-2ubuntu1~14.04.3。测试结果显示,InfluxDB在处理时序数据方面表现出色。 引用\[2\]中提到了对InfluxDB的性能测试报告。测试环境包括写入测试和查询测试。在写入测试中,通过模拟大量的写入操作来测试InfluxDB的写入性能。在查询测试中,通过执行各种类型的查询操作来测试InfluxDB的查询性能。 InfluxDB是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。它专门设计用于处理时序数据,并且在处理大量数据和多样化数据类型方面表现出色。相比传统的关系型数据库,InfluxDB在时序数据处理方面具有更高的性能和效率。 总结来说,时序数据库InfluxDB在性能测试中展现出了优秀的表现,特别适用于处理时序数据。它的高性能和高效率使其成为许多应用场景中的首选数据库。 #### 引用[.reference_title] - *1* [【数据库】时序数据库InfluxDB 性能测试和为什么时序数据库更快、时序数据库应用场景...](https://blog.csdn.net/weixin_42319496/article/details/119372355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [性能爆表-时序数据库InfluxDB](https://blog.csdn.net/kobe_okok/article/details/117233188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值