我正在將一個搜索引擎從一個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毫秒的範圍內嗎? 有一些方法可以提高搜索性能嗎?
歡迎提供任何信息或意見,這是決定工業化原型的重要組成部分。
謝謝。
嗨,沒有人想對此發表評論嗎? – 2012-03-01 09:36:02
你可能想嘗試使它少一點簡單... – fread2281 2013-05-27 21:55:46