Давайте возьмем что-то простое, например, подсчет кликов.Есть несколько способов сообщить о кликах.
- Храните клики в одном месте.(файл, таблица базы данных, коллекция) Когда кому-то нужна статистика, вы запускаете запрос к этой таблице и агрегируете результаты.Конечно, это не очень хорошо масштабируется, поэтому обычно вы используете ...
- Пакетные задания.Сохраняйте свои клики, как в # 1, но суммируйте их каждые 5 минут или около того.Когда люди хотят запросить сводную таблицу.Обратите внимание, что у «кликов» могут быть миллионы строк, но у «сводки» может быть только несколько тысяч строк, поэтому выполнять запросы намного быстрее.
- Подсчет кликов в режиме реального времени.Каждый раз, когда есть щелчок, вы увеличиваете счетчик где-то.Обычно это означает увеличение «сводных» таблиц.
В настоящее время большинство крупных систем используют # 2.Есть несколько систем, которые особенно хороши для этого (см. Hadoop).
# 3 трудно сделать с базами данных SQL (например, MySQL), потому что происходит много блокировок диска.Однако MongoDB не постоянно блокирует диск и имеет гораздо лучшую пропускную способность записи.
Таким образом, MongoDB очень хорош для таких «счетчиков реального времени».Это то, что они подразумевают под predistilled or aggregated in runtime
.
Но если MongoDB имеет большую пропускную способность записи, разве это не должно быть хорошо при выполнении пакетных заданий?
Теоретически,это может быть правдой, и MongoDB поддерживает Map / Reduce.Тем не менее, MongoDB Map / Reduce в настоящее время работает довольно медленно и не наравне с другими механизмами Map / Reduce, такими как Hadoop.Кроме того, поле Business Intelligence (BI) заполнено многими другими инструментами, которые очень специфичны и, вероятно, лучше подходят, чем MongoDB.