Доброго всем вам.
Итак, имеем типичную задачу - есть таблица, в которой много-много событий, которые состоят из даты/времени, типа, кучи идентификаторов-ссылок, и кучки всевозможных флагов.
Функционально - необходимо подбить несколько десятков запросов на sum, avg, count, min, max и т.п. агрегации за определенный промежуток времени, при этом каждый запрос с определенными условиями where и group by по флагам и идентификаторам данной таблицы.
В свое время решались подобные задачи разными подходами:
1. последовательный перебор кучи select XXX from TTT where IDs and Flags group by CCC
2. копирование данных из таблицы в MEMORY-table (mysql) и все тот же последовательный перебор
3. выдергивание всех данных за промежуток времени (по индексу) в middleware и построчный подсчет необходимых значений, в потоковом режиме.
Первые два способа - говно, и обсуждать нечего - медленно до безобразия (второй быстрее, но надо очень много памяти, что не всегда доступно). Третий - очень быстро (в ~25 раз быстрее), минимальные затраты памяти.
Так сложилось исторически, что никто не пробовал все запросы запустить в параллель на базе - будет ли профит, допустим на mysql, 50-ти запросах, 2-8 головах CPU и 2-8GB RAM при среднем кол-ве строк ~10000000, около четверти килобайта на строку? Выборки - от 10000 до 1000000 строк за раз.
И самое главное - можно ли как-то решить эту задачу третьим способом, не пристраивая middleware, т.е. исключительно средствами SQL (mysql или pgsql). Глубинных знаний SQL не имею, т.ч. не пинайте.
спасибо.