r.db('DB').table('TB').group('message').map(function(doc){
return {
count: 1,
from: doc('timestamp'),
to: doc('timestamp'),
browsers: r([doc('ua')('family')])
}
}).reduce(function(left, right){
return {
count: left('count').add(right('count')),
from: r.branch(left('from').lt(right('from')), left('from'), right('from')),
to: r.branch(left('to').gt(right('to')), left('to'), right('to')),
browsers: left('browsers').setUnion(right('browsers'))
}
}).ungroup().orderBy(r.desc(r.row('reduction')('count'))).limit(100)
我想做的是:
message
我希望结果如下:
{
'message': 'message content shared by the group',
'earliest': 1431307840000,
'latest': 1431307849999,
'tags': ['tag1', 'tag2', 'tag3']
}
我需要经常执行此查询(以呈现网页的初始内容),因此性能是一个问题。但表现非常令人沮丧。使用15k文档表,此查询执行4.5s。 有关如何改进的想法吗?
查询的个人资料在这里:
[
{
"description": "Evaluating limit.",
"duration(ms)": 4134.771499,
"sub_tasks": [
{
"description": "Evaluating orderby.",
"duration(ms)": 4134.327403,
"sub_tasks": [
{
"description": "Evaluating ungroup.",
"duration(ms)": 4113.544033,
"sub_tasks": [
{
"description": "Evaluating reduce.",
"duration(ms)": 4113.241578,
"sub_tasks": [
{
"description": "Evaluating map.",
"duration(ms)": 0.082467,
"sub_tasks": [
{
"description": "Evaluating group.",
"duration(ms)": 0.073697,
"sub_tasks": [
{
"description": "Evaluating table.",
"duration(ms)": 0.028392,
"sub_tasks": [
{
"description": "Evaluating db.",
"duration(ms)": 0.015104,
"sub_tasks": [
{
"description": "Evaluating datum.",
"duration(ms)": 0.001565,
"sub_tasks": []
}
]
},
{
"description": "Evaluating datum.",
"duration(ms)": 0.000356,
"sub_tasks": []
}
]
},
{
"description": "Evaluating datum.",
"duration(ms)": 0.000331,
"sub_tasks": []
}
]
},
{
"description": "Evaluating func.",
"duration(ms)": 0.00122,
"sub_tasks": []
}
]
},
{
"description": "Evaluating func.",
"duration(ms)": 0.000805,
"sub_tasks": []
},
{
"description": "Perform read.",
"duration(ms)": 4112.207454,
"sub_tasks": [
{
"parallel_tasks": [
[
{
"description": "Perform read on shard.",
"duration(ms)": 4044.006493,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 4043.993961,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 4078.153662,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 4078.142774,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 3972.17768,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 3972.167594,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 4024.771149,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 4024.760748,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 4036.958792,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 4036.948958,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 3995.32926,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 3995.318271,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 3916.118836,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 3916.106312,
"sub_tasks": []
}
]
}
],
[
{
"description": "Perform read on shard.",
"duration(ms)": 3970.473735,
"sub_tasks": [
{
"description": "Do range scan on primary index.",
"duration(ms)": 3970.462526,
"sub_tasks": []
}
]
}
]
]
}
]
}
]
}
]
},
{
"description": "Evaluating desc.",
"duration(ms)": 0.003855,
"sub_tasks": [
{
"description": "Evaluating func.",
"duration(ms)": 0.002151,
"sub_tasks": []
}
]
},
{
"description": "Sorting in-memory.",
"mean_duration(ms)": 0.014517,
"n_samples": 1245
}
]
},
{
"description": "Evaluating datum.",
"duration(ms)": 0.000359,
"sub_tasks": []
},
{
"description": "Evaluating stream eagerly.",
"mean_duration(ms)": 0.000061,
"n_samples": 101
}
]
}
]