2016-12-15 98 views
1

我想知道是否有人可以在我的云查询下面提供一些建议。现在花费20秒钟时间处理50,000文件的数据库 - 我怀疑我的速度可能会比这更快。加快我的云查询

查询的目的是找到所有具有等于特定值的属性“searchCode”的文档以及特定ID的进一步列表。

searchCode和_id都被索引 - 为什么我的查询需要这么长时间/我能做些什么来加速它?

mydb.find({selector: {"$or":[{"searchCode": searchCode},{"_id":{"$in":idList}}]}}, function (err, result) { 
    if(!err){ 
     fulfill(result.docs); 
    } 
    else{ 
     console.error(err); 
    } 
}); 

谢谢, 詹姆斯

回答

1

你可以尝试做不同的呼吁查询

  • 找到我的文档,其中searchCode =“某个值”
  • 找到我的文档,其ID匹配ID列表

第一个可以实现d用find呼叫和像这样的查询:

{ selector: {"searchCode": searchCode} } 

第二可以通过敲击数据库的_all_docs端点,在ID的列表传递作为参数keys来实现例如

GET /db/_all_docs?keys=["a","b","c"] 

您可能会发现,当并行运行这两个请求和合并的结果,给你更好的性能。

+0

感谢Glynn - 我已经分开了两个,它似乎我遇到的问题是ID调用的一部分 - 通过搜索代码的查询几乎立即返回,但ID调用仍然需要超过15秒 - 进一步调查此进一步 –

+0

嗨格林 - 我实际上得到了这个工作,因为你建议使用我的模块.list方法,它必须调用GET/db/_all_docs但是我现在有一个问题,即传入的键数量超过了作为查询的限制参数。这里的任何想法?我见过文档建议你可以用couch_db上的POST检索all_docs来提交大量密钥 - 这与cloudant中的相同吗? –

+0

我解决了这个问题 - 感谢您正确运行它们,因为单独的查询效率更高。我最终确定了使用主体中的键为/ db/_all_docs提供POST的建议,这些键适用于我的大量键 –