• Mongodb使用killCursors停止运行的cursor


            cursor指向查询结果的游标,通过游标向下移动,获得下一条查询结果。MongoDB分批向用户返回数据结果。通过游标的移动, mongodb确定当前返回结果的位置,是否要加载更多数据到内存当中。cursor有默认的超时时间, 超时后cursor会自动停止。当然,用户也可以手动使用killCursors命令,停止未完成的cursor.

    killCursors功能

            停止指定的游标或某个集合的游标。

            各种Mongodb连接工具,基于killCursors命令,实现游标的部分操作。应用程序中,通常应用不会直接调用killCursors命令,而是数据库管理或开发人员,来运行killCurors命令,停止掉对数据库性能产生影响或长时间运行的cursor。

            为了减少影响,降低风险,执行killCursors命令必须在当前集合所在的数据库中执行。

    语法

    1. db.runCommand({   
    2. killCursors: <collection>,   
    3. cursors: [<cursor id1>, ...],   
    4. comment: <any>
    5. })

            其中,使用killCursors指定本次操作针对的集合名称。 字段cursors包含cursor id数组。comment是可选字段,用户对本次操作的一些备注和说明。可以是BSON类型中的任何一种数据类型。添加备注说明时,可以在下面的三个位置查看

    • Mongodb日志中,attr.command.cursor.comment字段
    • Database profile输出的command.comment字段
    • currentOp输出的command.comment字段

    用户权限

            使用killCursors时,用户需要拥有相应的权限。

    停止当前用户创建的游标

    • 4.2及以后得版本,当前用户有权限停止自己创建的游标。当用户使用查询语句创建游标时,游标即与当前用户建立关联关系
    • 4.0及以前版本,用户需要有killCursors权限,才能停掉自己创建的游标。同样,与4.2版本想用,用户使用查询语句创建游标时,游标即与当前用户建立关联关系。

    停止其他用户创建的游标

            用户需要有killAnyCursor权限

    应用举例

    • 创建游标
    1. use test
    2. db.runCommand({
    3. find: "resturants",
    4. filter: {stars: 5},
    5. projection: {
    6. name:1,
    7. rating: 1,
    8. address:1
    9. },
    10. sort: { name: 1},
    11. batchSize: 5
    12. })
    13. //返回
    14. {
    15. "waitedMS" : NumberLong(0),   
    16. "cursor" : {     
    17. "firstBatch" : [{           
    18. "_id" : ObjectId("57506d63f578028074723dfd"),           
    19. "name" : "Cakes and more"         
    20. },{
    21. "_id" : ObjectId("57506d63f578028074723e0b"),
    22. "name" : "Pies and things"
    23. },{
    24. "_id" : ObjectId("57506d63f578028074723e1d"),
    25. "name" : "Ice Cream Parlour"
    26. },{
    27. "_id" : ObjectId("57506d63f578028074723e65"),
    28. "name" : "Cream Puffs"
    29. },{
    30. "_id" : ObjectId("57506d63f578028074723e66"),
    31. "name" : "Cakes and Rolls"
    32. }],
    33. "id" : NumberLong("18314637080"),
    34. "ns" : "test.restaurants"
    35. },   
    36. "ok" : 1
    37. }
    • 使用killCursors停止游标
    1. use test
    2. db.runCommand({   
    3. killCusors: "restaurants",   
    4. cusors: [NumberLong("18314637080")]
    5. })

  • 相关阅读:
    PYTHON-模拟练习题目集合
    MindSpore:【mindinsight】【Profiler】用execution_time推导出来的训练耗时远小于真实的耗时
    hadoop_概念
    客户的关系管理系统
    前端框架的发展史
    E. Binary Inversions——前缀+后缀
    logback-spring.xml配置文件标签(超详解)
    一文拿捏分布式、分布式缓存及其问题解决
    小程序组件概述
    PyCharm中 python 类型文件被识别为Text文本类型
  • 原文地址:https://blog.csdn.net/wilsonzane/article/details/134672715