2011-09-09 29 views
2

我正在研究一個需要找到大量其他集合中最相交集合的項目。尋找最好的工具來做大規模的比較

也就是說,我有大量(〜300k)的集合,每個集合有數百個條目。給定其中一組,我需要按照它們相交的順序排列其他組。此外,所設置的條目包含可用作過濾器的屬性,例如,對於集合X,按照與「綠色」條目子集相交的順序排列其他集合。

我有免費的統治建築這個解決方案,我正在尋找技術建議。我最初認爲關係數據庫將是最適合的,但我不確定它將如何執行這些實時比較。有人推薦Lucene,但我不確定它能滿足這個法案的要求。

我猜想值得一提的是,新套件會定期添加,套件可能會增長,但永遠不會縮水。

+0

FWIW,我決定採用混合策略。利用[Hibernate Search](http://www.hibernate.org/subprojects/search)填充RDB後端和Lucene索引。 Lucene文檔將代表一個高級集合,沒有定義過濾標準。實質上,每個文檔將是一個ID列表。 過濾將通過RDB完成。因此,對於我上面的假設命題,工作流將如下所示: 1)查詢RDB以獲取集合中所有「綠色」條目的標識X 2)使用這些標識的查詢Lucene獲得排名結果集 –

回答

1

我不確切地知道你在找什麼:方法,庫,工具?

如果您想通過分佈式計算真正快速計算大型數據集,您應該查看MapReduce,例如,在上使用Hadoop

+0

任何那些會很棒。該鏈接最終將我引向[Hadoop](http://en.wikipedia.org/wiki/Hadoop)。這聽起來似乎更容易處理。您對Hadoop有何看法,認爲它是解決此問題的「解決方案」? –

+0

我沒有任何實際經驗,但已經閱讀並聽到很多對Hadoop的好評!也檢查出[這裏在stackoverflow] [http://stackoverflow.com/questions/tagged/hadoop]。你應該知道Hadoop是開源的,MapReduce是Google的專利。 – DaveFar

+0

哦,如果你還想在通勤時學習:http://allthingshadoop.com/podcast/是一個不錯的hadoop播客(和博客),它提供了大量的信息和見解。 – DaveFar

1

Lucene可以很容易地擴展到你所需要的。 Solr可能會更容易設置,並且hadoop最有可能僅爲數百萬個數據點矯枉過正。

你需要考慮的是你想使用的「如何相交」的定義。如果所有的套都具有相同的尺寸,我認爲這很容易,但是在其他情況下,Jaccard距離可能更有意義; Lucene的默認評分通常也很好。

我的建議是:嘗試在本地工作站上運行默認的Solr實例(這是一種Cllick-and-run jar類型的交易)。你很快就會知道Solr/Lucene是否會爲你工作,或者你將不得不通過Hadoop來自定義代碼。