首页 > 数据库 >Mongodb批量写入操作bulkWrite()

Mongodb批量写入操作bulkWrite()

时间:2024-06-24 11:27:32浏览次数:3  
标签:bulkWrite 顺序 批量 Mongodb 写入 分片 操作 type

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第76篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

概述

Mongodb提供了针对单一集合写操作批量执行的方法。在批量写操作当中,Mongodb也允许用户自由定义数据提交的方式。通过db.collection.bulkWrite()方法,用户能够对单一集合进行数据插入,更新和删除操作 。当然, 方法db.collection.insertMany()也是一种批量写入操作。

批量写操作的顺序

用户定义的批量操作,可以是顺序执行的,也可以不按照顺序执行。

在顺序执行操作当中,Mongodb按照用户定义的批量操作序列,一步一步的执行。当某一个写操作出现错误时,mongdb会退出当前执行序列,不再执行后续的操作。而在非顺序执行操作当中,Mongodb并行执行用户定义的每一个操作。在非顺序执行操作当中,任意一个操作出错不会影响其他操作的执行。

在分片集合当中,顺序执行操作会比非顺序执行操作慢。因为需要等待前面的步骤完成。

bulkWrite()操作,默认是顺序执行每一个操作。用户如果需要指定非顺序执行,需要在options中定义{ordered: false}

支持批量写入的方法

bulkWrite支持下面的几个方法, 每一个方法都按照文档的形式 定义在bulkWrite操作的过程数据中。

    • insertOne
    • updateOne
    • updateMany
    • replaceOne
    • deleteOne
    • deleteMany

应用

构建pizza文档并插入数据

db.pizzas.insertMany([{
    _id: 0, type: "pepperoni", size: "small", price: 4
},{
    _id: 1, type: "cheese", size: "medium", price: 7
},{
    _id: 2, type: "vegan", size: "large", price: 8
}])

构建批量数据更新语句,要求完成下面几个动作

  • 向集合中插入两条新数据
  • 更新cheese文档的价格
  • 删除pepperoni
  • 将vegan替换成新的文档tofu
try {
   db.pizzas.bulkWrite( [
      { insertOne: { document: { _id: 3, type: "beef", size: "medium", price: 6 } } },
      { insertOne: { document: { _id: 4, type: "sausage", size: "large", price: 10 } } },
      { updateOne: {
         filter: { type: "cheese" },
         update: { $set: { price: 8 } }
      } },
      { deleteOne: { filter: { type: "pepperoni"} } },
      { replaceOne: {
         filter: { type: "vegan" },
         replacement: { type: "tofu", size: "small", price: 4 }
      } }
   ] )
} catch( error ) {
   print( error )
}

分片集中批量写入策略

在分片集中,大量的写入操作包括数据初始化,导入数据等可能会影响分片集的性能。因此,批量写入操作,可以考虑下面的策略

提前分片

mongodb中,空数据集只有一个初始数据块,放在单个分片当中。插入数据时,mongodb需要在接收数据,创建数据分块,将数据分块写入分片上消耗大量的时间。为了避免数据分块消耗的时间,用户可以提前将数据分好。

非顺序写入

为了在分片集中提高写入效率 ,用户可以将bulkWrite()方法的ordered参数设置为false。这样mongos可以尝试同时向多个分片写入数据。

避免在分片集中使用单调主键

如果片键在一次插入过程中单调递增,那么所有插入的数据都会进入集合的最后一个块,而这个块总是会出现在一个片上。因此,集群的插入容量永远不会超过该单个分片的插入容量。如果插入数据量大于单个分片所能处理的数据量,并且无法避免片键的单调递增,那么可以考虑对应用进行以下修改。反转片键的二进制位。这样可以保留信息,并避免将插入顺序与值的递增顺序关联起来。交换第一个和最后一个16位的单词来“打乱”插入操作。

标签:bulkWrite,顺序,批量,Mongodb,写入,分片,操作,type
From: https://blog.csdn.net/wilsonzane/article/details/139912651

相关文章

  • mongoDB教程(二):下载安装
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • 使用mongodb、Kafka保存mqtt消息
    一、引言随着物联网技术的迅猛发展,大量的设备和传感器产生了海量的数据。本文利用了MQTT、Kafka和MongoDB各自的优点,满足实时数据处理和大规模数据存储的需求。如图:二、总结优点:1.可靠和解耦:Kafka的复制机制和持久化存储确保了数据在传输过程中的可靠性,即使某个节点......
  • Linux 安装mongodb
    1.1Mongodb要求使用最新稳定版本安装包下载地址:https://www.mongodb.com/try/download/community本次选择:mongodb-linux-x86_64-rhel70-4.4.13.tgz1.2安装步骤上传安装包到服务器,并解压#tar–zxvfmongodb-linux-x86_64-rhel70-4.4.13.tgz 重命名解压后的文件名#mvmo......
  • Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Port
    Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Portainer、MongoDB......) 精选 原创CodeDevMaster2022-11-1608:42:24博主文章分类:Docker©著作权文章标签dockermysqlNginxNacosMQ文章分类Docker云计算yyds干货盘点 Docker部署......
  • MongoDB 的集群架构与设计
    本文涉及的产品云数据库MongoDB,通用型2核4GB推荐场景:五天玩转MongoDB训练营  简介:MongoDB的集群架构与设计一、前言MongoDB有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(ReplicaSet)和分片(Sharding)模式。Master-Slaver是一种......
  • 【java】为什么高并发下数据写入不推荐关系数据库?
    一、问题解析说到高并发写,就不得不提及新分布式数据库HTAP,它实现了OLAP和OLTP的融合,可以同时提供数据分析挖掘和关系查询。事实上,HTAP的OLAP并不是大数据,或者说它并不是我们印象中每天拿几T的日志过来用于离线分析计算的那个大数据。这里更多的是指数据挖掘的最后一环,也就是......
  • NoSQLBooster for MongoDB延长-试用期
    mongo的客户端较少,其中NosqlBoosterForMongo算是一个不错的客户端软件,但是他也不是免费的,试用期只有30天。好在这个软件是基于nodejs的。所以我们可以利用npm对这个应用进行解包串改源码,将源码中设置试用期的参数改成足够大,然后再封包,这样我们就能不断的白嫖了。      ......
  • MongoDB基本操作(Windows)
    本篇博文介绍知识目标   熟悉数据库和集合操作本篇目标   掌握MongoDB的部署掌握文档的插入、更新、删除以及查询操作一、MongoDB的安装部署在浏览器输入网址:www.mongodb.com2.点击“TRYFREE”或“GETSTARTED”按钮,进入MongoDB的下载页面;3.在下载页面......
  • MongoDB分片部署(windows)
    【CSDN博客】MongoDB分片操作详解与实践OS:win10MongoDB:4.4.24伪分布式分片架构从图中可以看出,分片集群中主要由三个部分组成,即分片服务器(Shard)、路由服务器(Mongos)以及配置服务器(ConfigServer)组成。其中,分片服务器有三个,即Shard1、Shard2、Shard3;路由服务器......
  • MongoDB 学习
    MongoDB简介MongoDB是一个文档数据库,但文档并不是一般理解的pdf,word文档,而是JSON对象,因为文档来自于“JSONDocument”(JSON文档),所以MongoDB是存JSON对象的数据库,比如{"greeting”:"helloworld"}。说起文档,想到的应该是JSON对象,所以文档中的键都是字符串,任何utf-8......