pymongo--Bulk Write Operations
mongo支持客户端进行批量写操作,其基于单一集合。
mongo数据库允许应用程序指定用于批量写操作的可接受的等级。
mongo提供方法db.collection.bulkWrite()用于批量插入,修改,删除操作,当然每种操作也有其对应的批量操作方法,
如插入的insertMany()方法。
批量写的有序操作与无序操作:
A、对于有序操作的集合,mongo会串行的执行这些写操作。当集合中一个写操作执行失败时,mongo不会执行集合中剩余
的写操作,将直接返回。
B、对于无序的操作集合,mongo可以并行的执行这些写操作,但是不保证一定并行执行。当集合中某个写操作执行失败时
mongo不直接返回,继续执行集合中剩下的写操作。
C、对于分片集合来说,通常执行有序的写操作集合往往慢于无序的写操作集合,因为,执行有序写操作集合时,每个操作
的执行都要等其上一个操作执行完毕。
D、默认情况下,bulkWrite()执行有序的写操作集合,如果要指定执行无序的写操作集合,需将选项文档中的ordered域的
值设置为false。
bulkWrite()方法:
A、该方法支持的写操作:
insertOne,updateOne,updateMany,replaceOne,deleteOne,deleteMany
B、该方法接收文档数组类型参数。
bulkWrite()方法的原型:
db.collection.bulkWrite(
[ <operation 1>, <operation 2>, ... ],
{
writeConcern : <document>,
ordered : <boolean>
}
)
bulkWrite()方法使用示例:
try {
db.characters.bulkWrite(
[
{ insertOne :
{
"document" :
{
"_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4
}
}
},
{ insertOne :
{
"document" :
{
"_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3
}
}
},
{ updateOne :
{
"filter" : { "char" : "Eldon" },
"update" : { $set : { "status" : "Critical Injury" } }
}
},
{ deleteOne :
{ "filter" : { "char" : "Brisbane"} }
},
{ replaceOne :
{
"filter" : { "char" : "Meldane" },
"replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
}
}
]
);
}
catch (e) {
print(e);
}
批量插入到分片集合的策略:
A、Pre-Split the Collection:如果一个分片存储的集合是空的,那么这个集合仅有一个由某个分片持有的
初始化chunk(在某个分片上的分片键值的一段连续的范围),这样,mongo就就必须花费时间接收数据,创建
分chunk,并且把这些分离的chunk分配到可用的分片上。为了避免这部分性能开销,可以使用预先分离集合策
略。
B、Unordered Writes to mongos:为了提高在分片集群上的写操作性能,可以使用批量操作bulkWrite()的无序
操作行为(将其选项参数ordered设置为false).
pymongo--Bulk Write Operations的更多相关文章
- MongoDB - MongoDB CRUD Operations, Bulk Write Operations
Overview MongoDB provides clients the ability to perform write operations in bulk. Bulk write operat ...
- [pyMongo]insert_many的Bulkwrite实现机制
在SQL中,insert many的操作可能会出现插入数据量过大的问题. 印象中MySQL Driver对insert语句的buffer有一个大小限制.超过这个限制的数据可能会被丢弃? -- > ...
- MongoDB - MongoDB CRUD Operations
CRUD operations create, read, update, and delete documents. Create Operations Create or insert opera ...
- 20.Bulk Write Operations-官方文档摘录
1.有序操作列表将会串行执行,但如果在一个写操作过程出现异常错误,则不会处理剩余的任何写操作 2.无序操作列表将会并发执行,如果在一个写操作过程出现异常错误,则不影响,继续执行(并发无序) 3.对比无 ...
- MongoDB 及 scrapy 应用
0 1.Scrapy 使用 MongoDB https://doc.scrapy.org/en/latest/topics/item-pipeline.html#write-items-to-mong ...
- Entity Framework与ADO.NET批量插入数据性能测试
Entity Framework是.NET平台下的一种简单易用的ORM框架,它既便于Domain Model和持久层的OO设计,也提高了代码的可维护性.但在使用中发现,有几类业务场景是EF不太擅长的, ...
- kettle之mongodb数据同步
需求: 1.源数据库新增一条记录,目标库同时新增一条记录: 2.源数据库修改一条记录,目标库同时修改该条记录: 示例用到三个Kettle组件 下面详细说下每个组件的配置 Source: 本示例连接的是 ...
- .NET知识结构
.NET知识结构 .NET介绍 微软.NET战略及技术体系,.NET Framework框架类库(FCL),公共语言运行时(CLR),通用类型系统(CTS),公共语言规范(CLS),程序集(Assem ...
- sql是如何执行一个查询的!
引用自:http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/ Understanding how SQ ...
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
随机推荐
- 【linux系列】yum安装报错 no mirrors to try
执行以下命令去重新生成缓存 yum clean all yum makecache 更换源重新下载repo文件 重新生成缓存
- 部署OpenStack问题汇总(六)-- OpenStack入门需要知道的概念
本博客已经添加"打赏"功能,"打赏"位置位于右边栏红色框中,感谢您赞助的咖啡. 一.网络问题-network 更多网络原理机制可以参考<OpenStack ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十:SDRAM模块③ — 页读写 α
实验二十:SDRAM模块③ — 页读写 α 完成单字读写与多字读写以后,接下来我们要实验页读写.丑话当前,实验二十的页读写只是实验性质的东西,其中不存在任何实用价值,笔者希望读者可以把它当成页读写的热 ...
- SQLite 3的中文读写
调用sqlite3_open函数默认创建的数据库encoding=UTF-8,执行sqlite3_exec时需要将对应的字符串转换为UTF-8格式多字节字符串.比如: sqlite3* db; aut ...
- centos记录uptime,tomcat日志切割,远程拷贝日志脚本
1.uptime日志脚本(每天记录) #!/bin/sh dir=/tmp/uptime_log process=`ps -ef|grep $|grep -v "grep" |gr ...
- 关于jquery的css的一些知识
Query实例CSS 样式表动态选择本实例主要说的还是jquery的选择器,关于jquery的css的一些知识用类似 $("li").css("cursor", ...
- 开放思源 专注高效 HPE&msup软件技术开放日回顾
7月22日,HPE和msup联合举办的软件技术开放日在上海浦东新区张江高科技园区召开,主.分会场共邀请HPE 13 名测试.质量.大数据专家分享技术实践与经验,与180多名测试总监一起拆解质量保障及大 ...
- HDU 1565 - 方格取数(1) - [状压DP][网络流 - 最大点权独立集和最小点权覆盖集]
题目链接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32 ...
- Oracle管理监控之linux下wendba登录设置
[root@localhost ~]# su - oracle [oracle@localhost ~]$ which jar/usr/bin/jar [oracle@localhost ~]$ ex ...
- Python面向对象:类、实例与访问限制
首先记录下面向对象的名词: 对象:python万物皆对象,程序设计的东西在对象上体现. 类:具有相同属性和行为的对象的集合. 消息:各个对象之间通过消息相互联系. 方法:对象功能实现的过程. 封装:把 ...