一文走进时序数据库性能测试工具 TSBS

一、背景

在物联网、车联网等时序数据场景中,数据的高速写入能力至关重要,会对产品方案的可用性、可靠性和扩展性产生影响。

以物联网为例,当面临千万甚至上亿设备、平均每个设备采集几十个到几百个指标时,每秒生成的数据将达到数十亿至数百亿。能否及时可靠的插入这种量级的数据,是评价一个时序数据库的核心要素和第一需求。

因此,对于时序数据库的性能进行测试也就尤为重要,TSBS 作为一款对时序数据库批量加载性能和查询执行性能的开源测试工具,得到了越来越多的应用。

二、TSBS 介绍

Time Series Benchmark Suite (TSBS) 是一个使用 go 语言编写的,用于生成时序数据集的基准测试工具,可以对各种时序数据库的读写性能进行基准测试。TSBS 具有可扩展性, 可以对各种时序数据场景(例如 devops,IoT 等)进行批量写入性能和查询执行性能基准测试。

目前 TSBS 支持 IOT 及 Devops 两种场景:

  • IoT 场景:模拟物联网环境中的数据负载,这个用例模拟来自一个虚构的卡车公司的一组卡车的数据流,包括来自每辆卡车的诊断数据和指标,并引入了相关的环境因素,例如 out-of-order 数据和批量摄取(对于离线一段时间的卡车)。它还跟踪卡车元数据,并使用它将度量和诊断作为查询集的一部分联系在一起。
  • Devops 场景:“开发操作”用例,有两种形式。完整形式用于生成、插入和测量 9 个“系统”中的数据,这些数据可以在真实的devops场景(e.g.、CPU、内存、磁盘等)中进行监控。这 9 个系统一起在每个读取间隔生成 100 个度量。另一种形式只关注CPU指标,以实现更简单、更精简的用例。这个用例每次读取生成 10 个 CPU 指标。除了度量读数之外,还为数据集中的每个主机生成“标记”(包括主机的位置、操作系统等)。

目前支持的数据库:

  • Akumulie

  • Cassandrae

  • ClickHousee

  • CrateDBe

  • InfluxDB

  • MongoDB

  • SiriDBe

  • TimescaleDB

  • VictoriaMetricse

未支持 TSBS 的时序数据库,可自行适配数据库类型后开展性能测试工作。

三、TSBS 测试工具

1. TSBS 测试工具安装

(1)使用 go get 对 TSBC 及其相关应用进行下载

$ go get github.com/timescale/tsbs

(2)切换到 cmd 下使用 go install 进行部分应用的安装

#Install desired binaries. At a minimum this includes tsbs_generate_data,

(3)切换到 cmd 下使用 go install 进行剩下的安装

#Optionally, install all binaries:

2. TSBS 测试工具使用

TSBS 基准测试分为 3 个阶段:数据生成和查询语生成、数据写入/插入测试、查询测试。下面 TSBS 测试工具三个阶段的使用以 IOT 场景和 timescaledb 数据库为例进行介绍。

(1)数据生成

通过 TSBS 生成基准测试的数据,将其作为基准测试阶段的输入。需要的变量,如下:

  • –use-case:使用场景,包括iot、devops、cpu-only,例如iot;

  • –seed:用于确定性生成的 PRNG 种子。例如:123;

  • –scale:要生成的卡车/设备数量。例如:50000;

  • –timestamp-start:数据中时间戳的开始时间。例如:2016-01-01T00:00:00Z;

  • –timestamp-end:数据中时间戳的结束时间。例如:2016-01-01T00:10:00Z;

  • –log-interval:每个设备的每次读取之间应该间隔多长时间,以秒为单位。例如:10s;

  • –format:需要生成的数据库,例如: timescaledb。

可自行设置变量在自定义目录下生成数据文件,示例:如使用上述变量生成数据集(在自定义目录/tmp/下生成 tsdb-data 数据文件)。

上面示例会生成一个伪 -CSV 文件,用于将数据批量加载到 TimescaleDB 中。每个数据库都有自己的格式,用于存储数据,使其数据库对应的加载器最容易写入数据。

(2)查询生成

需要的变量,如下:

  • 与数据生成中的用例、卡车数量、开始时间相同;

  • –timestamp-end:数据生成后一秒的结束时间,例如:对于 2016-01-01T00:10:00Z 使用 2016-01-01T00:10:01Z;

  • –queries:生成的SQL语句的查询数,例如:1000;

  • –query-type:要生成的SQL语句查询类型,例如:" specific-sub-table ";

例如:下列为生成 timescaledb 单类型一组查询的例子,可以通过改变查询类型 --query-type 一项来生成其他查询语句类型(查询类型的完整列表见末尾附录内容):

$ tsbs_generate_queries --use-case="iot" --seed=123 --scale=50000 \

(3)数据插入/写入测试

TSBS 通过获取上一步中生成的数据并将其用作特定于数据库的命令行程序的输入来测量插入/写入性能。tsbs_load 可执行文件可以在任何受支持的数据库中加载数据。可使用预生成的数据文件作为输入。每个加载程序确实共享一些公共标志——例如,batch-size 批处理大小(一起插入的读取数)、worker(并发插入的客户端的数量)、连接详细信息(主机和端口)等。要查找特定数据库的标志,请使用 -help 标志(例如,tsbs_load_timescaledb -help)。

例如:

#use insert

会在 TimescaleDB 中创建一个名为 benchmark 的新数据库,存储数据。在加载完整数据集时除最后两行之外的所有行都包含 CSV 格式的数据,标题中包含列名。这些列名对应于:时间戳、期间每秒的指标、插入总指标、每秒总体指标、期间每秒行数、总行数、每秒总行数。最后两行为插入指标数目(和适用的行),时间和平均写入速率。可以通过更改 --workers 的值以控制同时运行的并行 load 的级别,通过更改 --partitions 的值改变分区数。

(4)查询测试

要测量 TSBS 中的查询执行性能,您首先需要使用上一节加载数据并生成如前所述的查询。加载数据并生成查询后,只需为正在测试的数据库使用相应的 tsbs_run_queries_ 二进制文件,通过更改数据库以及数据库对应自定义目录下生成的查询语句类型来实现各类型的查询性能测试。缺少的条件也可以根据 -help 进行查询。

例如

对于 timescaledb 数据库查询“specific-sub-table”:

$ cat /tmp/timescaledb-queries- specific-sub-table.gz | \

可以通过更改 --workers 的值以控制同时运行的并行查询的级别。

四、实践

1. 测试环境

在这里插入图片描述

2. 导入性能测试

测试使用 TSBS 测试工具生成 IoT 场景下卡车运输公司的卡车数据集(约 9.9G),测试:TimescaleDB 在 workes=2 下 partitions 分别为 1、50、100、150 下的导入/查询性能;

workes=1、2、4、8 下 TimescaleDB 的导入/查询性能。

测试结果:
在这里插入图片描述

workers=2 下 TimescaleDB 测试不同 partitions,partitions=50 下具有最优导入性能。具体如下图所示:
在这里插入图片描述

在 partitions=50 时测试不同 workers 下 TimescaleDB 的导入性能,TimescaleD 导入性能如下所示:
在这里插入图片描述
在这里插入图片描述

在 partitions=50 时测试不同 workers 下 TimescaleDB 的导入性能,TimescaleD 导入性能如下所示:

3. 查询性能测试

测试 workers=2,不同 partitions(1, 50, 100, 150)下 TimescaleDB 的查询性能;

不同 workers(1, 2, 4, 8)下 TimescaleDB 的查询性能。

(1)查询语句:

query-specific-sub-table**:**

SELECT t.driver, r.latitude, r.longitude
FROM tags t 
INNER JOIN LATERAL (SELECT latitude, longitude, name FROM readings)       
      AS r ON r.name = t.name 
WHERE t.name IS NOT NULL
AND t.name = GetRandomName()

query-stationary-trucks-avg-velocity:

SELECT t.name, t.driver, avg(r.velocity) as avg_velocity
FROM tags t 
INNER JOIN readings r ON r.name = t.name
WHERE time >= Start() 
AND time < End()AND t.name IS NOT NULL
AND t.fleet = GetRandomFleet() 
GROUP BY 1, 2

(2)测试结果:

query-stationary-trucks-avg-velocity:

在这里插入图片描述
在这里插入图片描述

specific-sub-table:
在这里插入图片描述
在这里插入图片描述

五、查询类型

1. Devops/cpu-only

在这里插入图片描述

2. IoT

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造

vue3 setupTaro3 调用原生小程序自定义年月日时分多列选择器&#xff0c;NutUI改造 NutUI 有日期时间选择器&#xff0c;但是滑动效果太差&#xff0c;卡顿明显。换成 原生小程序 很顺畅 上代码&#xff1a; <template><view><pickermode"multiSelector&…

Grafana+Prometheus技术文档-进阶使用-监控spring-boot项目

阿丹&#xff1a; 之前已经实现了使用Prometheus来对服务器进行了监控和仪表盘的创建&#xff0c;现在就需要对这些监控方法使用在spring-boot中去。 实现思路&#xff1a; 1、集成Actuator 2、加入Prometheus的依赖 3、配置开放端口、以及开放监控 4、配置Prometheus中的配置…

Linux命令200例:tree用于以树状结构显示文件和目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

【Terraform学习】保护敏感变量(Terraform配置语言学习)

实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中&#xff0c;单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分&#xff0c;为角色选择可信实体类型&#xff1a; AWS 服务 使用案例:EC2 单击下一步 添加权限&#xff1a;现在&#xff0c;您可以看到…

穿越未来:探索虚拟现实科技的未来前景

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;科技&#xff0c;正如一颗崭新的明星&#xff0c;迅猛崛起&#xff0c;为人类带来前所未有的体验和想象空间。随着科技的飞速发展&#xff0c;VR 科技的未来充满了无限的可能性&#xff0c;正将我们引向一个…

VUE+ElementUI的表单验证二选一必填项,并且满足条件后清除表单验证提示

上代码 <el-form-item label"出库单号" prop"ecode" ref"ecode" :rules"rules.ecode"><el-input v-model"queryParams.ecode" placeholder"出库单号和出库箱号至少填写一项" clearable style"width…

SpringBoot启动报错:java: 无法访问org.springframework.boot.SpringApplication

报错原因&#xff1a;jdk 1.8版本与SpringBoot 3.1.2版本不匹配 解决方案&#xff1a;将SpringBoot版本降到2系列版本(例如2.5.4)。如下图&#xff1a; 修改版本后切记刷新Meavn依赖 然后重新启动即可成功。如下图&#xff1a;

Linux如何开启指定端口号

本文已收录于专栏 《运维》 目录 概念说明防火墙端口号 提供服务具体分类具体操作防火墙操作端口号操作 总结提升 概念说明 防火墙 防火墙是一种网络安全设备或软件&#xff0c;用于监控和控制网络流量&#xff0c;保护网络免受恶意攻击和未经授权的访问。防火墙可以根据预定义…

MySQL 数据类型总结

整形数据类型 1字节 8bit 2^8256

VBA_MF系列技术资料1-152

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

iOS问题记录 - Xcode 15安装低版本iOS模拟器(持续更新)

文章目录 前言开发环境问题描述问题分析1. 定位问题2. 逆向分析2.1. IDA Free2.2. Hopper Disassembler Demo 3. 模拟器日志4. supportedArchs 解决方案最后 前言 最近新需求很多&#xff0c;项目改动很大&#xff0c;开发完成后想测一遍在低版本iOS系统上的兼容性&#xff0c…

shell脚本安装nginx

shell脚本原理 以删除桌面文件的脚本为例&#xff0c;执行脚本后&#xff0c;shell脚本将代码给内核&#xff0c;内核读取后执行命令&#xff0c;如果shell脚本也在桌面上&#xff0c;执行后这个脚本文件也会被删除。 变量 echo $SHELL$符表示SHELL是一个变量&#xff0c;变量…

Vc - Qt - 绘制绿色矩形

要在Qt中绘制一个绿色矩形&#xff0c;您需要创建一个自定义的QWidget或QGraphicsView类&#xff0c;在其绘制事件中使用QPainter来绘制形状。 以下是一个简单的示例&#xff0c;演示如何在QWidget中绘制一个绿色矩形&#xff1a; #include <QWidget> #include <QPain…

NLP 时事和见解【2023】

一、说明 AI的新闻当然不是即时的&#xff0c;但作为趋势和苗头&#xff0c;我们不得不做出自己的决定。比如&#xff0c;一些软件的支持是否持续&#xff0c;哪些现成的软件将不再使用&#xff0c;等等。 图片来自中途 以下是NLPlanet为您选择的有关NLP和AI的每周文章&#x…

Linux上安装温度监控软件

文章目录 Linux上安装温度监控软件IDRAC设置 Linux上安装温度监控软件 服务器的温度是影响服务器性能重要条件&#xff0c;怎么监控机器的温度呢&#xff0c;这里知道的有两种方式 通过管理界面&#xff0c;查看机器的温度通过机器上安装监监控软件来监控温度 在物理机上怎么…

SAP AIF-Application Interface Framework基本介绍

AIF-Application Interface Framework基本介绍 SAP AIF-应用程序接口框架特性&#xff1a; 通知业务用户出错的自动警报&#xff1b; 用户友好的事务&#xff0c;用于界面监控、错误处理和直接从应用系统内纠正错误&#xff1b; SAP GUI 和基于 Web 的用户界面&#xff1b; 使…

8月10日计算机考研信息差

距24考研初试还有134 天。 8月关注&#xff1a;科目调整、招生宣讲、推荐免试 下一关键节点&#xff1a;预报名(预计2023年09月24日-09月27日) 计算机考研最新资讯&#xff1a; 1、哈尔滨工业大学(威海)发布24专业目录 计算机相关专业&#xff1a; 0812计算机科学与技术 …

Go语言工程实践之测试与Gin项目实践

Go 语言并发编程 及 进阶与依赖管理_软工菜鸡的博客-CSDN博客 03 测试 回归测试一般是QA(质量保证)同学手动通过终端回归一些固定的主流程场景 集成测试是对系统功能维度做测试验证,通过服务暴露的某个接口,进行自动化测试 而单元测试开发阶段&#xff0c;开发者对单独的函数…

在单元测试中使用Jest模拟VS Code extension API

对VS Code extension进行单元测试时通常会遇到一个问题&#xff0c;代码中所使用的VS Code编辑器的功能都依赖于vscode库&#xff0c;但是我们在单元测试中并没有添加对vscode库的依赖&#xff0c;所以导致运行单元测试时出错。由于vscode库是作为第三方依赖被引入到我们的VS C…

redis学习笔记(一)

文章目录 一、引言二、redis介绍2.1、定义2.2、Redis的数据类型及主要特性2.3、Redis的应用场景有哪些&#xff1f; 三、redis环境安装3.1、下载和安装 一、引言 在Web应用发展的初期&#xff0c;那时关系型数据库受到了较为广泛的关注和应用&#xff0c;原因是因为那时候Web站…