时序数据库InfluxDB—介绍与性能测试

目录

一、简述

二、主要特点

三、基本概念

1、主要概念

2、保留策略

3、连续查询

4、存储引擎—TSM Tree

 5、存储目录

四、基本操作

1、Java-API操作

五、项目中的应用

六、单节点的硬件配置

七、性能测试

1、测试环境

2、测试程序

3、写入测试

4、查询测试 


一、简述

时间序列数据:从定义上来说,就是一串按时间维度索引的数据。

时序数据库(TSDB)特点

  1. 持续高并发写入、无更新、无删除;
  2. 数据压缩存储;
  3. 低查询延时。

常见的TSDB有:influxdb、IoTDB、opentsdb、timescaleDB,根据DB-engine排名,目前在time series数据库领域排名第一位 。

二、主要特点

主要特点: 

  1. 对时序数据(sereis data)使用TSM存储引擎,提供高性能的数据写入和压缩功能;
  2. go语言编写,程序只有一个二进制的可执行文件,没有其他依赖关系;
  3. 插件支持telegraf采集、granfa可视化;
  4. 提供类似SQL语法格式的数据操作;
  5. 无结构(无模式):可以是任意数量的列
  6. 支持与时间有关的相关函数(如最大,最小,求和等);
  7. 保留策略(retention policies)功能可以定期清除老旧数据;
  8. 连续查询(continuous queries) 功能统计聚合数据来使数据查询更有效率。

缺点:

  1. 社区版只支持单机部署,集群功能需要使用收费的企业版。 

三、基本概念

1、主要概念

  • database:数据库名,可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录。
  • measurement:测量指标名,相当于数据库中的表。
  • point:相当于传统数据库里的一行数据,由时间戳(time)、数据(field)、标签(tags)组成。
  • tag:标签,相当于传统数据库的索引,表名+tag一起作为数据库的索引。
  • field:各种记录值(没有索引的属性)。
  • time:每条数据记录时间,是数据库中的主索引(会自动生成)。
  • series:相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

2、保留策略

  • retention policy:保留策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。InfluxDB 会定期清除过期的数据。
  • shard: 分区,是InfluxDB存储引擎的实现,负责数据的编码存储、读写服务等。将InfluxDB中时间序列化的数据按照时间的先后顺序存入到shard中,每个shard中都负责InfluxDB中一部分的数据存储工作,并以tsm文件的表现形式存储在物理磁盘上,每个存放了数据的shard都属于一个shard group。
  •  shard group :可以理解为存放shard的容器,所有的shard在逻辑上都属于这个shard group,每个shard group中的shard都有一个对应的时间跨度和过期时间,每一个shard group都有一个默认的时间跨度,叫做shard group duration,默认为7天。

保留策略、shard、shardGroup三者关系

在一个RP中,如果指定的保留时间为24小时,那么每个shard的duration为1小时,即每个shard的时间跨度为1小时,那么总共会有24个跨度为1小时的shard,在触发数据的RP后,删除最早时间跨度的shard。

例如,我们在mydb数据库中指定保留策略为24小时。

那么此时shard group中对应就会存在24个shard,每次到达过期时间时,删除最早的shard,并生成一个新的shard。

3、连续查询

InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。

InfluxDB会将查询结果放在指定的数据表中。

目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。

4、存储引擎—TSM Tree

  • TSM Tree 是 InfluxDB 根据实际需求在 LSM Tree 的基础上稍作修改优化而来。
  • LSM-tree(日志结构的合并树)是一种基于硬盘的数据结构,核心思想就是放弃部分读能力,换取写入的最大化能力。
  • TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。 

 

  • Cache:插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中的数据在内存中的缓存。当 InfluxDB 启动时,会遍历所有的 wal 文件,重新构造 cache,这样即使系统出现故障,也不会导致数据的丢失。
  • WAL:wal 文件的内容与内存中的 cache 相同,其作用就是为了持久化数据,当系统崩溃后可以通过 wal 文件恢复还没有写入到 tsm 文件中的数据。
  • TSM File:单个 tsm file 大小最大为 2GB,用于存放数据。
  • Compactor:compactor 组件在后台持续运行,每隔 1 秒会检查一次是否有需要压缩合并的数据。 

主要进行两种操作
一种是 cache 中的数据大小达到阀值后,进行快照,之后转存到一个新的 tsm 文件中。
另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成。

 5、存储目录

influxdb的数据存储有三个目录,分别是meta、wal、data。

meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件。

wal 目录存放预写日志文件,以 .wal 结尾。

data 目录存放实际存储的数据文件,以 .tsm 结尾。

四、基本操作

  1. 客户端命令行
  2. HTTP API 接口
  3. 各语言API 库(对 go 语言 API 封装)
  4. 基于 WEB 管理页面操作,从1.3版开始InfluxDB官方就把web界面给取消

1、Java-API操作

1.1、引入java插件,influxdb-java

 

1.2、执行写入,写入的同时会创建measurement,无结构,可写入任意数量的列

 

1.3、Sql方式执行查询

1.4、开启批量写入

通过设置定时定量大小实现批量写入

五、项目中的应用

1、自动生成主索引字段time,索引字段ID,非索引字段Value

2、ID为车辆主键,Value为十六进制转换的JT809协议,减少空间存储

 3、数据保留时间:500天,7天一个分区文件

 

4、3万辆车,截止目前有450G左右的数据

5、一天的数据量有2500万左右

 

六、单节点的硬件配置

这里定义的InfluxDB的负载是基于每秒的写入的数据量、每秒查询的次数以及唯一series的数目。

什么时候需要更多的内存? 

  • 一般来讲,内存越多,查询的速度越快,增加更多的内存总没有坏处。
  • 影响内存的最主要的因素是series基数,series的基数大约或是超过千万时,就算有更多的内存也可能导致OOM,所以在设计数据的格式的时候需要考虑到这一点。
  • 内存的增长和series的基数存在一个指数级的关系。

需要哪种类型的磁盘?

InfuxDB被设计运行在SSD上,InfluxData团队不会在HDD和网络存储上测试InfuxDB,所以不太建议在生产上这么去使用。在机械磁盘上性能会下降一个数量级甚至在中等负载下系统都可能死掉。为了最好的结果,InfuxDB至少需要磁盘提供1000IOPS的性能。

七、性能测试

1、测试环境

2、测试程序

从github上找的influxdata公司提供的两款测试工具

  • influx-stress 用于写入测试
  • influxdb-comparisons 用于查询测试

3、写入测试

测试工具:influx-stress

测试原理:

该工具是通过go语言的fasthttp库编写的。

1、会在服务器上创建一个数据库stress

2、然后创建一个MEASUREMENT(类似关系数据库的表)名为ctr,该表有time,n,some三个字段。

3、不断的向stress数据库的ctr表插入数据,每次插入的数据都包含三个字段。每一条数据称为一个points。插入数据的方法是通过influxDB的HTTP API发送请求(POST /write?db=stress)。

测试结论:最大吞吐量为每秒写入60万条数据

4、查询测试 

测试工具:influxdb-comparisons

测试原理:

该工具是通过go语言的fasthttp库编写的。
1、会在服务器上创建一个数据库benchmark_db
2、然后创建9个MEASUREMENT:cpu,disk,diskio,kernel,mem,net,nginx,postgresl。每个measurement有2160行数据。
3、通过http GET请求"GET/query?db=benchmark_db"查询cpu这张表。查询语句为:SELECT max(usage_user) from cpu where (hostname = 'host_0') and time >='2016-01-01T01:16:32Z' and time<'2016-01-01T02:16:32Z' group by time(1m)
可以取出61条数据。

测试结论:平均每秒执行600次查询 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/216.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯 队列和queue详解

目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样&#xff0c;队列也是一种访问受限的线性表&#xff0c;它只能在表头位置删除&#xff0c;在表尾位置插入&#xff0c;队列是先进先出&…

DELTA并联机械手视觉方案荣获2024年度机器人应用典型案例奖

直击现场 2025年1月9日晚&#xff0c;2024深圳市机器人年度评选颁奖典礼在深圳市南山区圣淘沙酒店正式拉开帷幕。本次颁奖活动由中国科学院深圳先进技术研究院指导&#xff0c;深圳市机器人协会与《机器人与智能系统》杂志组织承办。 正运动公司受邀参与此次典礼&#xff0c;…

【Oracle篇】深入了解执行计划中的访问路径(含表级别、B树索引、位图索引、簇表四大类访问路径)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

工业 4G 路由器赋能远程医疗,守护生命线

在医疗领域&#xff0c;尤其是偏远地区的医疗救治场景中&#xff0c;工业 4G 路由器正发挥着无可替代的关键作用&#xff0c;宛如一条坚韧的 “生命线”&#xff0c;为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏&#xff0c;常常面临着专业医生短缺、诊疗设备有限等困境…

matlab编写分段Hermite插值多项式

文章目录 原理使用分段Hermite插值多项式原因公式第一类的两个插值积函数第二类的两个插值积函数 例题法一法二 代码分段 Hermite 插值的思路&#xff1a;分段 Hermite 插值多项式的构造&#xff1a;MATLAB 实现代码&#xff1a;结果如图&#xff1a;注归一化变量的作用&#x…

element ui前端小数计算精度丢失的问题如何解决?

文章目录 前言一、什么是精度丢失&#xff1f;产生精度丢失的原因如何避免或减少精度丢失的影响 二、实际项目开发实例举例以项目预算模块为例如何解决精度丢失 总结 前言 在《工程投标项目管理系统》项目开发中工程项目预算、成本管理、财务管理等模块的开发中不可避免的要和…

《分布式光纤测温:解锁楼宇安全的 “高精度密码”》

在楼宇建筑中&#xff0c;因其内部空间庞大&#xff0c;各类电器设施众多&#xff0c;如何以一种既高效又稳定&#xff0c;兼具低成本与高覆盖特性的方式&#xff0c;为那些关键线路节点开展温度监测&#xff0c;是目前在安全监测领域一项重点研究项目&#xff0c;而无锡布里渊…

油猴支持阿里云自动登陆插件

遇到的以下问题&#xff0c;都已在脚本中解决&#xff1a; 获取到的元素赋值在页面显示&#xff0c;但是底层的value并没有改写&#xff0c;导致请求就是获取不到数据元素的加载时机不定&#xff0c;尤其是弱网情况下&#xff0c;只靠延迟还是有可能获取不到&#xff0c;且登陆…

代码随想录算法训练营第3天(链表1)| 203.移除链表元素 707.设计链表 206.反转链表

一、203.移除链表元素 题目&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 视频&#xff1a;手把手带你学会操作链表 | LeetCode&#xff1a;203.移除链表元素_哔哩哔哩_bilibili 讲解&#xff1a;代码随想录 注意&#xff1a; 针对头结点和非头结点的…

如何实现多级缓存?

本文重点说一说在Java应用中&#xff0c;多级缓存如何实现。 多级缓存是比较常见的一种性能优化的手段&#xff0c;一般来说就是本地缓存分布式缓存。 本地缓存一般采用Caffeine和Guava&#xff0c;这两种是性能比较高的本地缓存的框架。他们都提供了缓存的过期、管理等功能。…

网工_网络体系结构

2024.01.09&#xff1a;网络工程学习笔记&#xff08;网工老姜&#xff09; 第1节 网络体系结构 1.1 计算机一切皆011.2 网络协议1.3 协议的分层模型1.4 主机1向主机2发送数据过程1.5 本章小结 1.1 计算机一切皆01 在计算机内部&#xff0c;所有的数据最终都是以01的方式存在的…

3DGabor滤波器实现人脸特征提取

import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期&#xff0c;不少朋友在使用 O1 或 O1 Pro 模型时&#xff0c;都会碰到“降智”或“忽高忽低”的智力波动&#xff0c;比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题&#xff0c;你是不是也感到头疼呢&#xff1f; 为了找到更可靠的解决办法&#xf…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…

Notepad++上NppFTP插件的安装和使用教程

一、NppFTP插件下载 图示是已经安装好了插件。 在搜索框里面搜NppFTP&#xff0c;一般情况下&#xff0c;自带的下载地址容易下载失败。这里准备了一个下载连接&#xff1a;Release v0.29.10 ashkulz/NppFTP GitHub 这里我下载的是x86版本 下载好后在nodepad的插件里面选择打…

Kali系统(Debian 10.3) 遇到的问题

目录 问题一&#xff1a;非问题 kali 基础官网与安装 问题二&#xff1a; 问题三&#xff1a; Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四&#xff1a;重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码&#xff0c;并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中&#xff0c;之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…

C# GDI+的DrawString无法绘制Tab键的现象

【啰嗦2句】 现在用C#的人很少了吧&#xff1f;GDI更少了吧&#xff1f;所以这个问题估计也冷门。没关系&#xff0c;分享给特定需要的人也不错。 【问题现象】 工作中开发了一个报告编辑器&#xff0c;实现图文排版等功能&#xff0c;用着没什么问题&#xff0c;直到有一天…

Linux (CentOS) 安装 Docker 和 Docker Compose

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

计算机网络(六)应用层

6.1、应用层概述 我们在浏览器的地址中输入某个网站的域名后&#xff0c;就可以访问该网站的内容&#xff0c;这个就是万维网WWW应用&#xff0c;其相关的应用层协议为超文本传送协议HTTP 用户在浏览器地址栏中输入的是“见名知意”的域名&#xff0c;而TCP/IP的网际层使用IP地…