2012-08-16 82 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