一文走进时序数据库性能测试工具 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

在这里插入图片描述

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

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

相关文章

Docker+Consul+Registrator 实现服务注册与发现

第四阶段 时 间&#xff1a;2023年8月8日 参加人&#xff1a;全班人员 内 容&#xff1a; DockerConsulRegistrator 实现服务注册与发现 目录 一、服务注册中心引言 CAP理论是分布式架构中重要理论&#xff1a; 二、服务注册中心软件 &#xff08;一&#xff09;Zoo…

ELK 将数据流转换回常规索引

ELK 将数据流转换回常规索引 现象&#xff1a;创建索引模板是打开了数据流&#xff0c;导致不能创建常规索引&#xff0c;并且手动修改、删除索引模板失败 "reason" : "composable template [logs_template] with index patterns [new-pattern*], priority [2…

MQTT 订阅接收消息 mosquitto 方式

1 说明 采用 mosquitto 库&#xff0c;实现订阅主题&#xff0c;并接收消息。其中服务器有做限制&#xff0c;需要对应的 cilent id &#xff0c;cafile 、certfile 、keyfile 等配置2 环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev su…

chatGLM 本地部署(windows+linux)

chatGLM算是个相对友好的模型&#xff0c;支持中英文双语的对话交流&#xff0c;清华出的 我的教程无需特别的网络设置&#xff0c;不过部分情况因为国内网络速度慢&#xff0c;需要反复重复 chatGLM github地址 一、硬件需求 N卡8G显存以上&#xff0c;最好16G以上&#xff…

SuperMap GIS基础产品桌面GIS FAQ集锦(5)

SuperMap GIS基础产品桌面GIS FAQ集锦&#xff08;5&#xff09; 【iDesktop】【iDesktopX】态势推演怎么使用&#xff1f; 【解决办法】 1、要先新建一个CAD数据集&#xff0c;然后将标绘加到CAD数据集中。 2、再使用态势推演管理器&#xff0c;右键新建分组。 3、选中场景中的…

【算法|数组】手撕经典二分法

算法|数组——二分查找 文章目录 算法|数组——二分查找引言二分查找左闭右闭写法左闭右开写法 总结 引言 首先学习这个算法之前需要了解数组知识&#xff1a;数组。 大概介绍以下&#xff1a; 数组是存储在连续内存空间上的相同类型数据的集合。数组下标都是从0开始。数组在…

数学建模—多元线性回归分析(+lasso回归的操作)

第一部分&#xff1a;回归分析的介绍 定义&#xff1a;回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的人数就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释…

webshell链接工具-Godzilla(哥斯拉)

项目地址 https://github.com/BeichenDream/Godzilla

势不可挡!新能源车型L2搭载率破50%,TOP20品牌数据出炉

中国乘用车市场正在走出去年的阴霾。 机构公开数据显示&#xff0c;2023年上半年中国乘用车市场产量1100.77万辆&#xff0c;同比增长7.5%&#xff1b;终端销量959.08万辆&#xff0c;同比增长4.7%&#xff1b;乘用车出口152.36万辆&#xff0c;同比增长87.6%。 在实际交付量…

JMeter启动时常见的错误

很多小伙伴在学工具这一块时&#xff0c;安装也是很吃力的一个问题&#xff0c;之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候&#xff0c;一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装&#xff0c;Windows 平台&#xff0c;双击 jmeter/bin …

中间件RabbitMQ消息队列介绍

1. MQ的相关概念 1.1 什么是MQ MQ&#xff08;message queue&#xff09;&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息…

protobuf 2定义string常量

背景 protobuf 2中定义的enum枚举值必须为数字类型&#xff0c;故不支持string类型&#xff0c;但有些业务场景又确实需要定义string常量。 目标 在protobuf 2中定义string常量。 方案 思路&#xff1a;通optional default实现string常量。 细节&#xff1a; 1、protobu…

Flink CEP(三)pattern动态更新

线上运行的CEP中肯定经常遇到规则变更的情况&#xff0c;如果每次变更时都将任务重启、重新发布是非常不优雅的。尤其在营销或者风控这种对实时性要求比较高的场景&#xff0c;如果规则窗口过长&#xff08;一两个星期&#xff09;&#xff0c;状态过大&#xff0c;就会导致重启…

【云原生】Docker-Compose全方面学习

目录 1.compose简介 Compose V2 2.compose安装与下载 二进制包 PIP 安装 bash 补全命令 卸载 3.docker compose管理命令 命令对象与格式 命令选项 命令使用说明 1.compose简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose&#xff0c;您可…

Acwing.883 高斯消元解线性方程组

题目 输入一个包含n个方程n个未知数的线性方程组。 方程组中的系数为实数。 求解这个方程组。 下图为一个包含m个方程n个未知数的线性方程组示例: 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含n1个实数&#xff0c;表示一个方程的n个系数以及等号右侧的常数。 …

《向量数据库指南》——Rockset 为实时数据库添加向量嵌入支持(一)

同样,Venkataramani——除了是 Rockset 的联合创始人外,还担任首席执行官——表示,增加对向量嵌入的支持的关键方面是供应商现在使用户能够在一个位置管理和探索所有类型的数据。 “一个单一的数据库现在可以存储你的结构化数据、半结构化数据和你的向量嵌入来构建丰富的…

‘vue’不是内部或外部命令,也不是可运行的程序或批处理文件的原因及解决方法

今天我在用node.js的时候&#xff0c;结果出现如下错误&#xff1a; C:\Users\xiesj> vue -v vue不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 原因&#xff1a; 1、确定npm是否已正确安装&#xff1f; 2、确定vue以及vue-cli已正确安装&#xff1f;…

记录线上一次mysql只能查询,不能插入或更新的bug

错误复现 突然有一天产品通知xx服务不可用&#xff0c;想着最近也没有服务更新&#xff0c;就先排查一下服务日志 使用postman测试的时候请求明显超时&#xff0c;查看日志显示是一个锁的问题 使用工具连接到mysql&#xff0c;查看information_schema.INNODB_TRX,发现有一个事…

【C++】做一个飞机空战小游戏(五)——getch()控制两个飞机图标移动(控制光标位置)

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

二、 MySQL 内部技术架构

二、 MySQL 内部技术架构 047 Mysql内部支持缓存查询吗&#xff1f; 当MySQL接收到客户端的查询SQL之后&#xff0c;仅仅只需要对其进行相应的权限验证之后&#xff0c;就会通过Query Cache来查找结果&#xff0c;甚至都不需要经过Optimizer模块进行执行计划的分析优化&…