2015-01-04 1 views
1

Так что у меня есть некоторый код node.js, в котором есть листы $ in и $ nin для mongodb.

Список «$ nin» на самом деле намного больше, чем список «$ in».

На «моя реализация» я сделал это «легкий путь», пропусканием оба идентификатора списки MongoDB:

query = { _id: { $in: in_list, $nin: not_in_list } }

Мой коллега затем пришел, и удалил все «$ NIN» идентификаторы из «$ в» списке, и только запрашиваются $ в

in_list = _.difference in_list, not_in_list query = { _id: { $in: in_list } }

Мое предположение было бы, MongoDB достаточно умны, чтобы справиться с этим быстрее более эффективно, чем node.js, но я на самом деле не знаю, это отличается на самом деле измерима и/или значительна.

Любой вход?

+2

Почему бы не проверить два подхода и сравнить производительность? – JohnnyHK

+0

Я в надежде, что кто-то с хорошим опытом бенчмаркинга может просветить нас хорошим методом для сравнения. На данный момент я просто буду работать как 1000x каждый из них и сравнить, но я подозреваю, что это не будет «правильный путь»! – kroe

+1

Что это в основном спустится, так это то, что лучше для хрустания чисел для вас. Отправка всех результатов по проводке для оптимизатора запросов, чтобы вывести разницу в списках или развить эту разницу в клиенте. Вероятно, это субъективно размер списков. Как насчет того, чтобы вы оценивали как ваши результаты, так и ваши ответы. Другие могут найти это полезным. Кстати, ваши комментарии откликаются на двух людей, которые, возможно, испытывают больше всего здесь. –

ответ

1

Да, $ в будет быстрее. Любой запрос должен сканировать каждый документ в наборе результатов, поэтому, если у вас есть меньшее количество элементов, необходимых для выполнения запроса $ в запросе, чем запрос $ nin, используйте это.

+1

Это не так, как это работает. Оптимизатор будет отменять списки аналогично предлагаемой клиентской операции. Единственный вопрос, который она испытывает, заключается в более дорогостоящем отправке всего этого по кабелю на сервер, чтобы сделать это, или чтобы разрешенный клиент с меньшим количеством ресурсов обработал код. Общее подозрение в том, что стоимость сети выше, чем медленная обработка клиента. Но это не «пересекает» два набора результатов, как вы предлагаете. –

+0

А, это интересно. Не знал, что оптимизатор сделал это, но это имеет смысл. Спасибо за совет. – jtmarmon

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

  • Нет связанных вопросов^_^