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

benchANT 性能榜单技术解读 Part 1:写入吞吐

近期,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录。在这些性能提升的背后,KaiwuDB 究竟都做了哪些技术创新?小 K 将逐一为你揭秘!
KaiwuDB 在 xsmall 和 small 两类规格下的时序数据写入吞吐数据

今天,我们先来了解 KaiwuDB 写入吞吐背后的 3 大核心技术

空间预分配

在传统的数据存储模式中,锁机制在多线程并发写入时往往会引发频繁的锁竞争开销。线程在获取锁和释放锁的过程中,需要进行上下文切换,这一过程涉及到保存当前线程状态、恢复被阻塞线程状态等操作,会消耗大量的 CPU 时间。同时,等待锁释放的线程处于阻塞状态,无法执行其他任务,导致整体资源利用率降低,严重影响写入效率。

空间预分配是一项针对数据文件管理的优化技术,它通过在数据写入前预先分配空间,减少数据写入时文件的动态扩容以提升写入性能。在 KaiwuDB 中,Segment 是构成数据文件的最小单元,它为数据写入提供了稳定的内存空间,减少了因动态内存分配带来的性能开销。其默认设定可存储 100 万行数据,并且这一数值能够依据实际需求灵活配置。

KaiwuDB 时序存储引擎中的 Segment 管理方式巧妙规避了传统数据存储模式中遇到的问题。由于 Segment 在磁盘上已预留出空间,且 Segment 内数据读写无锁,各个线程能够在不同的 Segment 中并行地进行数据写入操作,无需相互等待获取锁资源。Segment 内数据读写无锁机制是提高写入吞吐的关键因素之一。当多个设备同时产生时序数据需要写入数据库时,不同设备的数据可直接写入各自对应的 Segment 中,避免了线程间因锁竞争而产生的延迟。这种并行处理能力使得写入操作能够充分利用系统资源,极大地提高了整体的写入吞吐量。
在这里插入图片描述

Segment 以 Block 格式进行组织(如上图所示)。在写入时,每个 Block 前记录了该 Block 的聚合信息以提升聚合查询时的效率。Block 元数据记录在同级目录下的 .meta 文件中,该文件以链表的形式记录了哪些 Block 属于哪个设备。这种 Block 组织形式不仅有利于在写入阶段高效地整合数据,同时在进行聚合查询时,基于 Block 前的聚合信息能够快速定位和处理相关数据块,减少不必要的数据扫描和计算,显著提升查询响应速度,对提升 KaiwuDB 时序引擎的写入吞吐具有至关重要的意义。

内存映射(mmap)机制

传统的 I/O 系统调用(如 read、write)在进行文件读写操作时,数据需要在用户空间和内核空间之间进行多次拷贝。例如,当执行 write 系统调用写入数据时,数据首先从用户空间的应用程序缓冲区拷贝到内核空间缓冲区,然后再由内核将数据写入到磁盘中。这种数据拷贝操作涉及大量的 CPU 资源消耗和上下文切换开销,每次拷贝都需要 CPU 介入来协调用户空间和内核空间之间的数据转移,上下文切换也会导致一定的性能损耗。

如图所示, KaiwuDB 使用 mmap 机制,实现了时序数据的持久化,通过将文件内容直接映射到进程的地址空间,大幅减少了数据在用户空间和内核空间之间的拷贝次数。
在这里插入图片描述

当应用程序需要写入数据时,它可以直接对映射到内存中的地址空间进行操作,就如同操作普通的内存区域一样。数据在写入内存映射区域后,由操作系统的页缓存机制负责将数据定期或在合适的时机刷写到磁盘中。这样一来,大部分情况只需进行一次内存拷贝(从应用程序缓冲区到内核页缓存),相比于传统的多次拷贝方式,大大减少了 CPU 资源的占用,降低了上下文切换的频率,从而显著提高了写入操作的效率。

此外,mmap 机制可利用操作系统的页缓存机制来优化文件访问。页缓存作为操作系统用于缓存文件数据的内存区域,能够提高数据访问的速度和一致性。当数据被写入内存映射区域时,实际上是先写入到页缓存中,后续如果有对相同数据的读取操作,可以直接从页缓存中获取,避免了再次从磁盘读取数据的开销。这种缓存机制在频繁进行写入和读取操作的时序数据库场景中尤为重要,它使得数据的读写操作能够更快地完成,进一步提升了整体的写入吞吐能力。

写入不排序

传统的数据库操作中,数据写入时往往需要维护严格的数据顺序,这涉及到复杂的排序算法和数据移动操作。同时物联网时序场景下的数据特征显著,其中写入频率远远超过读取频率,并且大部分数据为顺序写入,删除操作相对较少。

针对上述特点,KaiwuDB 采用写入不排序策略 ------ 数据可以按照其产生的顺序直接追加写入到相应的位置,无需实时进行排序处理。此方法有效避免了上述提到的复杂排序操作开销,同时也极大地简化了写入流程,减少了写入操作的时间复杂度,增加了写入吞吐。比如在某个有乱序时序数据的场景下,Segment 内的 Block 的组织会如下图所示,在写入 Block 6 中时间戳为 249 的数据时,即使 Block 5 中存在着时间戳 = 253 的数据,写入时也不会将此数据插入到 Blcok 5 中,而是追加写入。

在这里插入图片描述

同时,为了支持乱序读写以及保证历史数据的有序性,KaiwuDB 时序存储引擎实现了存储小范围排序读取功能和定期数据排序重组机制。在写入过程中,虽然数据不进行实时排序,但通过这些后续的优化措施,在不影响写入性能的前提下,能够在需要读取数据时提供有序的数据视图。小范围排序读取功能能够在一定程度上满足乱序读取的需求,而定期数据排序重组则可以在系统负载较低的时段对历史数据进行整理,确保数据的长期有序性,同时不干扰实时的数据写入操作,进一步保障了写入吞吐的持续高效性,使得 KaiwuDB 时序存储引擎能够更好地应对物联网场景下海量时序数据的高效写入需求。

相关文章:

benchANT 性能榜单技术解读 Part 1:写入吞吐

近期,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录。在…...

虚拟机防火墙管理

虚拟机防火墙管理 在网络防护方面,PVE提供了相当良好的防火墙管理功能,并且可以适用于节点实体机、客体机、让客体机内不需要另外再安装软体防火墙,对于效能与统一管理大有助益,管理者可以方便一次管理所有的防火墙规则&#xff0…...

Nginx反向代理请求头有下划线_导致丢失问题处理

后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到,搜索之后发现nginx默认request的header中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: unders…...

【STM32+CubeMX】 新建一个工程(STM32F407)

相关文章: 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步Cu…...

机器人避障不再“智障”:HEIGHT——拥挤复杂环境下机器人导航的新架构

导读: 由于环境中静态障碍物和动态障碍物的约束,机器人在密集且交互复杂的人群中导航,往往面临碰撞与延迟等安全与效率问题。举个简单的例子,商城和车站中的送餐机器人往往在人流量较大时就会停在原地无法运作,因为它不…...

H2数据库在单元测试中的应用

H2数据库特征 用比较简洁的话来介绍h2数据库,就是一款轻量级的内存数据库,支持标准的SQL语法和JDBC API,工业领域中,一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…...

部署HugeGraph

部署HugeGraph 这里以hugegraph1.2.0为例子,演示一下如何安装部署hugegraph 一、下载并安装JDK11 下载JDK11 https://www.oracle.com/java/technologies/downloads/#java11 使用scp命令将安装包上传到服务器 scp /path/to/local/file usernameserver_ip:/path/…...

2025年第三届“华数杯”国际赛A题解题思路与代码(Matlab版)

游泳竞技策略优化模型代码详解(MATLAB版) 第一题:速度优化模型 本部分使用MATLAB实现游泳运动员在不同距离比赛中的速度分配策略优化。 1. 模型概述 模型包含三个主要文件: speed_optimization.m: 核心优化类plot_speeds.m: …...

嵌入式基础 -- IMX8MP的 GPC 模块技术

General Power Controller (GPC) 模块技术文档 1. GPC 模块简介 1.1 模块功能 GPC(General Power Controller)模块是用于 i.MX8M Plus 应用处理器 的电源管理组件,支持以下功能: 管理 ARM Cortex-A53 和 Cortex-M7 平台的低功…...

选择器css

1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...

全方位解读消息队列:原理、优势、实例与实践要点

全方位解读消息队列:原理、优势、实例与实践要点 一、消息队列基础认知 在数字化转型浪潮下,分布式系统架构愈发复杂,消息队列成为其中关键一环。不妨把消息队列想象成一个超级“信息驿站”,在古代,各地的信件、物资运…...

JavaScript运算符与控制结构

JavaScript作为一门强大的前端语言,提供了丰富的运算符与控制结构,使程序逻辑更加灵活与高效。 1. JavaScript运算符 算术运算符 运算符描述示例结果加法5 38-减法7 - 43*乘法2 * 612/除法8 / 24%取模(余数)10 % 31**幂运算3 …...

2030年中国AI人才缺口或达400万,近屿智能助力AI人才储备增长

在当今数字化浪潮下,人工智能(AI)已成为推动各行业发展的关键力量。然而,吸引和留住 AI 人才正成为全球性难题,中国亦不例外。据麦肯锡 2022 年全球人工智能商业高管调查,75% 的中国受访者在招聘数据科学家…...

如何设计一个注册中心?以Zookeeper为例

这是小卷对分布式系统架构学习的第8篇文章,在写第2篇文章已经讲过服务发现了,现在就从组件工作原理入手,讲讲注册中心 以下是面试题: 某团面试官:你来说说怎么设计一个注册中心? 我:注册中心嘛&…...

ubuntu 20.04 安装docker--小白学习之路

更新包 sudo apt-get update # 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release 使用清华大学源 # 添加Docker官方的GPG密钥 curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo…...

【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍 密集行人检测的遮挡问题怎么解决?

【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍 密集行人检测的遮挡问题怎么解决? 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍 密集行人检测的遮挡问题怎么解决? 文章目录 …...

Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建

目录 可视化原则 BI仪表盘搭建 仪表盘搭建原则 明确仪表盘主题 仪表盘主题拆解 开发设计工作表 经营情况总览:突出显示的文字 经营数据详情:表格 每日营收数据:多轴折线图 每日流量数据:双轴组合图 新老客占比&#xf…...

TensorFlow Quantum快速编程(基本篇)

一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…...

ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用

目录 ELK工作原理展示图 一、ElasticSearch介绍(数据搜索和分析) 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…...

git 转移文件夹

打开终端或命令行界面:首先,确保你的电脑上安装了 Git,并打开终端或命令行界面。 导航到你的仓库目录:使用 cd 命令来切换到包含你想要移动文件夹的仓库的目录。 cd /path/to/your/repository使用 git mv 命令移动文件夹&#x…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...