聚合输出消失。
我运行了一个聚合任务。
它应该将结果写入另一个集合。
数据量非常大,大约 1TB
现在,我检查了数据库状态,它显示当前数据库大小 2TB
并且tmp.agg_out.1
不再存在,所以假设任务完成了
tw_weather 2296.832GB
输出集合的计数是 ZERO
> db.result.count()
0
结果在哪里?如果没有输出,为什么DB大小加倍?
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1105 mongodb 20 0 4.495t 9.368g 771684 S 0.3 63.8 488:26.99 mongod
有没有让我知道现在发生了什么?
~$ mongostat
insert query update delete getmore command flushes mapped vsize res faults idx miss % qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 1|0 0 2296.9G 4602.7G 9.4G 0 0 0|0 0|0 79b 10k 2 02:41:29
*0 *0 *0 *0 0 1|0 0 2296.9G 4602.7G 9.4G 0 0 0|0 0|0 79b 10k 2 02:41:30
*0 *0 *0 *0 0 1|0 0 2296.9G 4602.7G 9.4G 0 0 0|0 0|0 79b 10k 2 02:41:31
*0 *0 *0 *0 0 1|0 0 2296.9G 4602.7G 9.4G 0 0 0|0 0|0 79b 10k 2 02:41:32
~$ mongotop
2015-05-08T02:42:37.117+0000 connected to: 127.0.0.1
ns total read write 2015-05-08T02:42:38Z
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
weather.cds 0ms 0ms 0ms
weather.import_errors 0ms 0ms 0ms
weather.result 0ms 0ms 0ms
weather.system.indexes 0ms 0ms 0ms
它适用于样本数据(大约1000万,但在大约10亿大小的整个数据上失败)
source_collection = "cds"
output_collection = "result"
db[output_collection].drop()
db[output_collection].createIndex({symptom_history:1});
pipeline = [
{ "$project": {
"doc": "$$ROOT",
"id": "$$ROOT.ID",
"weathers": "$$ROOT.weathers"
}},
{"$unwind": '$weathers'},
{"$group":{'_id': "$id",
'records': {'$push': '$doc'},
'weather_history': {'$addToSet': '$weathers'},
'count': {"$sum": 1}
}
},
{
"$project": {
"id": "$id",
"weather_history": "$weather_history",
"count": "$count",
"records": "$records",
}
},
{ "$out" : output_collection }
]
cur = db[source_collection].runCommand('aggregate',
{pipeline: pipeline,allowDiskUse: true})