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