当查询mongodb时,它的游标如何处理内存中的结果集? 游标是一次检索所有匹配查询的文档吗?还是一次只检索一个文档?或者它们被缓冲了吗?或者有其他我不知道的解决方案?
如果是缓冲解决方案,它们如何在服务器/客户端上存储?客户端本地保留多少数据?
如果是缓冲解决方案,它们如何在服务器/客户端上存储?客户端本地保留多少数据?
MongoDB wire protocol 有关于查询时批处理大小的规定。
基本原则是客户端驱动程序使用 numberToReturn
标志发出查询。如果查询匹配超过 numberToReturn
,则只返回该数量给客户端。
因此,服务器有效地向客户端发送一个“批次”。如果客户端循环遍历整个批次,则客户端发出 getmore 请求并接收下一批次。同时,服务器不需要将所有结果加载到内存中,只需满足客户端的请求即可。
PHP 驱动程序抽象了大部分这种复杂性。您只需要使用驱动程序请求下一个项,驱动程序将在适当的情况下处理 getmore
。
就大小而言,您将获得 Max BSON 大小或 numberToReturn
中较小的那个。因此,如果文档太大,您可能会达到 Max BSON 大小,以防止一次发送过多数据。
获取更多详细信息的最佳位置是实际代码。