2017-04-04 49 views
3

Elasticsearch automatic slicing是做什麼用的?我發現文檔對這個功能非常簡潔。我試圖尋找這個功能的其他解釋,但無濟於事。我也沒有設法找到Elasticsearch中的切片。Elasticsearch自動切片是做什麼的?

+0

最全面的信息來源是Github問題和請求:https://github.com/elastic/elasticsearch/issues/20624 + https://github.com/elastic/elasticsearch/pull/20767 – Val

+0

閱讀通過這些問題,他們主要描述了實現細節,而不是有助於理解實現的功能。 –

+0

您是否閱讀過[切片滾動]相關鏈接(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html#sliced-scroll)? – Val

回答

7

自動切片是爲幾個不同端點(如reindex,update by querydelete by query)並行工作的一種方法。

以上三個API都以相同的方式工作,在目標索引上設置scroll query。滾動查詢提供了一種比普通分頁查詢產生更大結果集的查詢的更高性能方式。滾動查詢可以通過slicing them進一步改進。

在明確,如果查詢應該返回命中一個很大的數目,您可以通過使用結果from/size正常查詢和頁面,但由於deep-paging不會是高性能的。爲了規避這個問題,ES允許您使用滾動查詢來獲得N個匹配的批量結果。這些滾動查詢可以通過對它們進行切片來進一步改進,即將滾動分割成可以由客戶端應用程序獨立使用的多個切片。

因此,假設您有一個應該返回1,000,000個點擊的查詢,並且您希望使用正常的滾動查詢(即無切片)在批量50,000個點擊中滾動該結果集,則您的客戶端應用程序將擁有進行第一次滾動調用,然後再進行20次同步調用(即一個接一個地調用)來檢索每批50K次匹配。

通過使用切片,可以並行化20個滾動調用。如果您的客戶端應用程序是多線程的,則可以使每個滾動調用使用5個(例如)切片,因此,您最終將得到5個切片〜10K個匹配,可以由應用程序中的5個不同線程使用擁有單線程消耗50K命中。因此,您可以充分利用客戶端應用程序的全部計算能力來消耗這些命中。

切片的理想數量應該是源索引中的分片數量的倍數。爲了獲得最佳性能,應該選擇與源索引中有碎片相同數量的切片。出於這個原因,你可能想使用自動切片而不是手動切片,因爲ES會爲你挑選這個數字。

+0

啊,所以切片只是一個瞬態性能優化,對嗎?我從文檔中得到的第一印象是切片是持久分區數據的一種方式。 –

+1

絕對的,數據的持久分區已經被分片基礎架構所關注。切片只是一個暫時的優化,可持續運行查詢所需的時間。 – Val

+0

太棒了,你需要什麼? – Val

相關問題