查找数据库中大量数据的单词频率

时间:2012-08-16 12:09:59

标签: ruby ruby-on-rails-3 algorithm full-text-search

如果我们在一个文件中有一个巨大的字符串数据,我们通常可以使用算法,比如(hash + heap)或(trie + heap)等来有效地找到高频率的顶级“k”字。如果我的'数据库'中有大量的字符串数据,我该怎么做呢。现在我知道的唯一方法是查询整个数据集,然后对其执行频率操作。但查询庞大的数据集是一项非常昂贵的操作。有没有有效/更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

通过并行化并使用集群而不是单个计算机来查找有关大数据的信息。

您所描述的是一个经典的map-reduce问题,可以使用以下函数处理(伪代码):

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

map reduce框架以多种语言实现 - 允许您轻松扩展问题并轻松使用庞大的集群,为您处理故障和工作人员管理。

在这里:doc是一个单独的文档,它通常假定一组文档。如果您只有一个巨大的文档,您当然可以将其拆分为较小的文档并调用相同的算法。