2016-12-15 3 views
1

Мне было интересно, может ли кто-нибудь дать мне совет по моему туманному запросу ниже. Теперь он занимает более 20 секунд, чтобы выполнить против БД 50 000 документов - я подозреваю, что могу получить более высокую скорость, чем это.Ускорение моего облачного запроса

Цель запроса состоит в том, чтобы найти все мои документы с атрибутом «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 = «некоторое значение»
  • найти мне документы, которые Идентификаторы матч список идентификаторов

Первый может быть достигнут д с find вызова и запрос следующим образом:

{ selector: {"searchCode": searchCode} } 

Второй может быть достигнуто за счет удара в базах данных _all_docs конечную точку игровая, проходя в списке идентификаторов в качестве параметра, например keys

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

Возможно, вы обнаружили, что одновременное выполнение обоих запросов параллельно и объединение результатов дает вам лучшую производительность.

+0

Thanks Glynn - я отделил два, и проблема в том, что у меня есть проблема с идентификационной частью вызова - запрос по поисковому запросу возвращается почти сразу, но идентификационный вызов все еще занимает более 15 секунд. –

+0

Привет, Glynn. Я действительно получил это для работы, поскольку вы предлагаете использовать мой метод .list, который должен вызывать GET/db/_all_docs, однако у меня теперь есть проблема, когда количество передаваемых ключей im превышает предел в качестве запроса параметр. Есть идеи? Я видел документацию, предлагающую вам получить all_docs с POST на couch_db, чтобы отправить большое количество ключей - это то же самое на cloudant? –

+0

Я решил это - спасибо, что вы правильно их запускали, поскольку отдельные запросы были намного эффективнее. Я в конечном итоге после моего предложения POSTing в/db/_all_docs с ключами в теле, которые работали для моего большого набора ключей –

Смежные вопросы