2010-10-23 89 views
4

我想用LSH構建一個具有數百萬高維向量的大型可伸縮數據庫。由於我必須將所有數據保存在ram中才能進行快速查詢,因此必須將數據分佈到多個服務器上以保存所有對象。分佈式LSH(局部敏感散列)

一個簡單的方法是將所有對象分散到不同的服務器,並向每個服務器發送一個查詢。具有最佳答案的服務器具有正確的對象。

我確定必須有一些更好的解決方案,查詢不必發送到所有服務器節點,並且類似的對象在一臺服務器上組合在一起。

什麼是分佈式LSH表的好方法?也許還有一些項目在那裏?

感謝您的任何提示。

+0

我會看看卡桑德拉,自定義分區。 – 2011-08-11 07:56:08

+0

這可能是相關的:Haghani,Michele和​​Arberer在[使用局部敏感哈希的高維分佈式相似搜索](http://qid3.mmci.uni-saarland.de/publications/haghani-edbt2009.pdf)。 – 2012-10-02 15:32:39

+0

@ KiptonBarros的鏈接已經消失,但可以在這裏找到本文:https://openproceedings.org/2009/conf/edbt/HaghaniMA09.pdf – duhaime 2017-08-16 13:19:33

回答

2

首先,您要考慮要訪問數據的密鑰。正是這些鍵你想要散列 - 並且,如果你知道你想訪問的確切鍵,你可以散列它們來確定要查詢哪個服務器 - 消除了查詢每個服務器的需要。

如果您不知道確切的密鑰(因爲我懷疑是您的情況),事情會變得更加困難 - LSH會爲您的記錄生成一個總訂單 - 其中類似記錄可能(但不是保證)具有相同記錄哈希值。例如,我認爲這是超平面與其原點法線向量長度的映射......因此,例如,如果搜索類似(但不相同)的超平面到4到5之間的超平面來自原點的單位,一個開始尋找的好地方就是距離原點4到5個單位的其他超平面。因此,如果這個「起源距離」是你的本地敏感散列函數,那麼你可以使用它的數據,並且這樣做 - 你可以通過僅搜索具有匹配的「距離起源'LCH。通過這個特定的LCH,其中相似度與哈希線性相關,只有在訪問分佈式服務器的子集時,纔有可能獲得確定的結果。所有LSH功能都不是這種情況。

恕我直言,一切都取決於您的LSH功能 - 而且選擇取決於您的應用程序的具體情況。