测试背景

将 MongoDB Java 驱动从 4.11.5 升级至 5.5.1,并配合 Reactor Core 3.8.0-M4 进行性能对比测试。测试主要围绕插入、查询、更新和删除四个核心操作进行。


环境配置

  • 操作系统: Windows 11
  • CPU: Intel® Core™ i7-14700F, 28 核心, 2.10 GHz
  • JDK: OpenJDK 21.0.7 (TencentKonaJDK)
  • MongoDB 驱动版本:
    • 旧版本: org.mongodb:mongodb-driver-reactivestreams:4.11.5, org.mongodb:bson:4.11.5
    • 新版本: org.mongodb:mongodb-driver-reactivestreams:5.5.1, org.mongodb:bson:5.5.1
  • Reactor Core 版本:
    • 旧版本: io.projectreactor:reactor-core:3.4.41
    • 新版本: io.projectreactor:reactor-core:3.8.0-M4
  • 线程数: 4 线程
  • MongoClient 配置:
    以下是 MongoDB 客户端连接池配置参数及其值
参数名中文含义说明
maxPoolSize48最大连接池大小连接池中最多可以保持的连接数。
minPoolSize8最小连接池大小连接池中始终保持的最小连接数。
connectTimeoutMs5000连接超时时间(毫秒)建立连接的最大等待时间,单位为毫秒。
socketTimeoutMs10000套接字超时时间(毫秒)读取数据时等待响应的最大时间,单位为毫秒。
maxWaitTimeMs10000获取连接最大等待时间(毫秒)当连接池没有可用连接时,请求连接的最大等待时间,单位为毫秒。
maxIdleTimeSec900连接最大空闲时间(秒)连接在池中保持空闲而不被释放的时间,单位为秒。
maxConnecting4最大同时建立连接数同时尝试建立的新连接的最大数量。
readTimeoutMs10000读取超时时间(毫秒)等待从服务器读取数据的最大时间,单位为毫秒。与 socketTimeout 类似。

性能对比概览(含三阶段对比)

测试类:com.ooxx.common.db.MongoPerfTest

操作类型未调优 (4.11.5)调优后 (4.11.5)升级后 (5.5.1)提升幅度(未调优 ➜ 升级后)
插入5,459 条/秒9,507 条/秒10,550 条/秒+93.3%
查询5,894 次/秒9,883 次/秒10,541 次/秒+78.8%
更新5,653 次/秒9,987 次/秒10,488 次/秒+85.5%
删除5,718 次/秒10,969 次/秒11,883 次/秒+107.9%

阶段性分析

第一阶段:从“未调优”到“调优”

  • 使用 NettyTransportSettings 线程池配置优化
  • 性能平均提升约 70~90%
  • 说明线程模型和连接池参数对性能影响巨大

第二阶段:驱动升级(4.11.5 ➜ 5.5.1)

  • 在已调优基础上继续提升 5~11%
  • 说明新版本底层协议、序列化或 Reactor 支持有进一步优化
  • 对删除操作优化尤为明显(+8.3%)

综合收益:从原始未调优 ➜ 最终优化版

  • 整体吞吐量接近 翻倍

详细分析

✅ 未调优 vs 调优(驱动版本不变:4.11.5)

  • 提升显著:使用 NettyTransportSettings并优化连接池参数后,所有操作性能几乎翻倍。
    • 插入从 5,459 ➜ 9,507 (+74%)
    • 查询从 5,894 ➜ 9,883 (+67.7%)
    • 更新从 5,653 ➜ 9,987 (+76.7%)
    • 删除从 5,718 ➜ 10,969 (+92.7%)

结论:调优对性能影响巨大,特别是在高并发场景下,合理配置线程模型和连接池是关键。


✅ 调优后 4.11.5 ➜ 5.5.1

  • 进一步提升:MongoDB 驱动从 4.11.5 升级到 5.5.1 后,性能仍有明显提升,说明新版本在底层网络处理、序列化优化或 Reactor 支持方面有改进。
    • 插入从 9,507 ➜ 10,550 (+11%)
    • 查询从 9,883 ➜ 10,541 (+6.7%)
    • 更新从 9,987 ➜ 10,488 (+5.0%)
    • 删除从 10,969 ➜ 11,883 (+8.3%)

结论:驱动升级带来额外 5~11% 的性能提升。


技术建议与总结

组件建议值
MongoDB 驱动版本5.5.1
使用 TransportNettyTransportSettings
EventLoopGroup 线程数CPU 核心数 × 2(不超过 8~12)
连接池大小 ([maxPoolSize48
最小连接数8
最大并发连接数4
最大等待时间10,000 ms
最大空闲时间900 s
读写超时时间10,000 ms
线程池固定线程数(根据业务负载调整)

性能趋势图示意

插入性能:
[4.11.5 未调优] → [4.11.5 调优] → [5.5.1 调优]
5,459           → 9,507          → 10,550查询性能:
[4.11.5 未调优] → [4.11.5 调优] → [5.5.1 调优]
5,894           → 9,883          → 10,541更新性能:
[4.11.5 未调优] → [4.11.5 调优] → [5.5.1 调优]
5,653           → 9,987          → 10,488删除性能:
[4.11.5 未调优] → [4.11.5 调优] → [5.5.1 调优]
5,718           → 10,969         → 11,883

最终结论

  • 调优 > 升级:优化线程模型和连接池配置带来的性能提升远大于单纯升级驱动。
  • 升级有益无害:MongoDB 5.5.1 在调优基础上仍能带来 5~11% 的额外性能收益

TODO

在 JDK21 虚拟线程环境下适配 MongoDB 时,同步驱动相比响应式驱动更具优势,核心原因在于虚拟线程通过轻量级线程模型消除了同步阻塞的代价,使传统同步代码既能保持简洁性,又能获得媲美响应式的高并发性能。同步驱动无需响应式编程的复杂回调链,响应式编程的核心价值原本是解决线程阻塞问题,但虚拟线程已从底层化解该痛点,其复杂的异步代码风格反而成为负担,后期可能将考虑改成同步驱动。

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

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

相关文章

淘宝商品评论实时采集 API 接入指南:从零开始实战开发

在电商数据分析领域,商品评论数据蕴含着用户对产品的真实反馈,对商家优化产品、提升服务质量具有重要价值。本文将详细介绍如何接入淘宝 API,实现商品评论的实时采集,从环境搭建到代码实现进行全流程讲解。 1. 淘宝api概述 淘宝…

ffpaly播放 g711a音频命令

ffpaly播放 g711a音频命令 ffplay 播放 G.711 A-law (8kHz, mono, 16bit) 音频的命令: ffplay -f alaw -ar 8000 -ac 1 input.g711a 或ffplay -f alaw -ar 8000 -ac 1 audio_chn0.g711a 各参数说明: -f alaw:指定输入音频格式为 G.711 A-law…

composer全局配置

composer配置 composer查看全局配置 composer config -l -gcomposer 更新慢 composer下载不下来问题解决 更换composer镜像源,可以执行尝试以下几种: 1、更换成阿里镜像: composer config -g repo.packagist composer https://mirrors.al…

ivx创建一个测试小案例

文章目录 前端后端提交信息服务提交信息事件跳转列表页事件下载事件详情页事件 https://editor.ivx.cn/ 主题选择一下 前端 在前台新建一个页面名为提交页,内边距左和内边距右都设置为40,水平居中和垂直居中设置一下; 新建两个输入框&#x…

【MongoDB】MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作

MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作 一、核心概念与原理1. 核心组件2. MongoDB vs 关系型数据库 二、环境搭建(Windows/Linux/CentOS)1. Windows安装2. CentOS安装3. 连接验证 三、基础操作(CRUD)1. 数据库…

GeoTools 结合 OpenLayers 实现属性查询

前言 在GIS开发中,属性查询是非常普遍的操作,这是每一个GISer都要掌握的必备技能。实现高效的数据查询功能可以提升用户体验,完成数据的快速可视化表达。 本篇教程在之前一系列文章的基础上讲解如何将使用GeoTools工具结合OpenLayers实现Post…

vue-27(实践练习:将现有组件重构为使用组合式 API)

实践练习:将现有组件重构为使用组合式 API 理解重构过程 重构是任何开发者的关键技能,尤其是在采用新范式如 Vue.js 中的 Composition API 时。它涉及在不改变外部行为的情况下重新组织现有代码,旨在提高可读性、可维护性和可重用性。在从 Options API 迁移到 Composition…

基于Uniapp+SpringBoot+Vue 的在线商城小程序

开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,jquery,html,vue 角色:用户 商家 管理员 用户菜单:首页:商…

华为云Flexus+DeepSeek征文|利用华为云一键部署的Dify平台构建高效智能电商客服系统实战

目录 前言 1 华为云快速搭建 Dify-LLM 应用平台 1.1 一键部署简介 1.2 设置管理员账号登录dify平台 2 接入 DeepSeek 大模型与 Reranker 模型 2.1 接入自定义 LLM 模型 2.2 设置 Reranker 模型 3 构建电商知识库 3.1 数据源选择 3.2 分段设置与清洗 3.3 处理并完成 …

python应用day07---pyechars模块详解

1.pyecharts安装: pip install pyecharts 2.pyecharts入门: # 1.导入模块 from pyecharts.charts import Line# 2.创建Line对象 line Line() # 添加数据 line.add_xaxis(["中国", "美国", "印度"]) line.add_yaxis("GDP数据", [30…

高档背景色

https://andi.cn/page/622250.html

教学视频画中画播放(PICTURE-IN-PICTURE)效果

视频平台的画中画(PIP)功能通过小窗播放提升用户体验:1)支持多任务处理,如边看教程边操作文档;2)减少应用跳出率,增强用户粘性;3)优化屏幕空间利用&#xff1…

MySQL (一):数据类型,完整性约束和表间关系

在当今数据驱动的时代,数据库作为数据存储与管理的核心工具,其重要性不言而喻。MySQL 作为一款广泛应用的开源数据库,凭借其高性能、高可靠性和丰富的功能,深受开发者喜爱。本文作为 MySQL 系列博客的开篇,将带你深入了…

【软考高项论文】信息系统项目的资源管理

摘要 本文围绕信息系统项目的资源管理展开论述。首先阐述了项目资源管理的基本过程,包括资源规划、估算、获取、配置、监控和释放等关键步骤,并给出资源分解结构示例。接着结合2024年参与管理的某信息系统项目实际情况,详细说明资源管理的具…

阿里云Ubuntu服务器上安装MySQL并配置远程连接

1. 安装MySQL 首先连接到你的Ubuntu服务器,然后执行: # 更新软件包列表 sudo apt update# 安装MySQL服务器 sudo apt install mysql-server# 启动MySQL服务 sudo systemctl start mysql# 设置MySQL开机自启 sudo systemctl enable mysql# 检查MySQL状态…

STM32HAL 旋转编码器教程

配置时钟编码模式读取方法: if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim1) 0){count - __HAL_TIM_GET_COUNTER(&htim1);}else{count __HAL_TIM_GET_COUNTER(&htim1);}bsp_dtUInt32_show(count);__HAL_TIM_SET_COUNTER(&htim1, 0); 通过 __HAL_TIM…

激光束修复手机屏任意层不良区域,实现液晶线路激光修复原理

摘要 手机屏结构多层复合,任意层线路不良严重影响显示质量。激光束凭借高能量密度与可调控性,能够穿透不同介质精准作用于目标层。本文基于激光与多层材料相互作用机制,解析激光束对手机屏各层不良区域的修复原理,为全层液晶线路…

【软件开发】架构与架构师

文章目录 一、前言二、关于系统架构1. 保障用户访问速度2. 支持大规模并发请求3. 应对复杂业务逻辑4. 应对海量数据的存储与读写三、关于系统架构师四、关于安全架构1. 产品安全架构2. 安全体系架构五、关于安全架构师一、前言 在系统建设与技术架构实践不断推进的背景下,关于…

Blender速成班-基础篇2

视频教程:【第一章】基础操作_哔哩哔哩_bilibili 目录 编辑模式 1.1侧边属性 挤出选区——E 挤出方式选择——AltE ​编辑 内插面——I 倒角——CtrlB 环切——CtrlR 旋绕 本片继续基于视频教程介绍Blender的一些基础操作 勾选Cavity使物体边线更清晰 编…

对象进阶与扩展

目录 创建对象 Object.create() 原型 原型操作 原型污染 对象属性 属性特征 枚举属性 Object.keys() Object.getOwnPropertyNames() Object.getOwnPropertyDescriptor() O…