我有大约900 000项记录的水桶。 大多数的这些记录已经持续在二级索引中的地位。 我想检索所有base_urls和多少文件,属于各BASE_URL中标记PERSISTED所有文档计数。
下面是该查询:
curl -X POST -H "content-type: application/json" \
http://localhost:8098/mapred?chunked=true --data @-<<\EOF
{
"timeout":600000,
"inputs":{
"bucket":"test-bucket",
"index":"status_bin",
"key":"PERSISTED"
},
"query":[{
"map":{
"language":"javascript",
"source":"
function(value, keyData, arg) {
var data = Riak.mapValuesJson(value)[0];
var obj = {};
obj[data.base_url] = 1;
return [obj];
}
"
}
},
{
"reduce":{
"language":"javascript",
"source":"
function(values, arg){
return [values.reduce(
function(acc, item){
for(var base_url in item){
if(acc[base_url]) {
acc[base_url] = acc[base_url] + 1
} else {
acc[base_url] = item[base_url];
}
}
return acc;
})
];
}
"
}
}]
EOF
这10分钟后超时。
我与内存的20Gb 16核心3GHz的AWS节点上。
有什么,我可能做错了,无论是我的配置,或者与上述查询?
如果它有可能这么长时间?
为了让角度来看,在MySQL中相当于查询会是这个样子
SELECT COUNT(*),目录从URL中GROUP BY目录;
我还没有尝试过,但我怀疑,在MySQL从上述查询超过90万条记录的结果集将需要几秒钟。 我没有意思了Riak,因为我知道他们是非常不同的比较MySQL,但是我想知道我怎么能在最起码,在执行在10分钟以上查询。
谢谢!