stratégias para agregações em tempo real no MongoDB
Ao explorar maneiras de fazer análises em tempo real com o MongoDB, parece haver uma maneira bastante padrão de fazer somas, mas nada em termos de agregação mais complexa. Algumas coisas que ajudaram ...
Rainbird do Twitter: Somas em tempo real, incrementando contadores nas chaves hierarquicamente. Cassandra S4 do Yahoo efont: Ainda não sei exatamente como isso funciona, mas parece que é uma redução de mapa em tempo real. Então, basicamente, para cada registro adicionado, você o passa para um mapeador, ele o converte em hash e o envia para ser integrado ao documento do relatórihttp: //www.slideshare.net/dacort/mongodb-realtime-data-collection-and-stats-generatioBeija Floabordagem básica para fazer somas é incrementar atomicamente as chaves do documento para cada novo registro que chega, armazenar em cache as consultas comun
Stats.collection.update({"keys" => ["a", "b", "c"]}, {"$inc" => {"counter_1" => 1, "counter_2" => 1"}, "upsert" => true);
Isto não funciona para agregados que não sejam somas. Minha pergunta é: algo assim pode ser feito para médias, min e max no mongodb?
Diga que você tem um documento como este:
{
:date => "04/27/2011",
:page_views => 1000,
:user_birthdays => ["12/10/1980", "6/22/1971", ...] # 1000 total
}
Você poderia fazer alguma operação atômica ou otimizada / em tempo real que agrupasse os aniversários em algo assim?
{
: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
}
}
... assim como você pode fazerDoc.collection.update({x => 1}, {"$push" => {"user_birthdays" => "12/10/1980"}})
para adicionar algo a uma matriz e não precisar carregar o documento, você pode fazer algo assim para calcular a média / agregação da matriz? Existe algo nesse sentido que você usa para agregação em tempo real?
@MapReduce é usado para fazer isso em trabalhos de processamento em lote. Estou procurando padrões para algo como redução de mapa em tempo real para:
Médias: toda vez que você envia um novo item para uma matriz no mongodb, qual é a melhor maneira de calcular a média desses valores em tempo reaAgrupament: se você agrupa a idade dos parênteses de 10 anos e tem uma matriz de idades, como atualizar de forma ideal a contagem de cada grupo à medida que atualiza o documento com a nova era? diga que a matriz de idades será constantemente pressionada / puxada.Mínimo máxim: quais são algumas maneiras de calcular e armazenar o mínimo / máximo dessa matriz de idades nesse document