时序数据库InfluxDB—介绍与性能测试
目录
一、简述
二、主要特点
三、基本概念
1、主要概念
2、保留策略
3、连续查询
4、存储引擎—TSM Tree
5、存储目录
四、基本操作
1、Java-API操作
五、项目中的应用
六、单节点的硬件配置
七、性能测试
1、测试环境
2、测试程序
3、写入测试
4、查询测试
一、简述
时间序列数据:从定义上来说,就是一串按时间维度索引的数据。
时序数据库(TSDB)特点:
- 持续高并发写入、无更新、无删除;
- 数据压缩存储;
- 低查询延时。
常见的TSDB有:influxdb、IoTDB、opentsdb、timescaleDB,根据DB-engine排名,目前在time series数据库领域排名第一位 。
二、主要特点
主要特点:
- 对时序数据(sereis data)使用TSM存储引擎,提供高性能的数据写入和压缩功能;
- go语言编写,程序只有一个二进制的可执行文件,没有其他依赖关系;
- 插件支持telegraf采集、granfa可视化;
- 提供类似SQL语法格式的数据操作;
- 无结构(无模式):可以是任意数量的列
- 支持与时间有关的相关函数(如最大,最小,求和等);
- 保留策略(retention policies)功能可以定期清除老旧数据;
- 连续查询(continuous queries) 功能统计聚合数据来使数据查询更有效率。
缺点:
- 社区版只支持单机部署,集群功能需要使用收费的企业版。
三、基本概念
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 结尾。
四、基本操作
- 客户端命令行
- HTTP API 接口
- 各语言API 库(对 go 语言 API 封装)
- 基于 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次查询
相关文章:
![](https://i-blog.csdnimg.cn/direct/6a105a85636f47bb91bdf2401c8e22fb.png)
时序数据库InfluxDB—介绍与性能测试
目录 一、简述 二、主要特点 三、基本概念 1、主要概念 2、保留策略 3、连续查询 4、存储引擎—TSM Tree 5、存储目录 四、基本操作 1、Java-API操作 五、项目中的应用 六、单节点的硬件配置 七、性能测试 1、测试环境 2、测试程序 3、写入测试 4、查询测试 一…...
![](https://www.ngui.cc/images/no-images.jpg)
Python的循环
Python的循环 Python的循环有两种,分别是for…in循环和while循环。 for…in 循环 假设我们要循环输出一个列表里的元素: names [张三,李四,王五] for name in names:print(name)执行这段代码后,会依次打印names的每一个元素:…...
![](https://i-blog.csdnimg.cn/direct/d1ac292ff29e46c6834476e7f3bd1ad0.png)
【机器学习】聚类评价指标之福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)
福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)是一种用于评估聚类结果与实际标签之间一致性的指标。FMI 值可以用于衡量聚类的准确性,特别是在有真值标签的监督评估场景中。 计算公式 FMI 的计算基于以下公式: 其中&#…...
![](https://www.ngui.cc/images/no-images.jpg)
分享一次面试经历
今天不只是分享面经,还分享一下主人公的整个面试经历,看看你是否会有相同的思路或者不同的见解,可以在评论区讨论一下: 问在项目里做了什么技术贡献。实施过程中,遇到哪些困难,怎么去思考解决的࿰…...
![](https://i-blog.csdnimg.cn/direct/4cf9c43a0d9e4d3a827105bd1f1783e2.png#pic_center)
网络攻击行为可视化分析系统【数据分析 + 可视化】
一、系统背景 随着信息技术的快速发展,网络已成为现代社会不可或缺的一部分。然而,与此同时,网络攻击手段也日益多样化和复杂化,给企业和个人的信息安全带来了极大的威胁。传统的网络攻击分析方法往往依赖于人工分析和处理大量的…...
![](https://www.ngui.cc/images/no-images.jpg)
Qt 智能指针
Qt 智能指针 文章目录 Qt 智能指针QScopedPointer1. 自动删除对象2. 转移所有权3. 管理私有数据 QSharedPointer关键特性注意事项 QWeakPointer注意事项 QPointer QScopedPointer QScopedPointer 是 Qt 提供的一个智能指针,主要用于简化资源管理,防止内…...
CODESYS MODBUS TCP通信(禾川Q1 PLC作为MODBUS TCP从站)
禾川Q1 PLC MODBUS TCP 通信(PLC作为MODBUS TCP通信主站) 禾川Q1 PLC MODBUS TCP通信(CODESYS平台完整配置+代码)-CSDN博客文章浏览阅读28次。MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)_将matlab仿真导入plc-CSDN博客文章浏览阅读722次。本文详细介绍了如…...
![](https://i-blog.csdnimg.cn/direct/723ff8bfae35448a8cda23902600f814.png)
10.STM32F407ZGT6-内部温度传感器
参考: 1.正点原子 前言: 本笔记的主要目的和意义就是,再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说,该温度传感器在…...
![](https://i-blog.csdnimg.cn/img_convert/fc427bc1ba81cf251e3d85e8181b5ced.jpeg)
运维安全中心(堡垒机)
阿里云运维安全中心(Alibaba Cloud Operation and Maintenance Security, OMS,通常也称为“堡垒机”)是一款针对云上运维管理的安全解决方案。它专注于加强云环境中运维过程的安全性,确保对关键云资源和服务的访问可控、可审计&am…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux OOM | Early OOM | 进程监视
注: 本文为 “Linux OOM” 相关文章合辑。 Linux OOM 终结者 译者:花名有孚 | 2015-07-21 08:47 现在是早晨 6 点钟。已经醒来的我正在总结到底是什么事情使得我的起床闹铃提前了这么多。我们的监控系统显示,Plumbr 服务出故障了。 现在我…...
![](https://i-blog.csdnimg.cn/direct/918242775f684d628b7dcf2ee74eb48c.png)
【2024年华为OD机试】(A卷,100分)- 等和子数组最小和(Java JS PythonC/C++)
一、问题描述 题目描述 给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。 输入描述 第一行输入 m 接着输入m个数,表示此数组nums 数据范围:1<m&…...
![](https://www.ngui.cc/images/no-images.jpg)
NFS服务
nfs文件系统 NFS:NetworkFileSystem网络文件系统,基于内核的文件系统。 服务安装 不固定端口启动,会注册到rpcbind(固定端口)服务上, 局域网适用[rootvm ~]# yum -y install nfs-utils # 依赖安装rpcbind [ro…...
![](https://www.ngui.cc/images/no-images.jpg)
RabbitMQ 交换机、队列和路由键的命名规范
在 RabbitMQ 中,使用 Topic Exchange 模式时,交换机、队列和路由键的命名规范是非常重要的,尤其是在多环境和多微服务的场景中。合理的命名规范可以提高消息系统的可维护性、可扩展性以及可读性。以下是一些关于 Topic Exchange 模式中交换机…...
![](https://i-blog.csdnimg.cn/direct/7f40aceb037e459ea675bc2c9442028d.png)
腾讯云AI代码助手编程挑战赛-刑说
作品简介 鉴于当代普法力度不够大,这个刑说可以帮助大家更好的普及法律知识 技术架构 采用了全后端分离的架构,前端使用Vue.js,腾讯云的AI服务处理自然语言理解与生成。 实现过程 开发环境、开发流程 系统:win11 开发工具&…...
![](https://i-blog.csdnimg.cn/direct/1e7f6b44fea84545be6a7781d8c31198.png)
【测试】持续集成CI/CD
近期更新完毕,建议关注收藏点赞~ 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…...
![](https://www.ngui.cc/images/no-images.jpg)
阿里云直播Web
官方文档:Web播放器SDK常见问题_视频点播(VOD)-阿里云帮助中心 bug:播流的不稳定,直播总会进入 onM3u8Retry 监听,用户端就会黑屏,(但其实并没有关播,正常关播进入的是pause这个监听࿰…...
![](https://i-blog.csdnimg.cn/direct/3075d18912734ceab81c6382a6fb0e95.png)
DuckDB:PRAGMA语句动态配置数据库行为
PRAGMA语句是DuckDB从SQLite中采用的SQL扩展。PRAGMA命令可能会改变数据库引擎的内部状态,并可能影响引擎的后续执行或行为。本文介绍PRAGMA命令及其典型应用场景。 DuckDB PRAGMA介绍 在 DuckDB 中,PRAGMA 是一种编译指示(compiler directi…...
![](https://www.ngui.cc/images/no-images.jpg)
GO通过SMTP协议发送邮件
什么是SMTP协议 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送邮件的协议。当一个邮件服务器需要发送邮件给另一个邮件服务器时,它会使用SMTP协议与目标服务器建立连接,并传输邮件内容。SMTP协议的…...
![](https://www.ngui.cc/images/no-images.jpg)
轻量自高斯注意力机制LSGAttention模型详解及代码复现
模型背景 近年来,卷积神经网络(CNN)在高光谱图像分类领域取得了显著进展。然而,CNN面临 长距离关系建模 和 计算成本 增加的挑战。为解决这些问题,研究人员提出了基于 轻量自高斯注意(Light Self-Gaussian-Attention, LSGA) 机制的视觉转换器(Vision Transformer, VIT),旨…...
![](https://www.ngui.cc/images/no-images.jpg)
解读若依框架中的`@Excel` 和 `@Excels` 注解
文章目录 一、Excels 注解详解1.1 适用场景1.2 作用与好处 二、Excel 注解详解2.1 核心属性解析2.2 高级用法2.3 综合应用案例 三、总结 解读若依框架中的 Xss 注解博客:解读若依框架中的 Xss 注解 接下来我们将对若依框架中的 Excel 和 Excels 注解进行更加详细的…...
![](https://i-blog.csdnimg.cn/direct/53782d26dc784eb3836266c89b9cc455.png#pic_center)
云商城--基础数据处理和分布式文件存储
第2章 基础数据处理和分布式文件存储 1.分布式文件存储系统Ceph学习 1).掌握Ceph架构 2).掌握Ceph组件 3).搭建Ceph集群(了解) 2.Ceph使用 1).基于Ceph实现文件上传 2).基于Ceph实现文件下载 3.SKU、SPU管理 1).掌握SKU和SPU关系 2).理解商品发…...
![](https://www.ngui.cc/images/no-images.jpg)
六十九:基于openssl实战验证RSA
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密和数字签名领域。在实际开发和学习过程中,理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础,通过实例操作来验证和理解 RSA 的…...
![](https://www.ngui.cc/images/no-images.jpg)
Three.js 用户交互:构建沉浸式3D体验的关键
文章目录 前言一、基本交互:鼠标与触摸事件二、高级交互:键盘控制与游戏手柄支持三、物理模拟与碰撞检测四、手势识别与多点触控五、增强现实(AR)与虚拟现实(VR)六、触觉反馈与震动效果七、语音控制八、眼球…...
![](https://www.ngui.cc/images/no-images.jpg)
Android车机DIY开发之学习篇(五)默认应用修改
Android车机DIY开发之学习篇(五)默认应用修改 android默认应用位置 sdk/packages/apps InitRC配置 应用安装的目录 /system/priv-app 该路径存放一些系统底层的应用,比如Setting,systemUI等。该目录中的app拥有较高的系统权限,而且如果要使…...
![](https://www.ngui.cc/images/no-images.jpg)
linux 设置mysql 外网访问
1、修改 MySQL 配置文件 找到并编辑配置文件:在Linux系统中,MySQL的配置文件通常是/etc/mysql/my.cnf,使用命令sudo vim /etc/mysql/my.cnf打开文件。 注释或修改 bindaddress:找到bindaddress 127.0.0.1,将其注释掉…...
![](https://www.ngui.cc/images/no-images.jpg)
SQL UNION 操作符
SQL UNION 操作符 SQL UNION 操作符用于合并两个或多个 SELECT 语句的结果集。它将多个结果集组合成一个单独的结果集,并去除重复的行。为了使用 UNION,每个 SELECT 语句必须具有相同的列数,并且对应列的数据类型必须兼容。 语法 SELECT c…...
![](https://www.ngui.cc/images/no-images.jpg)
c++ 17 constexpr
未来已来:从SFINAE到concepts #include <type_traits> #include <vector> #include <list> #include <iostream> // 一个通用的容器打印函数,支持任何带 begin()/end() 的容器 template<typename Container> …...
![](https://www.ngui.cc/images/no-images.jpg)
Java QueryWrapper groupBy自定义字段,以及List<Map>转List<Entity>
Java queryWrapper groupby自定义字段 String sql "data_id,(select value from lz_html a where a.data_id lz_html.data_id and class_nametest-item-status) status," "(select value from lz_html a where a.data_id lz_html.data_id and class_nametes…...
![](https://i-blog.csdnimg.cn/direct/c3b136c8cc67455eb1ec02b4d8fb2b0e.png)
【Rust自学】11.7. 按测试的名称运行测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.7.1. 按名称运行测试的子集 如果想要选择运行的测试,就将测试的名称(一个或多个)作为cargo test的…...
![](https://i-blog.csdnimg.cn/direct/8cd19cd732a84741abb6ab054adf5dc0.png)
Git:Cherry-Pick 的使用场景及使用流程
前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能,Cherry-Pick不是merge,只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介: git cherry-pick 是用来从一个分…...
![](/images/no-images.jpg)
论坛类型的网站怎么做/官网站内推广内容
一、今天在写东西时使用了mysl中的length()方法来检测数据长度,发现一个问题:当变量为纯英文字符时没有问题,但是中间夹杂着汉字时,这个结果就不一样了。这是因为在mysql中一个汉字的length为3导致的。 二…...
![](/images/no-images.jpg)
wordpress搭建多少钱/上海专业seo服务公司
。。。。。。。。...
![](/images/no-images.jpg)
传媒大学附近网站建设公司/b站推广网站入口mmm
本文讲解如何通过ElementTree来操作XML; 1.引入库需要用到3个类,ElementTree,Element以及建立子类的包装类SubElement from xml.etree.ElementTree import ElementTreefrom xml.etree.ElementTree import Elementfrom xml.etree.ElementTree …...
![](/images/no-images.jpg)
wordpress 教学培训/网络黄页平台网址有哪些
匹夫怀璧,真的有罪么? 怀璧没有罪,有罪的是他没有能力,没有社会承认他拥有和氏璧的能力 那如何承认呢? 假如秦始王拿到那块和氏璧,没人会质疑,普通人拿到,无论是什么手段拿到&#x…...
![](/images/no-images.jpg)
网站收录网/中国搜索网站排名
import osprint(os.getcwd())os.chdir(C:\Python33\HeadFirstPython\hfpy_code\chapter6) #将工作空间修改为文件所在的目录#定义函数get_filedata从文件中取值def get_filedata(filename):try:with open(filename) as f: #with语句打开和自动关闭文件dataf.readline() #从文件…...
网站建设 聊城/排名优化方法
1、 计算图概念 1.1 Tensor Tensor就是张量, 可以简单理解为多维数组,表明了数据结构1 1.2 Flow Flow 表达了张量之间通过计算相互转化的过程,体现了数据模型1 1.3 数据流图基础 数据流图是每个 TensorFlow 程序的核心,用于定义计算结…...