基于answer和MongoDB文档,我了解MongoDB能够对大数据集进行排序,并在使用limit()时提供排序结果。 但是,当使用sort()查询相同的数据集时,会导致内存异常。
从上面帖子的第二个答案中,海报提到整个集合被扫描,排序并返回前N个结果。我想知道当我使用limit()时如何对集合进行排序。 从文档中我发现当使用limit()时它会进行Top-K排序,但是在任何地方都没有太多关于它的解释。我想看看有关Top-K Sort算法的任何参考文献。
答案 0 :(得分:2)
通常,您可以使用大小为K的最小堆执行高效的top-K排序.min-heap表示到目前为止在数据集中看到的最大K元素。它还使您可以不间断地访问那些前K个元素中的最小元素。
当您扫描数据集时,如果给定元素大于最小堆中的最小元素(即迄今为止最小的顶部K中的最小元素),则将最小堆中的最小元素替换为元素并重新堆积(O(lg K)
)。
最后,您只需使用整个数据集的前K个元素,而不必对它们进行排序(最差情况下的运行时间为O(N lg K)
),仅使用{{1记忆。
我实际上在学校里学到了这个改变: - )