一文走进时序数据库性能测试工具 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
一、背景 在物联网、车联网等时序数据场景中,数据的高速写入能力至关重要,会对产品方案的可用性、可靠性和扩展性产生影响。 以物联网为例,当面临千万甚至上亿设备、平均每个设备采集几十个到几百个指标时,每秒生成的数据将达到…...
通俗讲解-动量梯度下降法原理与代码实例
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一.动量梯度下降法介绍 1.1 动量梯度下降法简介与思想 1.2 动量梯度下降法的算法流程 二.动量梯度下降法代码实例 2.1 动量梯度下降法实例代码 一.动量梯度下降法介绍…...

【【STM32-USART串口协议】】
STM32-USART串口协议 USART串口协议 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 •通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&…...
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…...
费曼学习法
费曼学习法 费曼学习法(Feynman Technique)是一种学习和理解复杂概念的方法,以理查德费曼(Richard Feynman)这位著名的理论物理学家命名。该方法的核心思想是通过将学习内容简化并用自己的话解释给别人,来…...
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能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...
node.js 基础高并发案例
什么是高并发 高并发是指系统在同一时间段内需要处理大量的并发请求或同时进行大量的操作。在计算机领域中,高并发通常指的是在短时间内有大量的用户或客户端同时访问系统或进行操作,对系统的并发处理能力提出了较高的要求。 高并发的特点包括 大量的…...

OpenCV实例(八)车牌字符识别技术(二)字符识别
车牌字符识别技术(二)字符识别 1.字符识别原理及其发展阶段2.字符识别方法3.英文、数字识别4.车牌定位实例 1.字符识别原理及其发展阶段 匹配判别是字符识别的基本思想,与其他模式识别的应用非常类似。字符识别的基本原理就是对字符图像进行…...
svn文章五:问题排查与修复 - 出了问题怎么办?SVN故障排除与修复指南
文章五:问题排查与修复 - “出了问题怎么办?SVN故障排除与修复指南” 概述:在使用SVN时,难免会遇到一些问题和错误。在这篇文章中,我们将教您如何进行故障排查和修复,保护您的SVN仓库和数据安全。 1. 引言…...
国产开源ambari之DataSophon部署
介绍 DataSophon致力于快速实现部署、管理、监控以及自动化运维大数据云原生平台,帮助您快速构建起稳定、高效、可弹性伸缩的大数据云原生平台。 主要特性有: 快速部署,可快速完成300个节点的大数据集群部署兼容复杂环境,极少的依赖使其很容易适配各种复杂环境监控指标全面丰…...

面试之快速学习STL- vector
1. vector底层实现机制刨析: 简述:使用三个迭代器表示的:  这也就解释了,为什么 vector 容器在进行扩容后,与其相关的指针、引用以及迭代器可能会失效的原因。 insert 整体向后移 erase 整体向前移…...

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

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

【Visual Studio Code】--- Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径
Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径 一、概述二、修改 Code 插件数据和缓存的保存路径 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶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仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&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,集成电路总线,是一种同步,串行,半双工通信总线。 IIC总线协议——总线就是传输数据通道,协议就是传输数据的规则,有以下特点: 由时钟线SCL和数据线S…...

你永远想象不到有多折磨的 Android 开发 react-native gradle*!¥%#
很难过,拿到项目运行不起来,错误报告研究几天没研究明白,改代码,装gradle,忙和好久还是一个样,也不知道是码的问题还是什么,一开始 后面装完gradle,不报错了,但是也跑不起…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...