当前位置: 首页 > news >正文

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

在这里插入图片描述

相关文章:

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

一、背景 在物联网、车联网等时序数据场景中&#xff0c;数据的高速写入能力至关重要&#xff0c;会对产品方案的可用性、可靠性和扩展性产生影响。 以物联网为例&#xff0c;当面临千万甚至上亿设备、平均每个设备采集几十个到几百个指标时&#xff0c;每秒生成的数据将达到…...

通俗讲解-动量梯度下降法原理与代码实例

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一.动量梯度下降法介绍 1.1 动量梯度下降法简介与思想 1.2 动量梯度下降法的算法流程 二.动量梯度下降法代码实例 2.1 动量梯度下降法实例代码 一.动量梯度下降法介绍…...

【【STM32-USART串口协议】】

STM32-USART串口协议 USART串口协议 •通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 •通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&…...

vue3.0组件通信

1、props 没有加TS限制类型的时候 1. 数组写法 defineProps([count, changCount]) 2. 对象写法 defineProps({count: Number,changCount: Function }) 3. 配置对象 defineProps({count: {type: Number,default: 2},changCount: {type: Function,required: true} })注意: defi…...

费曼学习法

费曼学习法 费曼学习法&#xff08;Feynman Technique&#xff09;是一种学习和理解复杂概念的方法&#xff0c;以理查德费曼&#xff08;Richard Feynman&#xff09;这位著名的理论物理学家命名。该方法的核心思想是通过将学习内容简化并用自己的话解释给别人&#xff0c;来…...

Kubernetes介绍和部署,使用

1.k8s kubernetes来自希腊语舵手,google, 8是ubernete 1.管理docker容器 go写的(并发) 2.用于微服务 3.cncf云原生基金会 2.mater(管理节点)和nodes(微服务节点) 3.部署 1.minikube kind官网在线测试语句 2.kubeadm(官方)(安装比较方便 添加) 3.github下载二进制包 4.yum(老) …...

视频汇聚平台EasyCVR视频监控播放平台WebRTC流地址无法播放的问题解决方案

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…...

node.js 基础高并发案例

什么是高并发 高并发是指系统在同一时间段内需要处理大量的并发请求或同时进行大量的操作。在计算机领域中&#xff0c;高并发通常指的是在短时间内有大量的用户或客户端同时访问系统或进行操作&#xff0c;对系统的并发处理能力提出了较高的要求。 高并发的特点包括 大量的…...

OpenCV实例(八)车牌字符识别技术(二)字符识别

车牌字符识别技术&#xff08;二&#xff09;字符识别 1.字符识别原理及其发展阶段2.字符识别方法3.英文、数字识别4.车牌定位实例 1.字符识别原理及其发展阶段 匹配判别是字符识别的基本思想&#xff0c;与其他模式识别的应用非常类似。字符识别的基本原理就是对字符图像进行…...

svn文章五:问题排查与修复 - 出了问题怎么办?SVN故障排除与修复指南

文章五&#xff1a;问题排查与修复 - “出了问题怎么办&#xff1f;SVN故障排除与修复指南” 概述&#xff1a;在使用SVN时&#xff0c;难免会遇到一些问题和错误。在这篇文章中&#xff0c;我们将教您如何进行故障排查和修复&#xff0c;保护您的SVN仓库和数据安全。 1. 引言…...

国产开源ambari之DataSophon部署

介绍 DataSophon致力于快速实现部署、管理、监控以及自动化运维大数据云原生平台,帮助您快速构建起稳定、高效、可弹性伸缩的大数据云原生平台。 主要特性有: 快速部署,可快速完成300个节点的大数据集群部署兼容复杂环境,极少的依赖使其很容易适配各种复杂环境监控指标全面丰…...

面试之快速学习STL- vector

1. vector底层实现机制刨析&#xff1a; 简述&#xff1a;使用三个迭代器表示的&#xff1a; &#xfffc; 这也就解释了&#xff0c;为什么 vector 容器在进行扩容后&#xff0c;与其相关的指针、引用以及迭代器可能会失效的原因。 insert 整体向后移 erase 整体向前移…...

LeetCode_03Java_1572. 矩阵对角线元素的和

给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线的和为&#xff1a;1 5 9 3 7 2…...

系统架构设计师---职责及与其他角色的关系区别

一. 系统架构设计师的职责如下: 系统架构设计师是系统或产品线的设计责任人,是一个负责理解和管理并最终确认和评估非功能性系统需求(比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等),给出 开发规范,搭建系统实现的核心构架,对整个软件架构、关键构件、…...

【Visual Studio Code】--- Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径

Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径 一、概述二、修改 Code 插件数据和缓存的保存路径 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成…...

mapbox-gl中mvt、pbf 矢量切片 feature id bug

1.版本:mapbox-gl.js 2.13.0,pbf采用 postgis生成 2.调用矢量切片时,采用如下方法查询矢量切片要素,报错 map.on(mousemove, function(e) { var bbox = [ [e.point.x - 5, e.point.y - 5], [e.point…...

206、仿真-51单片机锂电池蓄电池电压电流加按键控制开关状态Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…...

【Realtek sdk-3.4.14b】RTL8197F+RTL8812F欧洲屏蔽5G天气雷达信道DFS信道120、124、128方法

需求描述 对于欧洲国家来说,默认支持DFS信道,但是有三个信道比较特殊,是天气雷达信道,如下图所示120、124、128,天气雷达信道有个特点就是在信号可以发射之前需要检测静默15min,如果信道自动选择到了天气雷达信道,就会有15min的时间无法连接到WiFi热点,严重影响用户体验…...

【嵌入式学习笔记】嵌入式入门7——IIC总线协议

1.IIC简介 IIC即Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步&#xff0c;串行&#xff0c;半双工通信总线。 IIC总线协议——总线就是传输数据通道&#xff0c;协议就是传输数据的规则&#xff0c;有以下特点&#xff1a; 由时钟线SCL和数据线S…...

你永远想象不到有多折磨的 Android 开发 react-native gradle*!¥%#

很难过&#xff0c;拿到项目运行不起来&#xff0c;错误报告研究几天没研究明白&#xff0c;改代码&#xff0c;装gradle&#xff0c;忙和好久还是一个样&#xff0c;也不知道是码的问题还是什么&#xff0c;一开始 后面装完gradle&#xff0c;不报错了&#xff0c;但是也跑不起…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...