Кто имеет опыт работы с объемными базами на MongoDB, подскажите пожалуйста, насколько она предназначена или не предназначена (быстро или медленно считает) для расчета сумм, средних и т.п., что на SQL можно выразить как SELECT SUM(X) FROM T WHERE Y > 10 AND Z < 100
Хранение в json/bson вроде не намекает на производительность таких операций, но возможность кластеризации и хранения больших объемов MongoDB очень подкупает…
Map/Reduce — одно из главных направлений развития MongoDB, производительность её на таких операциях (если всё сделано грамотно) гораздо выше, чем на MySQL. однако не стоит по одному этому поводу сразу бросаться её использовать. у mongo оочень много подводных камней, о которых вы никогда не задумывались в MySQL, как то: агрессивное кеширование всего data-set'а (нет смысла запускать mongo с большим набором данных, если там крутится ещё что-то кроме монго) и global write lock (монго в общем-то создана для быстрого чтения, но вставка в ней — ад и ужас)
Считает не быстро, ибо считать это всё будет однопоточный джаваскрипт. К тому же агрегация в монго обычно не рассчитана на realtime. Если нужна агрегация и кластеризация, смотрите в сторону column-oriented dbms или hadoop. Либо оставайтесь на SQL и не мучайтесь.
Задача как раз сделать многопоточную систему, в которой основные расчеты происходят в пакетном режиме при вставке данных. То есть получение пакета новых данных, вставка и обработка с расчетом большого количества новых полей. Первая реализация на MySQL и Python оказалась довольно медленной. Ее удалось распараллелить просто запуском нескольких процессов на питоне, каждый из которых обрабатывает свою часть данных (типа партиций, например один процесс обрабатывает строки 1-10000, второй 10001-20000 и т.д.) Но хочется найти более модное решение типа hadoop, но поскольку работа с базой данных, смотрю на mongodb.