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