我正在考虑将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/