所以我不断获得大量数据,这些数据已被收集到processedData
集合中。数据如下:
{
date: "2011-12-4",
time: 2243,
gender: {
males: 1231,
females: 322
},
age: 32
}
所以我会不断地获得大量这样的数据对象。我希望能够看到40岁以上的所有“男性”。由于数据的庞大规模,这似乎不是一个有效的查询。
任何提示?
答案 0 :(得分:1)
一般来说,你不能。
但是,根据实际需要,可能会有一些快捷方式。你想在所有数据集中计算“40岁以上的男性”,还是只计算一天?
1天:将您的数据拆分为每日收藏(processedData-20111121,...),这将有助于您的查询。您也可以缓存此类查询的结果。
整个数据集:预聚合数据。也就是说,在插入新数据条目时,请执行以下操作:
db.preaggregated.update({_id : 'male_40'},
{$set : {gender : 'm', age : 40}, $inc : {count : 1231}},
true);
同样,如果您事先知道所有查询,则可以预先计算它们(而不是保留原始数据)。
这还取决于您如何定义“实时”以及您将拥有多大的查询负载。在某些情况下,只需触发ad-hoc map-reduced。
答案 1 :(得分:0)
我的猜测你的目标GUI是一个网站?在那种情况下,你正在寻找一种叫做彗星的东西。您应该创建一个处理所有数据的图层,并向您的客户端或事件总线广播新的突变(详见下文)。 Mongo不启用实时数据,因为它不会在突变上发出任何内容。因此,您可以使用任何适合您的数据存储。
根据您使用的语言,您有不同的选择(对于彗星):
大多数情况下,您需要一个事件总线或消息队列来放置突变事件。看看JMS,Redis或NServiceBus(取决于你将使用什么)。