当前位置: 首页 > 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…...

CodeGPT高级代理系统:10个实用工具助你高效编程的完整指南

CodeGPT高级代理系统:10个实用工具助你高效编程的完整指南 【免费下载链接】CodeGPT The leading open-source AI copilot for JetBrains. Connect to any model in any environment, and customize your coding experience in any way you like. 项目地址: https…...

OpenHarmony系统定制:实现开机自启动应用与Launcher替换实战

1. 项目概述:为OpenHarmony设备定义“开机即用”的体验最近在基于触觉智能的RK3566开发板上折腾OpenHarmony 4.1,一个很实际的需求浮出水面:如何让系统开机后,默认就打开我指定的应用?这不仅仅是开发者的自娱自乐&…...

CS188 Note3 学习笔记

更好的阅读体验 Informed Search(启发式搜索) 原文解释 If we have some notion of the direction in which we should focus our search, we can significantly improve performance and “hone in” on a goal much more quickly. This is exactly the focus of informed …...

深度解析Real-ESRGAN:6B轻量模型实现专业级图像超分辨率

深度解析Real-ESRGAN:6B轻量模型实现专业级图像超分辨率 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN Real-ESRGAN_…...

树莓派3B上跑通Apriltag识别:老设备配置Python环境(OpenCV+pupil_apriltags)的血泪史与终极方案

树莓派3B上跑通Apriltag识别:老设备配置Python环境(OpenCVpupil_apriltags)的血泪史与终极方案 当你在二手市场淘到一台树莓派3B,满心欢喜地想用它搭建一个视觉导航机器人时,现实往往会给你当头一棒。这款2016年发布的…...

幻兽帕鲁服务器从1.4.1升级到1.5.0踩坑实录:Docker镜像更新、客户端兼容性与回滚指南

幻兽帕鲁服务器1.5.0升级全流程实战:从风险评估到完美回滚 当游戏社区还沉浸在1.4.1版本的稳定体验时,1.5.0版本的更新公告已经在玩家群中激起千层浪。作为服务器管理员,每次版本迭代都像走在钢索上——新特性带来的诱惑与未知风险永远并存。…...

炸了!Claude 更新后 Mac 老系统直接报废:开发者凌晨三点爬起来修环境

一、真实事故现场:上海某团队的惊魂一夜 2026年5月15日凌晨2:37,上海浦东某科技公司。 高级工程师小李盯着屏幕上的错误信息,手指在键盘上飞快地敲击着。他面前是三个显示器,每个都显示着不同的终端窗口,满屏的红色错误信息像血一样刺眼。 "这怎么可能?"他自…...

5分钟学会:用SlopeCraft制作惊艳的Minecraft立体地图画终极指南

5分钟学会:用SlopeCraft制作惊艳的Minecraft立体地图画终极指南 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 你是否曾想将心爱的照片或艺术作品变成Minecraft世界中的立体艺…...

别再只盯着Transformer了!用PyTorch手把手复现加性注意力(Additive Attention),理解注意力机制的起点

从加性注意力到Transformer:PyTorch实战与演进逻辑解析 在Transformer架构横扫NLP领域的今天,回望2014年提出的加性注意力机制(Additive Attention),犹如在摩天大楼顶端俯瞰地基。这个由Bahdanau在神经机器翻译中首次提…...

为汉语辩护,彰显中华文字的生命力与优越性

为汉语辩护,彰显中华文字的生命力与优越性上世纪初,一批所谓“新文化人”竟提出废除汉字的主张,他们盲目推崇拉丁文,认为汉语是落后的语言,却不知这是对中华文字深厚底蕴的无知与曲解。如今回望,汉字的独特…...