1

ファイルに巨大な文字列データがある場合、通常はアルゴリズム((ハッシュ+ヒープ)や(トライ+ヒープ)など)を使用して、上位の「k」単語を高頻度で効率的に見つけることができます。'データベース'に大量の文字列データがある場合、これを行うにはどうすればよいですか。現在、私が知っている唯一の方法は、データセット全体をクエリしてから、そのデータセットに頻度演算を実装することです。しかし、膨大なデータセットのクエリは非常にコストのかかる操作です。これを行うための効率的/より良い方法はありますか?

4

1 に答える 1

2

巨大なデータに関する情報の検索は、データを並列化し、単一のマシンではなくクラスターを使用することによって行われます。

あなたが説明しているのは、古典的なmap-reduceの問題であり、次の関数(擬似コード)を使用して処理できます。

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

多くの言語で実装されているmapreduceフレームワークを使用すると、問題を簡単にスケーリングし、大きなクラスターを手間をかけずに使用して、障害やワーカー管理を処理できます。

ヒアドキュメント:docは単一のドキュメントであり、通常はドキュメントのコレクションを想定しています。巨大なドキュメントが1つしかない場合は、もちろんそれを小さなドキュメントに分割して同じアルゴリズムを呼び出すことができます。

于 2012-08-16T12:23:46.470 に答える