zoukankan      html  css  js  c++  java
  • 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).

  • 相关阅读:
    操作系统和程序设计语言的API使用的字符编码分析
    struct与union字节大小的终极解释
    c++中的一些容易混淆的研究
    c++程序员必知的几个库
    UnityGUI扩展实例:图片挖洞效果 Mask的反向实现
    how to combine jpg + separate alpha in png?
    unity 全屏乱影 BlitMultiTap
    Unity Shader Billboard
    Unity Shaders Vertex & Fragment Shader入门
    Unity3d三大光照渲染介绍
  • 原文地址:https://www.cnblogs.com/yanzi-meng/p/8583807.html
Copyright © 2011-2022 走看看