2012-02-23 44 views
5

我正在將一個搜索引擎從一個sql數據庫移植到elasticsearch。這樣做的主要原因是能夠輕鬆計算方面。ElasticSearch期望的表現

目前我們通過生成precalc表在sql方面。它運行良好,但維護很困難,只有一部分數據支持方面。

現在ES原型正在工作,我正在對這兩個解決方案進行基準測試,看起來ES版本在性能方面略遜於sql版本(在可維護性方面它更好)。

我使用完全相同的機器構造中,一個64位的平臺,壓頭的32場演出中,SSD磁盤,和四核Intel Xeon在3GHz比較SQL和ES。

該文件是不小,有大約200個字段,取決於所述請求,基於腳本的排序被使用,並且刻面總是計算在文檔的8個字段。

該索引包含3百萬個文檔,如果我沒有弄錯它對於ES可以處理的相對較小。

在查詢方面,我使用的是過濾查詢,並且對於一些要求,一個custom_filters_score查詢來計算分數,並用它進行排序。

一些過濾器是全球性的,因爲小面的,但總有一些過濾器在過濾查詢,所以掃描文檔的數量應減少(不是所有的索引掃描)。

我用在我的測試兩項措施:所花費的時間在服務器上執行搜索,並通過並行運行100個線程的客戶端執行的第二個查詢的數量。

對於elasticsearch,花費在服務器上的平均時間爲每個查詢約500毫秒(用於並行100個查詢),以及平均查詢由第二客戶端上的是約160(一些毫秒丟失在構建查詢,發送它,接收結果和解析它們)。 這是一個有1個分片和0個副本的索引,當我增加分片/副本的數量時,性能顯着下降。

對於SQL,平均花費的時間來執行一個查詢約爲360毫秒(同上,與並行運行的100個查詢),並通過第二個客戶端上的平均查詢約爲200

我知道這是很難進行比較,但由於我對可預期的結果沒有任何瞭解,我不知道有人能評論這些措施。

也許我錯過了一些東西,它應該是一個數量級的速度更快,或者也許這些都是類似environnements礦典型的結果,我不知道。

對我而言,我可以期待什麼? 你在類似的情況下使用ES觀察到了什麼? 它是否支持併發請求? 同時進行100個查詢時,執行查詢的時間應該在500毫秒的範圍內嗎? 有一些方法可以提高搜索性能嗎?

歡迎提供任何信息或意見,這是決定工業化原型的重要組成部分。

謝謝。

+1

嗨,沒有人想對此發表評論嗎? – 2012-03-01 09:36:02

+0

你可能想嘗試使它少一點簡單... – fread2281 2013-05-27 21:55:46

回答

0

這不是問題;這聽起來更像是一場討論。

也就是說,沒有多少人可以評論,因爲我們所有的用例都不一樣。您純粹將其用作分析工具。我使用ElasticSearch作爲數據庫和實時分析工具。所以我對我有用的基準將與你有很大不同。

版本明智,我仍然使用1.8.7(因爲Logstash),但目前的版本是在這個時候寫在0.19.4。即使談到標準基準測試也有太多不同的參數,因爲Elastic Search並不完全是人們今天使用的標準工業工具,所以我想你需要重新考慮你所要求的內容,以便人們進行實際評論。

0

很難給你一個確切的答案,但你的數字聽起來不太出人意料。

  • 確保已與段數優化了指數= 1
  • 調高線程池的大小彈性搜索。
  • 確保Xms和Xmx相同,全部使用模擬鎖。

這應該給你一些性能提升雖然我並不感到驚訝,只有3萬個文檔一個高性能的關係數據庫的效果是否好或更好,所不同的是,DB會變慢,而ES將執行與數百萬的數字一樣。