当前位置: 首页 > 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+(性能更优)
  • 驱动:以Python pymongo(3.12+)为例(Node.js/Java驱动语法逻辑一致)
  • 安装依赖:pip install pymongo python-dotenv

2. 基础连接代码

from pymongo import MongoClient, InsertOne, UpdateOne, DeleteOne
from pymongo.errors import BulkWriteError
import time
import random
import string
# 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条插入)

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

相关文章:

  • 高校科研新利器:Live Avatar学术应用场景探索
  • DC-DC电路电源走线:宽度与电流匹配项目应用
  • 零基础玩转Unsloth:5步搞定大模型训练环境
  • PyTorch-2.x部署教程:使用tmux保持长时间训练任务
  • 2026年四川木门/隔音门/隔音木门/静音木门/实木门行业选型指南:头部企业解析与趋势预判
  • OCR误识别率太高?后处理规则过滤实战技巧
  • led灯珠品牌在家居照明灯具中的应用实战案例
  • PyTorch镜像中的CUDA版本适配问题全解析(支持30/40/A800)
  • 2025四川高中复读学校口碑排行,这些学校值得一看!实验中学/学校/中学/高中复读学校,高中复读学校公司推荐排行榜
  • 03_01_服务作用域
  • 西安本地老字号宝宝起名机构哪家靠谱指南
  • 温度对蜂鸣器性能影响:材料特性原理讲解
  • 低噪声电路设计中的PCB布局规则解析
  • 聊聊深圳离婚律所 推荐一下离婚律所电话是多少
  • arm64-v8a上部署TensorFlow Lite模型操作指南
  • 想知道江苏联翩实力怎么样?其石英制品性价比值得了解
  • 讲讲上海地区高速切捆条机价格,盐城远诚机械费用多少可了解
  • 运行命令就这几行!Qwen-Image-Edit-2511本地部署超简单
  • unet image Face Fusion界面汉化成功?蓝紫渐变标题区体验
  • Qwen3-0.6B模型调用全解析:适合小白的图文教程
  • 低功耗工业终端中的三极管节能工作模式详解
  • 基于 QT(C++) 开发的斗地主游戏
  • 基于 QT(C++) 开发的贪吃蛇小游戏
  • 【毕业设计】SpringBoot+Vue+MySQL + 疫情隔离管理系统平台源码+数据库+论文+部署文档
  • Java SpringBoot+Vue3+MyBatis 疫苗发布和接种预约系统系统源码|前后端分离+MySQL数据库
  • 用Qwen-Image-2512-ComfyUI做图像编辑,效果惊艳的实战分享
  • 手机拍照人像也能用BSHM完美抠出
  • Altium Designer安装教程:防错机制与安全设置深度解析
  • 高速PCB串扰抑制技术:交换机设备中的实战解析
  • 小白也能懂的图层黑科技:Qwen-Image-Layered保姆级教程