При изучении способов выполнения аналитики в реальном времени с MongoDB, кажется, существует довольно стандартный способ для суммирования, но ничего с точки зрения более сложной агрегации. Некоторые вещи, которые помогли ...
Основной подход к выполнению сумм заключается в атомарном увеличении ключей документа для каждой новой поступающей записи для кэширования общих запросов:
Stats.collection.update({"keys" => ["a", "b", "c"]}, {"$inc" => {"counter_1" => 1, "counter_2" => 1"}, "upsert" => true);
Это не работает для агрегатов, кроме сумм. У меня вопрос, можно ли сделать что-то подобное для средних , min и max в mongodb?
Скажем, у вас есть такой документ:
{
:date => "04/27/2011",
:page_views => 1000,
:user_birthdays => ["12/10/1980", "6/22/1971", ...] # 1000 total
}
Не могли бы вы сделать какую-нибудь атомарную или оптимизированную операцию в реальном времени, которая сгруппировала бы дни рождения в нечто вроде этого?
{
:date => "04/27/2011",
:page_views => 1000,
:user_birthdays => ["12/10/1980", "6/22/1971", ...], # 1000 total
:average_age => 27.8,
:age_rank => {
"0 to 20" => 180,
"20 to 30" => 720,
"30 to 40" => 100,
"40 to 50" => 0
}
}
... точно так же, как вы можете сделать Doc.collection.update({x => 1}, {"$push" => {"user_birthdays" => "12/10/1980"}})
, чтобы добавить что-то в массив и не загружать документ, можете ли вы сделать что-то подобное для усреднения / объединения массива? Есть ли что-то в этом роде, что вы используете для агрегирования в реальном времени?
MapReduce используется для выполнения заданий пакетной обработки. Я ищу шаблоны для чего-то вроде карты-сокращения в реальном времени для:
- Средние значения : каждый раз, когда вы помещаете новый элемент в массив в mongodb, как лучше всего усреднить эти значения в режиме реального времени?
- Группировка : если вы группируете возраст по 10-летним скобкам и у вас есть массив возрастов, как вы могли бы оптимально обновить счетчик для каждой группы при обновлении документа с новым возрастом? скажем, массив возрастов будет постоянно выдвигаться / вытягиваться.
- Мин. / Макс. : Какими способами можно вычислить и сохранить мин. / Макс. Массив возрастов в этом документе?