快速搜尋效能問題調研
最近因為專案需要做搜尋,安排我對搜尋的效能這一方面做調研。本文件調研了simhash和es為代表的搜尋方案。用Simhash和ElasticSearch做搜尋各有優缺點,綜合來看可這麼標籤:Simhash是偏計算密集型的搜尋方案代表,但演算法方案複雜;ElasticSearch是IO和硬體消耗大的搜尋方案,但易用性更高;因為精力資源有限,不能親自搭建上述方案進行實際測試對比,後續條件成熟可以根據需要實際搭建測試體驗,一些資料參考網路,參考資料來備註在文件末尾。
調研過程:
名稱 |
具體方案 |
Simhash + Hbase |
使用效果: 比對5000w條資料相似,可3.6毫秒內實現; 處理過程: 見下圖,根據simhash code查詢對應的資料即可; 關鍵演算法實現: Java實現: http://www.open-open.com/lib/view/open1375690611500.html Python實現: https://github.com/seomoz/simhash-cluster 優缺點: 方案複雜,查詢方便,演算法效率高,硬體開銷非常小 使用建議: 可根據檢索型別,加服務佇列,自定義simhash code庫,以鍵值對形式,根據value查Hbase。 注意點: 需根據人工測試比對,來確定海明距離/餘弦相似度的閾值。 (對於我司的應用場景,做下排序就好了) 使用案例: 谷歌的網頁去重、新浪微博相似度比較等。 |
ElasticSearch + Hbase |
使用效果: 億萬資料查詢進行秒回; 處理過程: 根據需要,將資料儲存在es索引中,根據索引通查hbase。具體架構圖如下。 關鍵查詢演算法:
優缺點: 方案簡單,查詢更靈活,演算法效率低,硬體開銷大 注意點: 該方案硬體開銷大,單純依賴硬體堆砌增加邊界。 700萬的資料,消耗了3個節點,各節點硬體配備的4G記憶體 使用案例: 應用比較多,海量交通資料實時存取等。
|
結論:用Simhash和ElasticSearch做搜尋各有優缺點,綜合來看可這麼標籤:
Simhash是偏計算密集型的搜尋方案代表,但演算法方案複雜;
ElasticSearch是IO和硬體消耗大的搜尋方案,但易用性更高;
Simhash的求相似度的過程:
相似度的確認過程:海明距離與相似度。
Hbase + es方案:
參考資料:
- 海量資料相似度計算之simhash短文字查詢 http://www.lanceyan.com/tag/simhash ;
- 基於mongodb+simhash叢集 https://github.com/seomoz/simhash-cluster ;
- Elasticsearch之四種查詢型別和搜尋原理 https://blog.csdn.net/wangyunpeng0319/article/details/78218332
- Elasticsearch+Hbase實現海量資料秒回查詢 https://blog.csdn.net/sdksdk0/article/details/53966430
- 基於HBase+ ElasticSearch的 海量交通資料實時存取方案設計 http://www.cww.net.cn/issues?id=405629&file=1
- ElasticSearch 與 Solr 的對比測試 http://simonlei.iteye.com/blog/1615600
- Elasticsearch實現原理分析 https://blog.csdn.net/zg_hover/article/details/77171014
- simHash 簡介以及 java 實現 http://www.open-open.com/lib/view/open1375690611500.html