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

news2025/1/14 3:08:10

目录

一、简述

二、主要特点

三、基本概念

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.coloradmin.cn/o/2276263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 (35)TCP报文段的首部格式

前言 计算机网络中的TCP&#xff08;传输控制协议&#xff09;报文段的首部格式是TCP协议的核心组成部分&#xff0c;它包含了控制TCP连接的各种信息和参数。 一、TCP报文段的结构 TCP报文段由首部和数据两部分组成。其中&#xff0c;首部包含了控制TCP连接的各种字段&#xff…

GelSight Mini视触觉传感器凝胶触头升级:增加40%耐用性,拓展机器人与触觉AI 应用边界

马萨诸塞州沃尔瑟姆-2025年1月6日-触觉智能技术领军企业Gelsight宣布&#xff0c;旗下Gelsight Mini视触觉传感器迎来凝胶触头的更新。经内部测试&#xff0c;新Gel凝胶触头耐用性提升40%&#xff0c;外观与触感与原凝胶触头保持一致。此次升级有效满足了客户在机器人应用中对设…

burpsiute的基础使用(2)

爆破模块&#xff08;intruder&#xff09;&#xff1a; csrf请求伪造访问&#xff08;模拟攻击&#xff09;: 方法一&#xff1a; 通过burp将修改&#xff0c;删除等行为的数据包压缩成一个可访问链接&#xff0c;通过本地浏览器访问&#xff08;该浏览器用户处于登陆状态&a…

【ASP.NET学习】ASP.NET MVC基本编程

文章目录 ASP.NET MVCMVC 编程模式ASP.NET MVC - Internet 应用程序创建MVC web应用程序应用程序信息应用程序文件配置文件 用新建的ASP.NET MVC程序做一个简单计算器1. **修改视图文件**2. **修改控制器文件** 用新建的ASP.NET MVC程序做一个复杂计算器1.创建模型&#xff08;…

Git 命令代码管理详解

一、Git 初相识&#xff1a;版本控制的神器 在当今的软件开发领域&#xff0c;版本控制如同基石般重要&#xff0c;而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造&#xff0c;最初是为了更好地管理 Linux 内核源代码。随着时间的推移&#xff0c;Git 凭借…

OpenCV实现基于交叉双边滤波的红外可见光融合算法

1 算法原理 CBF是*Cross Bilateral Filter(交叉双边滤波)*的缩写&#xff0c;论文《IMAGE FUSION BASED ON PIXEL SIGNIFICANCE USING CROSS BILATERAL FILTER》。 论文中&#xff0c;作者使用交叉双边滤波算法对原始图像 A A A&#xff0c; B B B 进行处理得到细节&#xff0…

项目实战--网页五子棋(用户模块)(1)

接下来我将使用Java语言&#xff0c;和Spring框架&#xff0c;实现一个简单的网页五子棋。 主要功能包括用户登录注册&#xff0c;人机对战&#xff0c;在线匹配对局&#xff0c;房间邀请对局&#xff0c;积分排行版等。 这篇文件讲解用户模块的后端代码 1. 用户表与实体类 …

机器学习之随机森林算法实现和特征重要性排名可视化

随机森林算法实现和特征重要性排名可视化 目录 随机森林算法实现和特征重要性排名可视化1 随机森林算法1.1 概念1.2 主要特点1.3 优缺点1.4 步骤1.5 函数及参数1.5.1 函数导入1.5.2 参数 1.6 特征重要性排名 2 实际代码测试 1 随机森林算法 1.1 概念 是一种基于树模型的集成学…

MySQL存储引擎、索引、索引失效

MySQL Docker 安装 MySQL8.0&#xff0c;安装见docker-compose.yaml 操作类型 SQL 程序语言有四种类型&#xff0c;对数据库的基本操作都属于这四种类&#xff0c;分为 DDL、DML、DQL、DCL DDL(Dara Definition Language 数据定义语言)&#xff0c;是负责数据结构定义与数据…

WPF基础(1.1):ComboBox的使用

本篇文章介绍ComboBox的基本使用。 本篇文章的例子实现的功能&#xff1a;后端获取前端复选框中的选项之后&#xff0c;点击“确定”按钮&#xff0c;弹出一个MessageBox&#xff0c;显示用户选择的选项。 文章目录 1. 效果展示2. 代码逻辑2.1 前端代码2.2 后端代码 1. 效果展…

前端炫酷动画--文字(二)

目录 一、弧形边框选项卡 二、零宽字符 三、目录滚动时自动高亮 四、高亮关键字 五、文字描边 六、按钮边框的旋转动画 七、视频文字特效 八、立体文字特效让文字立起来 九、文字连续光影特效 十、重复渐变的边框 十一、磨砂玻璃效果 十二、FLIP动画 一、弧形边框…

android 官网刷机和线刷

nexus、pixel可使用google官网线上刷机的方法。网址&#xff1a;https://flash.android.com/ 本文使用google线上刷机&#xff0c;将Android14 刷为Android12 以下是失败的线刷经历。 准备工作 下载升级包。https://developers.google.com/android/images?hlzh-cn 注意&…

25/1/12 嵌入式笔记 学习esp32

了解了一下位选线和段选线的知识&#xff1a; 位选线&#xff1a; 作用&#xff1a;用于选择数码管的某一位&#xff0c;例如4位数码管的第1位&#xff0c;第2位&#xff09; 通过控制位选线的电平&#xff08;高低电平&#xff09;&#xff0c;决定当前哪一位数码管处于激活状…

探秘block原理

01 概述 在iOS开发中&#xff0c;block大家用的都很熟悉了&#xff0c;是iOS开发中闭包的一种实现方式&#xff0c;可以对一段代码逻辑进行封装&#xff0c;使其可以像数据一样被传递、存储、调用&#xff0c;并且可以保存相关的上下文状态。 很多block原理性的文章都比较老&am…

【Docker】入门教程

目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …

Bootstrap 前端 UI 框架

Bootstrap官网&#xff1a;Bootstrap中文网 铂特优选 Bootstrap 下载 点击进入中文文档 点击下载 生产文件是开发响应式网页应用&#xff0c;源码是底层逻辑代码&#xff0c;因为是要制作响应式网页&#xff0c;所以下载开发文件 引入 css 文件&#xff0c; bootstrap.css 和 …

Docker与微服务实战2-基础篇

1.学习一门新技术的理念 1.是什么 2.能干吗 3.去哪下载 4.怎么玩 5.永远的helloworld跑起来一次 AB法则 before 与 after 的对比 2.为什么会有Docker出现 3.docker理念 解决了运行环境和配置问题的软件容器&#xff0c;方便做持续集成并有助于整体发布的容器虚拟化…

蓝桥杯_B组_省赛_2022(用作博主自己学习)

题目链接算法11.九进制转十进制 - 蓝桥云课 进制转换 21.顺子日期 - 蓝桥云课 时间与日期 31.刷题统计 - 蓝桥云课 时间与日期 41.修剪灌木 - 蓝桥云课 思维 51.X 进制减法 - 蓝桥云课 贪心 61.统计子矩阵 - 蓝桥云课 二维前缀和 71.积木画 - 蓝桥云课 动态规划 82.扫雷 - 蓝桥…

CES 2025|美格智能高算力AI模组助力“通天晓”人形机器人震撼发布

当地时间1月7日&#xff0c;2025年国际消费电子展&#xff08;CES 2025&#xff09;在美国拉斯维加斯正式开幕。美格智能合作伙伴阿加犀联合高通在展会上面向全球重磅发布人形机器人原型机——通天晓&#xff08;Ultra Magnus&#xff09;。该人形机器人内置美格智能基于高通QC…

PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获

目录 一、数据库操作应用场景 二、安装PyMysql 三、事务的概念 四、数据库的准备 五、PyMysql连接数据库 1、建立连接方法 2、入门案例 六、PyMysql操作数据库 1、数据库查询 1️⃣查询操作流程 2️⃣cursor游标 ​3️⃣查询常用方法 4️⃣案例 5️⃣异常捕获 …