parallelCollectionScan

在本页面

  • parallelCollectionScan
    • 2.6 版的新功能。

当从集合中读取所有文档时,允许应用程序使用多个并行游标,从而提高吞吐量。 parallelCollectionScan命令返回包含游标信息数组的文档。

每个游标都提供对集合中部分文档的返回的访问。迭代每个游标将返回集合中的每个文档。游标不包含数据库命令的结果。数据库命令的结果标识了游标,但不包含或不构成游标。

Important

  • 服务器返回的游标可能少于请求的游标。

  • 对于 WiredTiger 存储引擎,此命令不会返回多个光标。

该命令具有以下语法:

{
  parallelCollectionScan: "<collection>",
  numCursors: <integer>,
  readConcern: <document>,
  maxTimeMS: <integer>
}

parallelCollectionScan命令具有以下字段:

FieldTypeDescription
parallelCollectionScanstring集合的名称。
numCursorsinteger返回的游标的最大数量。必须介于 1 到 10000 之间(含 1 和 10000)。
readConcerndocument可选的。指定read concern


readConcern 选项具有以下语法:
在版本 3.6 中更改。
readConcern: { level: <value> }
可能的阅读关注级别为:
"local"。这是默认的阅读关注级别。
"available"。当未指定读取操作和因果一致的会话和“ level”时,这是针对次要对象的读取的默认值。查询返回实例的最新数据。
"majority"。可用于使用WiredTiger 存储引擎的副本集。
"linearizable"。仅可用于primary上的读取操作。
有关阅读关注级别的更多信息,请参阅阅读关注级别
对于"local"(默认)或"majority"读关注级别,您可以指定afterClusterTime选项以使读操作返回满足级别要求和在群集时间之后指定的数据。有关更多信息,请参见读取操作和因果一致的会话
| maxTimeMS |非负整数|可选。指定用于游标的处理操作的时间限制(以毫秒为单位)。如果未为 maxTimeMS 指定值,则操作不会超时。值0明确指定默认的无限制行为。
MongoDB 使用与db.killOp()相同的机制终止超出其分配的时间限制的操作。 MongoDB 仅在其指定的interrupt points之一处终止操作。

parallelCollectionScan仅可用于mongod,并且不能在分片群集上运行。

Example

覆盖默认读取问题

要覆盖默认的阅读关注级别"local",请使用readConcern选项。

对副本集的以下操作指定Read Concern"majority"来读取已确认已写入大多数节点的数据的最新副本。

Note

从 MongoDB 3.6 开始,默认情况下启用对读取关注"majority"的支持。对于 MongoDB 3.6.1-3.6.x,您可以禁用阅读关注"majority"。有关更多信息,请参见禁用多数阅读关注

  • 无论read concern级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
db.runCommand(
   {
      parallelCollectionScan: "restaurants",
      numCursors: 5,
      readConcern: { level: "majority" }
   }
)

为确保单个线程可以读取其自己的写入,请对副本集的主数据库使用"majority"读取关注和"majority"写入关注。

Output

parallelCollectionScan命令返回一个包含游标信息数组的文档:

{
    "cursors" : [
        {
            "cursor" : {
                "firstBatch" : [ ],
                "ns" : "<database name>.<collection name>",
                "id" : NumberLong("155949257847")
            },
            "ok" : true
        }
    ],
    "ok" : 1
}
  • parallelCollectionScan. cursors

    • 该命令返回的带有一个或多个游标的数组。
  • parallelCollectionScan.cursors. cursor

    • 对于返回的每个游标,包含有关游标的详细信息的文档。
  • parallelCollectionScan.cursors.cursor. firstBatch

    • 空的第一批处理对于快速返回游标或失败消息而不进行大量服务器端工作很有用。参见cursor batches
  • parallelCollectionScan.cursors.cursor. ns

    • 每个游标的名称空间。
  • parallelCollectionScan.cursors.cursor. id

    • 每个游标的唯一 ID。
  • parallelCollectionScan.cursors. ok

    • 该命令返回的每个游标的状态。
  • parallelCollectionScan. ok