带游标的Solr深度分页——对大型结果集的内存/cpu影响



我正在考虑将Solr用于一个需要深度分页的用例,考虑从大约1000万条记录的集合中将大约100k的总结果拆分为1k页的上限。我很快发现为什么要使用start &对于这样大小的结果集来说,num_rows不是一个好主意,并且在处理过程中遇到了cursorMark。我找到的关于cursorMark的文章建议,无论记录在集合中的位置如何,记录访问的时间都是相对恒定的,这似乎非常适合我的情况。

我的问题是,这条路线是否会对性能产生影响?假设我每次返回1000条记录,那么使用cursorMark对1k、10k、100k、100万条记录的结果集进行深度分页,在内存/CPU使用方面是否存在性能差异?

理论上,当你向下翻页时,它会变得更快一些。实际上,差别很小,你不会注意到的。

标准的非游标搜索使用一个小队列来保存前x个结果。每个匹配都被添加到队列中,如果队列已满,则将较差的匹配排除。

游标搜索也使用大小为x的队列,如果的排序值超出前一个游标标记,则将每个匹配项添加到该队列中,如果的排序值超出前一个游标标记,则将较差的匹配项排除,如果队列已满。因此,页越深,插入的内容就越少。

在https://lucidworks.com/blog/2013/12/12/coming-soon-to-solr-efficient-cursor-based-iteration-of-large-result-sets/

有一些非常说明光标性能的图表

最新更新