2012-08-16 74 views
1

如果我們在一個文件中有一個巨大的字符串數據,我們通常可以使用算法(s),比如(hash + heap)或(trie + heap)等等來有效地查找頂部'k'字高頻率。如果我的'數據庫'中有大量的字符串數據,我該如何做到這一點。現在我知道的唯一方法是查詢整個數據集,然後對其執行頻率操作。但是查詢龐大的數據集是一項非常昂貴的操作。有沒有任何有效/更好的方法來做到這一點?查找數據庫中大量數據的頻率

回答

2

通過對大量數據進行並行處理並使用羣集而不是單個機器來完成對大量數據的查找。

你所描述的是一個典型的map-reduce問題,可以使用以下功能(在僞代碼)進行處理:

map(doc): 
    for each word in doc: 
     emitIntermediate(word,"1") 
reduce(list<word>): 
    emit(word,size(list)) 

地圖縮小框架,它在許多語言中實現 - 讓你輕鬆地擴展問題並毫不費力地使用大型集羣,爲您處理故障和工人管理。

在這裏:doc是一個單一的文件,它通常假設文件的集合。如果您只有一個大文檔,您當然可以將其分割爲較小的文檔並調用相同的算法。

+0

我對並行計算或創建集羣沒有太多的知識。你能否給我提供參考鏈接,以便如何使用集羣來實現mapreduce?我基本上想知道,如何使用現有的mapreduce(比如java或ruby)實現的集羣。 – VicG 2012-08-16 12:32:47

+0

@AmanSingh:Map-Reduce已經實現。 [原始論文](http://research.google.com/archive/mapreduce.html)由Google在C++中實施。 [Hadoop](http://hadoop.apache.org/)是一種流行的Java實現。不要試圖自己實現Map-Reduce - 使用現有的框架。 – amit 2012-08-16 12:35:33

+0

我會檢查一下。謝謝! – VicG 2012-08-16 12:40:53