測試KD樹的性能,50維度的數據,100萬的數據用了600多毫秒,而且搜索結果與線性搜索的結果相差還很是大。鑑於此,我本身研究了一個搜索算法。64維度,100萬的數據量,搜索前十個近期鄰點,大概在200毫秒左右(PS:經過修正bug,算法在此環境中達到了20ms之內搜索速度),而且結果與線性搜索偏差不大。java
1.對於鄰近點越近的搜索就越快點
2.對於算法是基於內存的。理論上單機的搜索能力可以達到上億(內存限制大小)
3.算法是增量的,對於新增的數據可以在必定時間內被搜索到(新增數據這個功能尚未實現,理論上很是easy實現的)
4.搜索過程是可以增量搜索的,也就是說假設一個點在業務中之中假設在第一搜索不到合適結果,可以第一次搜索的基礎上擴大搜索範圍,從而不會消耗過多的性能算法
這個架構有點類似於solr的架構,不論什麼應用程序都可以內嵌一個搜索client以提交搜索請求,提交搜索請求需要載入一些元信息。這些信息不會很是大,依據元信息進行http分發搜索請求,並依據搜索結果進行合併微信
合做開發內容markdown
需要開發的分爲三大部分:
1.第一部分是底層通信部分
2.第二部分是算法的無缺
3.第三部分是算法與框架的結合架構
項目開發語言:框架
JAVA,C++分佈式
技能要求post
1.至少一年的java開發經驗,最好也懂得寫頁面
2.對netty熟悉
3.瞭解HA原理性能
搜索演示:netty
搜索平臺訪問地址:http://moxuqiang.6655.la
搜索方式:在文本框內輸入50維的記錄並點擊搜索。一次僅僅能搜一條記錄;
獲得對應的搜索結果例如如下:
搜索結果裏展示了前十個搜索點與鄰近點的距離以及鄰近點記錄信息,及搜索耗時
由於比較匆忙,對輸入沒有進行全面的檢查,因此請依照教程嚴格輸入搜索記錄
搜索數據集下載地址:http://pan.baidu.com/s/1kUj2gar
聯繫方式
有意合做者可經過下面方式聯繫 QQ:578038303 微信可經過QQ號搜索