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

【MongoDB实战】7.3 批量操作优化:BulkWrite

文章目录

  • 7.3 批量操作优化:BulkWrite
    • 前置准备
      • 1. 环境要求
      • 2. 基础连接代码
    • 7.3.1 循环单条操作vs批量操作:性能差异对比
      • 核心差异
      • 实战性能对比(测试10000条插入)
      • 典型输出结果(参考)
      • 差异原因分析
    • 7.3.2 BulkWrite实战:批量插入、更新、删除组合操作
      • 核心语法
      • 实战:组合操作完整示例
      • 输出结果(参考)
      • 关键注意事项
    • 7.3.3 场景实战:百万级日志数据批量导入优化
      • 业务场景
      • 优化思路
      • 完整优化代码
      • 典型输出结果(参考)
      • 进一步优化建议
    • 7.3.4 核心总结
      • 扩展:不同驱动的BulkWrite语法(参考)

7.3 批量操作优化:BulkWrite

BulkWrite(批量写入)是MongoDB提供的核心批量操作接口,能够将插入、更新、删除等多个操作打包成一批发送到服务端,大幅减少客户端与服务端的网络往返次数(Round-Trip),相比循环单条操作可提升数倍甚至数十倍的性能。

  • 本节从性能对比、核心实战、百万级数据导入优化三个维度,全面讲解BulkWrite的使用与优化思路。

前置准备

1. 环境要求

  • MongoDB版本:3.2+(BulkWrite基础支持),推荐4.4+(性能更优)
  • 驱动:以Pythonpymongo(3.12+)为例(Node.js/Java驱动语法逻辑一致)
  • 安装依赖:pip install pymongo python-dotenv

2. 基础连接代码

frompymongoimportMongoClient,InsertOne,UpdateOne,DeleteOnefrompymongo.errorsimportBulkWriteErrorimporttimeimportrandomimportstring# 1. 连接MongoDB(本地/远程)client=MongoClient("mongodb://localhost:27017/")# 2. 选择数据库和集合db=client["test_db"]collection=db["bulk_demo"]# 清空测试集合(仅测试用)collection.delete_many({})


7.3.1 循环单条操作vs批量操作:性能差异对比

核心差异

操作类型网络往返次数性能特点适用场景
循环单条操作N次(N=操作数)网络开销大、吞吐量低少量操作(<100)
BulkWrite批量1次(分块时少量)网络开销极小、吞吐量高大量操作(≥100)

实战性能对比(测试10000条插入)

frompymongoimportMongoClient,InsertOne,UpdateOne,DeleteOnefrompymongo.errorsimportBulkWriteErrorimporttimeimportrandomimportstring# 1. 连接MongoDB(本地/远程)client=MongoClient("mongodb://localhost:27017/")# 2. 选择数据库和集合db=client["test_db"]collection=db["bulk_demo"]# 清空测试集合(仅测试用)collection.delete_many({})# 生成测试数据(随机字符串)defgenerate_random_str(length=10):return''.join(random.choice(string.ascii_letters)for_inrange(length))# 测试数据量TEST_COUNT=10000test_data=[{"name":generate_random_str(),"age":random.randint(18,60)}for_inrange(TEST_COUNT)]# ========== 测试1:循环单条插入 ==========start_time=time.time()fordocintest_data:collection.insert_one(doc)single_cost=time.time()-start_timeprint(f"循环单条插入{TEST_COUNT}条耗时:{single_cost:.2f}秒")# 清空集合,准备批量测试collection.delete_many({})# ========== 测试2:BulkWrite批量插入 ==========start_time=time.time()# 构造批量插入操作列表bulk_operations=[InsertOne(doc)fordocintest_data]# 执行批量操作result=collection.bulk_write(bulk_operations)b
http://www.cnnetsun.cn/news/115767.html

相关文章:

  • Redis 发布订阅
  • JQuery支持WebUploader完成百万文件断点续传的原理?
  • Vue3如何结合组件实现大文件分片的并行上传优化?
  • 类型分布统计-Cordovaopenharmony多维分析实战
  • 四时四名,一山万象:朝鲜金刚山的锦绣风姿
  • 基于Spring Boot的果蔬销售系统
  • Scala Collection(集合)
  • 介观交通流仿真软件:DynusT_(11).交通事件管理
  • django基于Python天气分析系统
  • python基于大数据的分析长沙旅游景点推荐系统
  • 基于Django的学分管理系统
  • 广度优先遍历与最短路径
  • 通信系统仿真:通信系统基础理论_(11).光通信技术
  • 17、Linux文件与目录操作全解析
  • 21、Linux系统进程与包管理全解析
  • 二叉排序树的插入、先序/中序/后序/层次遍历、节点查询
  • 如何在 Spring Boot 中接入 Amazon ElastiCache
  • 基于51单片机的血糖步数测量仪
  • Linux C/C++ 学习日记(51):内存池
  • AAAI25|基于神经共形控制的时间序列预测模型
  • CATCH:ICLR 2025 最值得关注的时间序列异常检测新框架
  • 开发到生产全链路:Docker containerd Kubernetes 运行时全景指南
  • 文件包含漏洞终极指南
  • #扫雷游戏
  • Java计算机毕设之基于springboot+vue的高校学院校内订餐系统的设计与实现基于JAVA的学院校内订餐系统的实现(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序计算机毕设之基于微信跑腿小程序的设计与实现基于springboot+微信小程序的跑腿小程序的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序计算机毕设之基于springboot+微信小程序的餐厅预约系统设计与实现基于微信小程序的餐厅预约系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • torch报错:ibtorch_cpu.so: cannot enable executable stack as shared object requires: Invalid argument
  • 计算机小程序毕设实战-基于springboot+微信小程序的餐厅预约系统设计与实现基于SpringBoot的在线点餐系统微信小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【课程设计/毕业设计】基于微信小程序跑腿平台的设计与实现代码基于springboot+微信小程序的跑腿小程序的设计与实现【附源码、数据库、万字文档】