我有一个包含大约 900,000 条记录的存储桶。这些记录中的大多数在二级索引中的状态为 PERSISTED。我想检索所有标记为 PERSISTED 的文档的所有 base_url 以及属于每个 base_url 的文档数。
这是查询:
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(*), catalog FROM urls GROUP BY catalog;
我还没有尝试过,但我怀疑在 MySQL 中,来自上述查询的超过 900,000 条记录的结果集需要几秒钟。我不想将 Riak 与 MySQL 进行比较,因为我意识到它们非常不同,但我想知道我至少如何在 10 分钟内执行上述查询。
谢谢!