Почему не использовать что-то вроде MapReduce?
Мы можем отнести такие системы, как MapReduce, к распределённым вычислительным системам, в которых операция reduce основана на распределённой сортировке. Наиболее распространённым решением с открытым исходным кодом в этом классе является Apache Hadoop.
Эти системы не подходят для онлайн-запросов из-за высокой задержки. Другими словами, они не могут использоваться в качестве бэкенда для веб-интерфейса. Эти типы систем не полезны для обновлений данных в реальном времени. Распределённая сортировка не является наилучшим способом выполнения операций reduce, если результат операции и все промежуточные результаты (если таковые имеются) находятся в оперативной памяти одного сервера, что обычно имеет место для онлайн-запросов. В таком случае хеш-таблица является оптимальным способом выполнения операций reduce. Обычно используемый подход к оптимизации задач map-reduce — это предварительная агрегация (частичное сокращение) с использованием хеш-таблицы в оперативной памяти. Пользователь выполняет эту оптимизацию вручную. Распределённая сортировка является одной из основных причин снижения производительности при выполнении простых задач map-reduce.
Большинство реализаций MapReduce позволяют выполнять произвольный код на кластере. Но декларативный язык запросов лучше подходит для OLAP для быстрого проведения экспериментов. Например, у Hadoop есть Hive и Pig. Также следует рассмотреть Cloudera Impala или Shark (устаревший) для Spark, а также Spark SQL, Presto и Apache Drill. Производительность при выполнении таких задач значительно ниже, чем у специализированных систем, но относительно высокая задержка делает нереалистичным использование этих систем в качестве бэкенда для веб-интерфейса.