В настоящее время я изучаю бэкэнд для использования в проекте с требовательными требованиями к агрегации данных. Основные требования к проекту следующие.
-
Храните миллионы записей для каждого пользователя. У пользователей может быть более 1 миллиона записей в год, поэтому даже со 100 пользователями мы говорим о 100 миллионах записей в год.
-
Агрегирование данных по этим записям должно выполняться "на лету". Пользователи должны иметь возможность фильтровать записи на тонну доступных фильтров, а затем представлять резюме (итоговые значения, средние значения e.t.c) и графики результатов. Очевидно, я не могу предсказать какие-либо результаты агрегирования, потому что комбинации фильтров (и, следовательно, множества результатов) огромны.
-
Пользователи получат доступ только к своим собственным данным, но было бы неплохо, если бы анонимные статистические данные могли быть рассчитаны для всех данных.
-
Данные будут проводиться большую часть времени в пакете. например, пользователь будет загружать данные каждый день, и может потребоваться 3000 записей. В более поздней версии могут быть автоматические программы, которые загружаются каждые несколько минут меньшими партиями из 100 элементов, например.
Я сделал простой тест на создание таблицы с 1 миллионом строк и выполнение простой суммы 1 столбца как в mongodb, так и в mysql, и разница в производительности была огромной. Я не помню точные цифры, но это было что-то вроде mysql = 200ms, mongodb = 20 секунд.
Я также провел тест с couchdb и имел гораздо худшие результаты.
То, что кажется многообещающим с точки зрения скорости, - это cassandra, с которым я был очень в восторге, когда впервые обнаружил его. Однако документации недостаточно, и я не нашел твердых примеров того, как выполнять суммы и другие агрегированные функции в данных. Возможно ли это?
Как мне кажется, из моего теста (возможно, я сделал что-то не так), с текущей производительностью невозможно использовать mongodb для такого проекта, хотя автоматическая функция ошпаривания кажется идеально подходящей для этого.
Есть ли у кого-нибудь опыт сбора данных в mongodb или какие-либо сведения, которые могут помочь в реализации проекта?
Спасибо, Димитрис