橫向對比ElasticSearch與Sphinx
? 導入MySQL數據生成索引
Elastic Search:RESTful介面,或 GitHub - scharron/elasticsearch-river-mysql
Sphinx:原生支持基於MySQL的表建索引
Elastic Search官方文檔上,數據都是使用RESTful介面一條一條插入的,也就是增量更新。有個bulk介面,可以批量導入、大幅加快速度。在數據量非常大的時候,遍歷全表重建一次索引會比較消耗時間。elasticsearch-rivel-mysql這個項目並不是很靠譜,開發者甚至曾經在git上標明deprecated。
我是推薦使用bulk方法的,畢竟Logstash就是用這個。
在導入MySQL數據生成索引時,從易用性、可靠性、速度上來看,Sphinx優於Elastic Search。Sphinx真的很快。
? 增量更新支持
Elastic Search優於Sphinx。Elastic Search把增量更新作為首選CURD方式;而Sphinx使用輔助表的方案不但不優雅,還會讓你的其他系統變得複雜起來,在你頻繁更改單條數據的時候很容易出錯。
? 可視化與輔助工具
Elastic Search:Kibana,Beats,Logstash,Marvel,Head
Sphinx:Sphinx Tools
Kibana是Elastic Search提供的數據可視化界面,基本功能有:1)讀取一個Index 2)對一個Index寫query查詢出具體數據 3)通過這些數據生成圖表 4)拉幾個圖表生成一個報表。
Kibana非常強大,根據這些基礎功能,我們已經可以自由定製完成各種複雜需求了。Kibana還可以加各種插件,其中最常用的是Marvel(性能、狀態監控),非常好用。
Beats是一套收集日誌的框架,官方稱為Data Shipper。這個以後單獨拿來說。
Logstash是一套日誌處理框架。老實說我很長一段時間迷茫Logstash跟Beats各自定位...簡單來說,Beats是專門用來收集數據的,Logstash是專門用來處理數據的。
反觀Sphinx Tools,還停留在性能監控的階段,而且還在內測,被Elastic Search的全家桶甩太遠了。
? 搜索演算法支持
ElasthcSearch的搜索底層功能基於Lucene,Sphinx也該有的都有。然而Elastic Search的Query DSL支持更複雜的查詢邏輯,這一點是超越Sphinx的。
在自定義Ranker方面,Elastic Search的Function Score Query比Sphinx的expression-ranker強大許多。當年我為了讓Sphinx支持一個定製的Ranker,不得不去改源碼,後來發現這個功能在Elastic Search上可以輕鬆實現。
總的來說,Elastic Search稍微優於Sphinx。
? 橫向擴展與高可用
Elastic Search是天生為了集群化而設計的。索引如果沒有Replica就會顯示黃燈,有才會亮綠燈。每個節點分為Client Node、Data Node、Master Node三種角色,在合理的配置之下,任意一台(甚至多台)機器炸了,整個集群都能正常運行。Elastic Search還支持動態加機器等等功能,暫不贅述。
Sphinx也有master searchd和slave searchd的概念,可以分散式,但想實現高可用就相當複雜了。
Elastic Search優於Sphinx。Sphinx的劣勢不在於做不到,而在於不好用。
? 資源佔用
Sphinx優於Elastic Search。
不得不說,java在這方面比不上C++。無論是CPU還是內存佔用,Sphinx都比Elastic Search優秀。所以在一些高並發的簡單需求,我依然會選擇Sphinx。
? 搜索速度
搜索速度主要看怎麼配置Cluster,越多搜起來就越快。
? NLP支持
這裡只說中文NLP。
Elastic Search:IK、結巴
Sphinx:曾經有個叫coreseek的項目,可惜沒有繼續維護了。
其實雙方都可以開發第三方插件,接入國內的LTP或者ICTCLAS都不難。
? 總結
Sphinx和Elastic Search都是很優秀的方案,都經歷了實戰的考驗。當時為什麼我從Sphinx倒戈去了Elastic Search,主要原因是:
? 我有定製Ranker的需求,Elastic Search的Functional Score Query剛好滿足了我
? 業務越來越大,Elastic Search有更強的橫向擴展能力和高可用性
? 可以用Kibana整出好看的報表啊!
現在回頭一看,Elastic Search發力非常猛,版本迭代如火箭一般,社區也很活躍。我認為這個選擇沒有出錯。
推薦閱讀:
※ElasticSearch相關性打分機制
※世界偏見地圖:上大學去美國,買炒鍋找中國
※把類pinterest的人工圖片分類標籤,如堆糖、花瓣的圖片分類,投到機器學習訓練,能夠自動化的準確的產生「萌」「清新」「森女系「這種情感化的分類嗎?搜索引擎的圖片搜索是不是也可以做這種訓練,然後改進搜索結果呢?
※微軟Bing:全球化浪潮下的搜索選擇
※基於百科語料優化搜狗圖片搜索的方法實踐
TAG:Elasticsearch | Sphinx | 搜索引擎 |