2016-12-15 18 views
1

下のクラウドクエリーについていくつかのアドバイスを提供できるかどうかは疑問でした。現在、5万ドキュメントのDBに対して20秒以上実行しています。これ以上のスピードを得ることができると考えられます。クラウドクエリーのスピードアップ

クエリの目的は、特定の値に特定のIDの他のリストを加えた属性「searchCode」を持つすべてのドキュメントを見つけることです。

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が一致ドキュメントを検索ドキュメントを検索クエリのために別々の呼び出しをやってみてください

    idsのリスト

最初に達成することができますfindコールなどのようなクエリでD:

keysパラメータとしてidのリストを渡し、データベースの _all_docsエンドポイントを打つことによって達成することができる

{ selector: {"searchCode": searchCode} } 
例えば

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

両方のリクエストを同時に実行して結果をマージすると、パフォーマンスが向上することがあります。

+0

ありがとうGlynn - 私は2つに分かれており、私はIDの呼び出しの部分を持っていると思われます - searchcodeによる問い合わせはすぐに戻りますが、IDの呼び出しはまだ15秒以上かかる - –

+0

こんにちはGlynn - 私は実際にあなたがGET/db/_all_docsを呼び出さなければならない私のモジュールの.listメソッドを使用することを提案していますが、これはうまくいきましたが、今度は、渡されたキーの数がクエリとしてパラメータ。ここにどんなアイデア?私はあなたが大量の鍵を提出するためにcouch_dbのPOSTでall_docsを取得できることを示唆している文書を見てきました。これはクラウドと同じですか? –

+0

私はこれを解決しました - 別々のクエリがはるかに効率的だったので、あなたはそれらを正しく実行してくれてありがとうございました。私は/ db/_all_docsに私の大規模なキーセットのために働いていた本体のキーを使ってPOSTingを提案したところで終わりました –

関連する問題