2015-05-27 145 views
1

我完全陌生的NoSQL DBS如卡桑德拉,蒙戈,Redis的等等,我想創建這種類型的結構組成:的NoSQL數據庫

{ 
    "item_id": "ABC1", 
    "x1": 0.55, 
    "x2": -0.29, 
    ... 
    "x100": 0.17 
} 

基本上,我有幾百萬的項目和100個浮動與他們每個相關聯。我的主要任務是搜索靠近給定的浮點矢量(在維度100的向量空間中)的項目,並獲得例如前k個項目或距離小於d的所有項目。

是否有NoSQL數據庫特別適合這種類型的任務?

謝謝你的任何暗示, 帕特里克

回答

1

據我所知,目前還沒有數據庫支持非(2 | 3)D空間索引,但您可以在自己的應用程序層中實現自己的支持。

在一般情況下,你想有一個高效的算法N維最近鄰搜索這樣的:

  • KD-樹與整體爲O(log N)的複雜性
  • 地理散列

但是他們都很難正確實施。

+0

謝謝Shutty。我還考慮LSH算法來降低維度,並在redis鍵值模式(鍵:位矢量,值:與此桶有關的項)中使用得到的位矢量(與一個給定矢量相關聯)。 – Patrick

1

我相信沒有提到的DB會給你你你必須的數據量需要什麼特別的,我建議使用Solr,我也有類似的情況和Solr是最好的解決方案。

+0

AFAIK Solr/Elasticsearch沒有用於非2D空間搜索的基元。 – shutty

+0

@Abdullah我知道Solr將文檔存儲在向量空間中,並計算查詢向量和文檔向量之間的餘弦相似度。但是這些矢量是在場景後面計算的。是否有可能存儲我自己的載體並搜索那些距離某個特定載體最近的載體? – Patrick