我使用Eve作为REST API服务器与MongoDB进行交互。
运行:
GET /year_origin_destination_hs07_4?where={}
几乎是即时的(它返回包含33M项目的集合的第一页)。
相比之下,跑步:GET /year_origin_destination_hs07_4?where={"origin": "chn"}
需要大约18秒才能返回(956k项目的第一页)。
任何人都可以解释为什么不成比例地更长?在MongoDB中过滤此连接只需要很少的时间。
MongoDB示例:db.year_origin_destination_hs07_4.find({origin: "chn"})
< 1s返回分页结果
答案 0 :(得分:1)
原来我必须启用此标记:OPTIMIZE_PAGINATION_FOR_SPEED
。
将此项设置为True可提高分页性能。当优化处于活动状态时,不对数据库执行计数操作,这可能在大型集合上很慢。这确实会产生一些后果。首先,不返回文档计数。其次,HATEOAS不太准确:没有最后一页链接,并且总是包含下一页链接,即使在最后一页也是如此。在大型集合中,切换此功能可以极大地提高性能。默认为False(性能较慢;包括文档计数;准确的HATEOAS)。