ElasticSearch中的索引速度令人难以置信

时间:2016-08-04 15:37:09

标签: elasticsearch logstash logstash-jdbc

我们决定在我们的产品中加入搜索引擎。并比较ElasticSearch和Solr。 当我们开始使用Elastic 2.3.3时。我们面临着索引速度慢的问题。我们使用Logstash提供弹性,并且对4000000条记录的表的索引花费了超过8小时。桌子的物理尺寸接近40GB。我们使用HDD ...是的,很可惜。但是在同一台PC上,我们测试了Solr,同样的操作需要3个小时。 也许我们在弹性配置上犯了错误? 另一个时刻弹性指数大小比表大小大两倍,solr指数仅为DB大小的8%。 当我们使用logstash在文件中输出数据时,它会非常快。

这里我们配置了弹性的logstash的jdbc模块:

input { 
   jdbc {
        jdbc_driver_library => "F:\elasticsearch-2.3.3\lib\sqljdbc_4.0\enu\sqljdbc4.jar"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        jdbc_connection_string => "jdbc:sqlserver://s_tkachenko\mssql2014:49172;databaseName=work"
        jdbc_user => "sa"
        jdbc_password => "__masked_password__"
        statement => "SELECT id, name FROM Contact"                     
        }
      }

我们只设置了1个分片而没有副本。

亲爱的社区,也许你有任何建议,因为支持弹性只会在我们购买订阅后帮助我们。但购买订阅的产品根本不好,我认为这不是一个好主意。 感谢您的关注,等待您的想法。

1 个答案:

答案 0 :(得分:4)

同时您也可以在logstash中进行一些更改:

  • 使用以下命令指定工作人员计数:-w {WORKER_COUNT}。 cpu count * 2在我的实验中是最好的。
  • 使用以下命令指定缓冲区大小:-u {BUFFER_SIZE}。 512对我来说效果最好。

您还可以为elasticsearch输出插件指定输出工作计数和刷新beffer:

output {
    elasticsearch {
        # elasticsearch hosts
        hosts => ["127.0.0.1"]
        # bulk message size
        flush_size => 512
        # output worker cpu core * 2
        workers => 8
    }
}

希望其中一些帮助。