zoukankan      html  css  js  c++  java
  • Nutch — 将查询的响应时间降低到0.5秒以内

      Nutch 的索引文档数量在100W以下的时候,怎么处理查询响应都比较的快速,基本上不会超过0.5秒。但是超过200W索引文档 的时候如果不处理,查询的响应时间就会超过这个数字。如果内存足够,甚至可以把200W的索引文档全部加载到内存,这时查询响应时间会小于0.1秒,但内存占用会超过1.5G,这种方式适合数据量比较小的查询系统,例如文献检索等。

           当数据量超过200W的时候如果全部加载到内存则不太适合了,因为受JVM最大内存的限制(1.2G到3.6G Linux下),加载超过200W索引页面的时候,JVM会溢出。

           以下介绍通过几种方式实现超过1000W的索引页面查询响应时间降低到0.5秒以内。

           1、让索引尽可能的简单,非必要的索引字段尽可能的删除掉,索引的字段需要正确的区分那些Index ;那些Tokenize、那些Store。

           2、将 indexer.minMergeDocs 和 indexer.mergeFactor 调整到尽可能的大。如果索引的页面大小平均在10K,JVM可用的内存是2.6G,则可以将indexer.minMergeDocs 设置为30000(根据页面尺寸定),这对查询的效率影响巨大。

           3、将尽可能多的 segemts合并到一起,可以让 一个 segment 包含100W个document 并根据实际情况调整一个segment 包含的 document的数量 。

           4、将所有的 index 合并到一起,如果创建索引的时候 indexer.minMergeDocs 是 足够大,则合并以后的index目录下的文件会很少,这将非常的有利于查询性能的提高(我在我的系统里面把大约400W个document合并到一个segments目录下,然后分成5个segment,最后把400W个索引文档合并到一个index目录下,最后产生的index目录下的文件只有10多个,但文件尺寸非常大)。

           5、将索引分布在多个JVM。如果单台服务器的内存很大(超过6G),那么可以在一台计算机上开启多个查询服务器,每个查询服务器启动的JVM内存占用会从400M逐渐增加到2G左右,所以如果单个的查询服务器使用的索引文档超过200W,则需要增加足够的内存以应付查询缓存(查询服务器启动时间越长,缓存的内容越多,内存占用越大)。

           6、一般的垂直搜索引擎都需要在Nutch 上再做开发,索引的及时更新都会面临一些问题。

           索引超过3000W个页面的查询效率调整暂时不能公开,按照以上方式处理会超过1秒,但小于5秒。

  • 相关阅读:
    Hbase 性能改进
    HBase总结(十一)hbase Java API 介绍及使用示例
    Java中如何遍历Map对象的4种方法
    Jsp分页实例---假分页
    Jsp分页实例---真分页
    Java正则表达式
    平均时间复杂度为O(nlogn)的排序算法
    常见排序算法--简单排序
    [kuangbin带你飞]专题一 简单搜索
    [kuangbin带你飞]专题一 简单搜索
  • 原文地址:https://www.cnblogs.com/wycg1984/p/1537474.html
Copyright © 2011-2022 走看看