> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# なぜMapReduceのようなものを使わないのでしょうか？

> このページでは、MapReduceではなくClickHouseを使う理由を説明します

MapReduceのようなシステムは、reduce演算が分散ソートに基づく分散コンピューティングシステムと見なせます。この種のオープンソースソリューションとして最も一般的なのは、[Apache Hadoop](http://hadoop.apache.org)です。

これらのシステムはレイテンシが高いため、オンラインクエリには適していません。言い換えると、Webインターフェイスのバックエンドとしては使えません。この種のシステムは、リアルタイムのデータ更新にも向いていません。演算結果とすべての中間結果 (存在する場合) が単一サーバーのRAMに収まるのであれば、reduce演算の実行方法として分散ソートは最適ではありません。オンラインクエリでは、通常これが当てはまります。このような場合、reduce演算にはハッシュテーブルを使うのが最適です。map-reduceタスクを最適化する一般的な方法は、RAM上のハッシュテーブルを使った事前集約 (部分reduce) です。この最適化はユーザーが手動で行います。単純なmap-reduceタスクの実行時にパフォーマンスが低下する主な原因の1つが、分散ソートです。

多くのMapReduce実装では、クラスター上で任意のコードを実行できます。しかし、すばやく試行錯誤を行うには、OLAPでは宣言的なクエリ言語のほうが適しています。たとえば、HadoopにはHiveとPigがあります。さらに、Spark向けのCloudera ImpalaやShark (outdated) 、またSpark SQL、Presto、Apache Drillもあります。このようなタスクを実行する際のパフォーマンスは、専用システムと比べると大幅に劣ります。また、レイテンシも比較的高いため、これらのシステムをWebインターフェイスのバックエンドとして使うのは現実的ではありません。
