0

要約: データベースからのデータのコレクションを処理する場合、多少複雑な (または単に大きな) 質問に対する答えを見つける代わりに、MapReduce は良い考えですか?

コレクション/テーブルとして GAE のデータストアに格納されている一連のシンジケーション ソース (たとえば、 http://xkcd.com/rss.xmlのような URL) を同期したいと考えています。2 つのオプションが表示されます。1 つは簡単です。各タスク ハンドルの 100 または 1000、または各タスクに適合すると思われる任意の自然数をキューに入れる単純なタスクを作成します。もう 1 つのオプションは MapReduce です。

後者の場合、Map がすべてを行い、Reduce は何もしません。さらに、マップには結果がなく、(データストアの) 「状態」を変更するだけです。

@Override public void map(Entity entity) {
    String url = (String)entity.getProperty("url");
    for(Post p : www.fetchPostsFromFeed(url)) {
        p.save();
    }
}

ご覧のとおり、1 つのソースが多くの投稿にマップされる可能性があるため、私のマップは "Explode" と呼ばれることもあります。

したがって、出力はなく、reduce で行うことはありません。私がこのマップ アプローチを気に入っている理由は、Google に次のように伝えるからです。ここでは、コレクション/テーブルを取得し、さまざまなマッパーに適しているように分割し、投稿を好きな場所に保存します。データストアは「高レプリケーション」を使用します。したがって、データの可用性は高く、ネットワーク通信を実際に削減しないエンティティを「計算ユニット」が実行するための最良の選択です。すべてのデータストア ユニットに移動する必要があるため、投稿の保存についても同じことが言えます。私が気に入っているのは、mapreduce には、スタックしたマップ計算の障害回復の方法があり、意味があることを願ってどこかでいくつかのエンティティをキューに入れる代わりに、どのノードに送信するタスクがいくつあるかを知っていることです。

ここでの私の考え方が間違っているかもしれませんが、その場合は訂正してください。とにかく、reduce と map が 'explode' ではないため、このアプローチは '間違っている' のでしょうか?

4

1 に答える 1

1

いいえ、Map pretty は手動でタスクをキューに入れるのと同じことを行います。

于 2012-11-19T16:10:31.013 に答える