Конечно, это может привести к более позднему выпуску /
зучении способов выполнения аналитики в реальном времени с MongoDB, кажется, существует довольно стандартный способ суммирования, но ничего с точки зрения более сложной агрегации. Некоторые вещи, которые помогли ...
Rainbird в Твиттере: Суммы в реальном времени, иерархически увеличивающие счетчики ключей. Cassandra.Yahoo S4 а такжеисточник: Пока точно не знаю, как это работает, но похоже, что это сокращение карты в реальном времени. Таким образом, в основном, для каждой добавленной записи вы передаете ее в маппер, она преобразует ее в хеш и отправляет ее для интеграции в документ отчета.http://www.slideshare.net/dacort/mongodb-realtime-data-collection-and-stats-generationКолибриОсновной подход для выполнения сумм состоит в том, чтобы атомарно увеличивать ключи документа для каждой новой поступающей записи, чтобы кэшировать общие запросы:
Stats.collection.update({"keys" => ["a", "b", "c"]}, {"$inc" => {"counter_1" => 1, "counter_2" => 1"}, "upsert" => true);
Это не работает для агрегатов, кроме сумм, хотя. Мой вопрос, может ли что-то подобное быть сделано длясредние, мин, а такжеМаксимум в 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 используется для выполнения заданий пакетной обработки. Я ищу шаблоны для чего-то вроде map-Reduce в реальном времени для:
Сред: каждый раз, когда вы помещаете новый элемент в массив в mongodb, как лучше всего усреднить эти значения в реальном времени?группирование: если вы группируете возраст по 10-летним скобкам и у вас есть массив возрастов, как вы могли бы оптимально обновить счетчик для каждой группы при обновлении документа с новым возрастом? скажем, массив возрастов будет постоянно выдвигаться / вытягиваться.Мин Макс: Каковы некоторые способы вычисления и сохранения минимального / максимального значения этого массива возрастов в этом документе?