IoTDB 在国际数据库性能测试排行榜中位居第一?测试环境复现与流程详解第一弹!...

最近我们得知,Apache IoTDB 多项性能表现位居 benchANT 时序数据库排行榜(Time Series: DevOps)性能排行第一名!(榜单地址:https://benchANT.com/ranking/database-ranking)

benchANT 位于德国,是一家专门做云设施和数据库性能评估的测试机构。在用户对数据库选型很难找到以性能、功能表现为参考基准榜单的情况下,benchANT 致力于在统一的硬件资源和系统配置下对各类主流数据库系统做性能测试,并依据各项指标进行排名。

0ece301d719f11a35ef700c189747f9d.png

benchANT 时序数据库排行榜的评估标准基于 TSBS 基准测试套件的 DevOps 场景,在统一的 AWS(Amazon Web Services,是亚马逊公司提供的一套云计算服务)环境中进行测试,并得出了 IoTDB 的写入吞吐、存储占用、查询延迟等性能结果。

那么,这些结果是在什么样的测试环境下得出的?测试过程又应该是什么样的?最终的性能结果是排行榜上面的样子吗?

既然 TSBS 是开源的测试工具,我们决定用这套标准化测试工具进行反推,尝试还原出 benchANT 时序数据库排行榜测评数据的“产出”过程!

此篇会总结榜单的数据对比结果,并介绍 benchANT 排行榜的背景与写入、查询测试环境。下篇我们将展示我们复现的命令集脚本与 IoTDB 建模。

1

结论总结

基于 benchANT 排行榜的评估结果与其提供的测试环境、条件,Apache IoTDB 团队试图还原了 benchANT 排行榜针对 Apache IoTDB 性能与成本指标的测试流程,并与 benchANT 排行榜中囊括的其他时序数据库,InfluxDB、TimescaleDB、QuestDB 等的数据表现进行了对比。

在写入、查询与存储性能方面,Apache IoTDB 均表现优异。Apache IoTDB 的写入吞吐量(Write Throughput)通过导入 2,617,920,000 个数据点所需的耗时计算得到,测试结果可达到 363 万点/秒,与 benchANT 排行榜中的 InfluxDB、TimescaleDB 、QuestDB 对比,IoTDB 的写入吞吐量最多是其 6.9 倍,最少也可达到 1.4 倍

Apache IoTDB 的查询延迟(Read Latency)通过查询“1 个设备的 1 个测点在 1 个小时内按照 1 分钟进行分段聚合的值”这一场景计算得到,测试结果可达到 2 毫秒。与 benchANT 排行榜中的 InfluxDB、TimescaleDB、QuestDB 对比,IoTDB 的查询响应速度最多是其 96.5 倍,最少也可达到 3 倍

Apache IoTDB 的存储占用(Storage Comsumption)通过在查询测试结束时记录存储空间占用得到,测试结果可达到仅占用 2 GiB。与 benchANT 排行榜中的 InfluxDB、TimescaleDB、QuestDB 对比,IoTDB 的存储占用最低是其 1/35

同时,benchANT 排行榜中使用读取吞吐量(Read Throughput)/ 月成本(Monthly Costs),计算出的成本效益(Operations Per Cost),也就是代表“每一美元能够置换多少的读取性能”,进而评估时序数据库的投入性能比。在这一指标中,Apache IoTDB 与排行榜中的 InfluxDB、TimescaleDB、QuestDB 对比,成本效益最多是其 22.2 倍,最少也可达到 1.4 倍,在使用性价比上也存在优势

861beee09d4f289f6996bdce8e3a3543.png

(benchANT 时序数据库排行榜各数据库性能对比)

2

背景介绍

benchANT 是国际知名的数据库评测机构,以可靠、独立及透明的方法对各种数据库进行性能评测。

benchANT 榜单收录了常见的关系型数据库、NoSQL 数据库、NewSQL 数据库及时序数据库等,通过使用固定的测试负载、相同的测试机器来保证测试结果的公平性。

当前 benchANT 收录了如下三种测试场景:

  • "CRUD: General Purpose":该场景主要测试数据库 CRUD 操作的性能,使用的测试工具为 YCSB。benchANT 在该场景测试了 MySQL、PostgreSQL 及 Cassandra 等数据库在不同负载下的性能对比(读写延迟、吞吐等指标)。

  • "OLTP: Mix":该场景主要测试数据库在事务方面的性能,使用的测试工具为 Sysbench。benchANT 在该场景测试了 MySQL 及 PostgreSQL 等数据库在不同负载下的性能对比(每秒执行的事务数量、查询延迟等指标)。

  • "Time Series: DevOps":该场景主要测试时序数据库的读写性能,使用的测试工具为 TSBS,TSBS 是 Timescale 开源的一款时序数据性能基准测评工具,它提供了时序数据生成、数据导入、查询生成、查询执行等功能,并可以自动化统计测试的结果。Apache IoTDB 参与的评测便属于该类别,benchANT 针对时序场景的测试均基于相同的硬件资源和测试负载,性能评估使用的指标具体如下:

    • WRITE THROUGHPUT:写入吞吐,单位时间内处理的写入数据点数量,该数值越高表明数据库写入性能越高。

    • READ THROUGHPUT:查询吞吐,单位时间内处理的查询请求的数量,该数值越高表明数据库处理查询请求的能力越强。

    • READ LATENCY:查询延迟,单个查询的响应时间,该数值越低表明数据库处理单个查询的速度越快。

    • STORAGE CONSUMPTION:存储空间占用,记录测试运行过程中的磁盘平均使用量。

    • MONTHLY COSTS:月度开销,仅与使用的AWS机器费用有关。

    • OPERATIONS PER COST:成本效益,记录单位开销内能够执行的操作数量,该数值越高表明数据库的成本效益越大。

e0a70dffd9f4cacfc9f17da249d9e39b.png

3

测试环境

3.1

写入性能测试

benchANT 的测试选取了 TSBS 中的 DevOps 场景,该场景模拟了服务器运行时的监控数据,每个运行的服务器(设备)均采集 9 大项监控指标(cpu、diskio、disk、kernel、mem、net、nginx、postgresl、redis),其中每项指标下采集不同的测量值,以 cpu 为例,cpu 指标下记录了 10 个测量值,分别为 usage_user、usage_system、usage_idle、usage_nice、usage_iowait、usage_irq、usage_softirq、usage_steal、usage_guest 和usage_guest_nice。9 大项监控指标一共会记录 101 项测量值。

benchANT 生成的测试数据集便基于上文所述的 Devops 场景,共生成 1000 个设备(服务器)、数据范围为 3 天(2022-07-25T00:00:00Z ~ 2022-07-28T00:00:00Z)、数据采集间隔为 10 秒,所以一共包含 1000 * 3 * 24 * 60 * 6 * 101 = 2,617,920,000 个数据点。benchANT 榜单里的写入吞吐,便是通过导入 2,617,920,000 个数据点所需的耗时计算得到。

数据写入阶段包含大量的可调参数,参数不同,数据库的性能也可能有很大不同。为保证测试的公平性,benchANT 测试采用的关键参数如下:

  • "workers": benchANT用于数据导入的并发客户端数量,当数据库部署在 2C8GB 实例时,该值设置为 50;当数据库部署在 4C16GB 实例时,该值设置为 100。

  • "hashWorkers": 控制数据的写入转发规则,当该值设置为 true 时,可以保证相同设备的数据均由同一个客户端进行写入,保证了数据库服务端不会接收到乱序数据;当该值设置为 false 时,则每个设备的数据都会由随机的客户端进行写入,数据库服务端会接收到一定程度的乱序数据。benchANT 在时序场景下的测试,针对所有数据库的测试该值均设置为 false。

  • "batchSize": 单次写入包含的数据点数量,针对所有时序数据库的测试该值均设置为 1000。

3.2

查询性能测试

在数据导入阶段完成后,benchANT 会执行查询性能测试,查询测试用例依然由 TSBS 工具生成,针对 DevOps 场景,TSBS 提供了"single-groupby-1-1-1"、"single-groupby-1-1-12"等多种查询类型,而在 benchANT 的测试框架里,目前只基于最具代表性的"single-groupby-1-1-1"查询类型进行评测。

"single-groupby-1-1-1"查询类型表示的含义是“查询 1 个 metric 中的 1 个 host 在 1 个小时内按照 1 分钟进行分段聚合的值”,针对该类型的 IoTDB 查询示例 SQL 语句为:

SELECT MAX_VALUE(usage_user) FROM root.cpu.host_1 GORUP BY ([2022-07-25 00:00:00, 2022-07-25 01:00:00), 1h)

在 benchANT 的测试中,一共生成了 100000 个"single-groupby-1-1-1"类型的查询语句,每个查询语句会从Metric "CPU"下的1000个设备里随机选择1个设备、从"2022-07-25T00:00:00Z"至"2022-07-28T00:00:00Z"的时间区间内随机选择1个小时作为查询条件。执行完 100000 次查询后,记录整个查询阶段的查询吞吐、查询延迟信息。

查询测试中的关键参数是"workers",表示执行查询测试时并发客户端的数量,该参数与数据写入时指定的"workers"参数保持一致。

3.3

benchANT 运行环境

为保证公平性及可复测性,benchANT 针对数据库的测试均运行在 AWS EC2 上,通过标准化的流程一键评测并生成测评结果。其中针对时序场景的测试,benchANT 通过 Scaling 属性进行区分不同的测试规模,该属性描述了实例规格和测评数据库集群规格的对应关系,集群 small(即 1 节点)+ 实例大小 small = xSmall scaling,集群 small (即1节点)+ 实例大小 medium = small scaling。其中 small, medium 实例的配置如下:

bdb3ff654127cc51ee2074ea85c90677.jpeg

如下图所示:

在 xSmall scaling 下,benchANT 客户端使用 AWS EC2 c5.4xlarge 实例,客户端机器的规格为 16 核 32GB;IoTDB Server 使用 AWS EC2 m5.large 实例,Server 的规格为 2 核 8GB,IoTDB 的部署形态为 1ConfigNode 1DataNode。

在 small scaling 下,benchANT 客户端使用 AWS EC2 c5.4xlarge 实例,客户端机器的规格为 16 核 32GB;IoTDB Server 使用 AWS EC2 m5.xlarge 实例,Server 的规格为 4 核 16GB,IoTDB 的部署形态为 1ConfigNode 1DataNode。

通过构建不同的规模,可以更全面的评测数据库在不同资源下的性能表现。需要说明的是,benchANT 是第三方国外评测机构,其在时序测试场景下构建了 xSmall 与 small 两种规模,这两种规模均非大规模集群,在我们实际的测试中,随着机器规格的提升,IoTDB 对机器资源的调度可以更加精细、具有更大的发挥空间。

26fd4d1837b02c139eeeb24f49e72cbd.png

在接下来的章节,我们将重点介绍基于以上 benchANT 场景,我们复现的测试步骤,分析并对比 Apache IoTDB 及其它时序数据库的性能表现。具体的命令集脚本以及建模方法详见第二弹,敬请关注!

da749ac5c4a10bd68f5365c2cb7c61a6.gif

6f791d3b31c5aa79bff3a1c1ad7c10d2.png

1bcca6aae3418e04abcd767985bddd7e.png

1a57fd9d9189cdda52224d49d9b46d62.png

8dcd2e7f2633b87dbda2b69e1956a9a9.gif

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

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

相关文章

毛玻璃动画交互效果

效果展示 页面结构组成 从上述的效果展示页面结构来看,页面布局都是比较简单的,只是元素的动画交互比较麻烦。 第一个动画交互是两个圆相互交错来回运动。第二个动画交互是三角绕着圆进行 360 度旋转。 CSS 知识点 animationanimation-delay绝对定位…

Vue之transition组件

Vue提供了transition组件,使用户可以更便捷地添加过渡动画效果。 transition组件 transition组件也是一个抽象组件,并不会渲染出真实dom。Vue会在其第一个真实子元素上添加过渡效果。 props render 这里将render分为两部分,第一部分界定真…

线性表的链式存储结构——链表

一、顺序表优缺点 优点:我们知道顺序表结构简单,便于随机访问表中任一元素; 缺点:顺序存储结构不利于插入和删除,不利于扩充,也容易造成空间浪费。 二、链表的定义 ①:概念: 用一组任…

JavaScript高阶班之ES6 → ES11(八)

JavaScript高阶班之ES6 → ES11 1、ES6新特性1.1、let 关键字1.2、const关键字1.3、变量的解构赋值1.3.1、数组的解构赋值1.3.2、对象的解构赋值 1.4、模板字符串1.5、简化对象写法1.6、箭头函数1.7、函数参数默认值1.8、rest参数1.9、spread扩展运算符1.9.1、数组合并1.9.2、数…

docker-compose 网络配置- IP 主机名 hosts配置

docker-compose 配置IP、hostname、hosts配置 配置IP version: "3" networks:bd-network: # 声明网络external: true services:kafka: # 服务名称networks:bd-network: # 连接的网络名称ipv4_address: 172.2.0.102 # 配置IP配置 主机名 version: "3&quo…

mybatis-spring集成数据库连接池开启注解式开发

目录 1. 引入依赖包 2. 集成配置文件 2.1 开启注解式开发 2.2 spring引入外部配置文件 2.3 数据库连接池 2.4 spring整合mybatis 2.5 自动代理 3. 注解式开发的几个常用注解 4. spring-test 附录一&#xff1a;spring常用注解 1. 引入依赖包 <!--spring整合mybat…

网络基础(一)

通信&#xff0c;在古代是通过书信与他人互通信息的意思。 今天&#xff0c;“通信”这个词的外沿已经得到了极大扩展&#xff0c;它目前的大意是指双方或多方借助某种媒介实现信息互通的行为。 如果按照当代汉语的方式理解“通信”&#xff0c;那么古代的互遣使节、飞鸽传书…

IDEA git操作技巧大全,持续更新中

作者简介 目录 1.创建新项目 2.推拉代码 3.状态标识 5.cherry pick 6.revert 7.squash 8.版本回退 9.合并冲突 1.创建新项目 首先我们在GitHub上创建一个新的项目&#xff0c;然后将这个空项目拉到本地&#xff0c;在本地搭建起一个maven项目的骨架再推上去&#xff0…

【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

焕新古文化传承之路,AI为古彝文识别赋能

目录 1 古彝文与古典保护 2 古文识别的挑战 2.1 西文与汉文OCR 2.2 古彝文识别难点 3 合合信息&#xff1a;古彝文保护新思路 3.1 图像矫正 3.2 图像增强 3.3 语义理解 3.4 工程技巧 4 总结 1 古彝文与古典保护 彝文指的是云南、贵州、四川等地的彝族人使用的文字&am…

十九,镜面IBL--BRDF积分贴图

再回顾下镜面部分的分割求和近似法 现在关注第二部分 最后可化为 也就是说&#xff0c;这两部分积分可以获得F0的系数和F0的偏差。 这两个值可以存储到BRDF积分贴图的RG部分。void main() { vec2 integratedBRDF IntegrateBRDF(TexCoords.x, TexCoords.y); FragColor …

驱动开发:STM32F7控制AD5663模拟量输出

AD5663是ADI公司的一款DAC模块&#xff0c;用以实现两路模拟量信号输出。该芯片通过SPI通信来驱动。下面讲解使用STM32F7主控芯片来控制AD5663模拟量输出的流程。 配置STM32F7 SPI通信管脚 STM32CubeMX生成SPI驱动代码 /* SPI3 init function */ void MX_SPI3_Init(void) {/*…

【数据代理+事件处理+计算属性与监视+绑定样式+条件渲染】

数据代理事件处理计算属性与监视绑定样式条件渲染 1 数据代理1.1 回顾Object.defineProperty方法1.2 数据代理 2 事件处理2.1 绑定监听2.2 事件修饰符2.3 键盘事件 3 计算属性与监视3.1 计算属性3.2 监视属性(侦视属性)3.3 watch对比computed 4 绑定样式4.1 绑定class样式4.2 绑…

区块链3.0时代 基于GoMars构建的新概念TravelFi能否注入新力量?

区块链技术进入3.0时代 后疫情时代&#xff0c;全球数字化进程不断加快&#xff0c;世界范围内的移动通信、互联网技术及各类数字化应用的社会普及率也正在快速提升&#xff0c;疫情推动了互联网经济的增长&#xff0c;也让数字经济的价值开始显现。 数字经济一词的由来至今已经…

代码随想录 Day8 栈(FILO)与队列(FIFO) LeetCode T232 用栈实现队列 LeetCodeT225 用队列实现栈

题目详细思路来自于:代码随想录 (programmercarl.com) 栈和队列都是大家不陌生的数据结构,我们之前的栈和队列一般是用数组或链表来实现的 , 这里我们给出实现方式,用于帮助更好的理解. 1.用链表实现栈 /* 基于链表实现的栈 */ class LinkedListStack { private ListNode sta…

Vue3之Suspense

<Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成&#xff0c;并可以在等待时渲染一个加载状态。 我们可以看到官网并不推荐我们使用它&#xff0c;目前仍处于测试中。 他用于加…

VUE2项目:尚品汇-axios二次封装请求以及VUEX的状态管理库

上一篇&#xff1a;VUE2项目&#xff1a;尚品汇VUE-CLI脚手架初始化项目以及路由组件分析&#xff08;一&#xff09; 目录 axios二次封装API接口管理与解决跨域API接口管理nprogress进度条配置 VUEX状态管理库三级分类动态背景颜色防抖三级联动跳转路由分析 axios二次封装 项…

windows系统查看exe程序的依赖dll并拷贝到指定路径下

脚本 echo off REM windows_copy_depends.bat是脚本文件名&#xff0c;exe_path是exe文件的全路径&#xff0c;dll_folder_path是脚本当前路径下的文件夹名称 REM 如windows_copy_depends.bat E:\git_code\windows_docker_desktop\winget.exe 123 echo Usage: windows_copy_dep…

Kafka收发消息核心参数详解

文章目录 1、从基础的客户端说起1.1、消息发送者主流程1.2、消息消费者主流程 2、从客户端属性来梳理客户端工作机制2.1、消费者分组消费机制 1、从基础的客户端说起 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId…

《大师级引导-应对困境的工具与技术》读书笔记1

《大师级引导-应对困境的工具与技术》这个书&#xff0c;十分不错&#xff0c;教练和非教练都可以学习。下面是其中的关于冲突的处理&#xff1a; 定义&#xff1a;双方以解决冲突、说明关系为目的而进行的积极的、具有建设性的对话。 目的&#xff1a;制定双方协议&#xf…