Итак, BuddyMedia использует кое-что из этого. Gilt Groupe сделал что-то очень крутое с Hummingbird (node.js + MongoDB).
Работая на крупного интернет-рекламодателя в области социальных сетей, я могу засвидетельствовать, что отчетность в реальном времени - это действительно боль. Попытка «свернуть» 500 миллионов показов в день - это уже сложная задача, но попытка сделать это в реальном времени сработала, но у нее были некоторые существенные ограничения. (как будто это на самом деле было отложено на 5 минут:)
Честно говоря, проблема такого типа является одной из причин, по которой я начал использовать MongoDB. И я не единственный. Люди используют MongoDB для всех видов аналитики в режиме реального времени: мониторинг сервера , централизованное ведение журнала , а также отчеты на приборной панели.
Настоящим ключом при создании отчетов такого типа является понимание того, что структура данных в MongoDB полностью отличается, вы избегаете запросов на «агрегирование», поэтому запросы и выходные диаграммы будут разными. На стороне клиента есть дополнительная работа по кодированию.
Вот ключ, который может указать вам правильное направление для того, чтобы сделать это с MongoDB. Взгляните на следующую структуру данных:
{
date: "20110430",
gender: "M",
age: 1, // 1 is probably a bucket
impression_hour: [ 100, 50, ...], // 24 of these
impression_minute: [ 2, 5, 19, 8, ... ], // 1440 of these
clicks_hour: [ 10, 2, ... ],
...
}
Здесь, очевидно, есть некоторые хитрости, соответствующие индексы, возможно, объединение данных + пол + возраст в _id
. Но это своего рода базовая структура аналитики кликов в MongoDB. Обновлять показы действительно легко и нажимает { $inc : { clicks_hour.0 : 1 } }
. Вы можете обновить весь документ атомарно. И на самом деле довольно естественно сообщать. У вас уже есть массив, содержащий ваши точки почасового или минутного уровня данных.
Надеюсь, это направит вас в правильном направлении.