在我的應用程序中,我需要不時重新編制所有數據的索引。我已經注意到,第一次索引數據所需的時間(通過批量索引)比後續的重新索引要慢得多。在一種情況下,首次執行索引需要大約2個小時,而後續索引需要大約15分鐘(對相同數據編制索引)。改進ElasticSearch首次索引的方法
雖然第一次索引2小時是合理的,但我很好奇爲什麼後續迭代重新索引要快得多。更重要的是,我想知道是否有任何事情可以改善第一次索引時的性能,例如,也許表明該指數將有多大等
感謝, 埃裏克
在我的應用程序中,我需要不時重新編制所有數據的索引。我已經注意到,第一次索引數據所需的時間(通過批量索引)比後續的重新索引要慢得多。在一種情況下,首次執行索引需要大約2個小時,而後續索引需要大約15分鐘(對相同數據編制索引)。改進ElasticSearch首次索引的方法
雖然第一次索引2小時是合理的,但我很好奇爲什麼後續迭代重新索引要快得多。更重要的是,我想知道是否有任何事情可以改善第一次索引時的性能,例如,也許表明該指數將有多大等
感謝, 埃裏克
編輯來引用重拳出擊,以merge_factor
因爲已經去除ES 2.0:https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_setting_changes.html#_merge_and_merge_throttling_settings
由於達表明,你確實可以影響(散裝)索引設置 - refresh_interval
能暫時設置爲-1
,並在完成批量索引後將其設置爲默認值1s
。
要修改的另一個設置是
merge.policy.merge_factor
;將其設置爲較高的值,例如
30
,然後返回默認值
10
。
有一些關於優化大宗索引教程和郵件列表的討論,但這裏的一些官方文檔的鏈接入手:
http://www.elasticsearch.org/guide/reference/index-modules/merge/
http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings/
如果您尚未調整您的JVM的內存設置,您應該。雖然特定於運行Ubuntu 10.04服務器的512MB VPS,但這些設置(http://pastebin.com/mNUGQCLY)應該指向正確的方向。基本上,啓動時將所需數量的RAM分配給Elasticsearch可以改進JVM內存分配/ GC時序。
是否定義爲你的類型的映射?如果不是,每次ES找到一個新的字段,映射必須更新(並且這影響了整個索引)。
在隨後的索引編制中,映射已經完成。所以你可以做的是顯式映射你的類型。
另外,您可以通過將refresh_interval
設置爲更高的值來提高重新索引的速度,look at this benchmark。
謝謝達米安。是的,我有一個定義的類型映射,甚至使用refresh_interval。實際上,我最初被「欺騙」,認爲將refresh_interval設置爲-1會顯着提高性能,但實際上是因爲重新索引比第一次索引更快。 – Eric
謝謝詹姆斯。這些信息很有幫助,我將查看merge.policy.merge_factor和引用。非常感激。 – Eric
@詹姆斯你可以提供最新的官方鏈接? – eyal
@eyal,我已根據要求更新了答案。 –