я обычно получу лучшую производительность, если я буду запускать цикл обновления / калькуляции через JavaScript? - PullRequest
0 голосов
/ 04 января 2012

У меня есть скрипт, который перебирает набор записей, выполняет некоторые статистические вычисления и обновляет записи. Это большой курсор: получить запись, рассчитать статистику из встроенных документов, установить поля в записи, сохранить запись. Зацикливается <5 тыс. Записей, каждая из которых содержит 90 записей истории. </p>

Вопрос: получу ли я значительно лучшую производительность, если бы сделал это через javascript? Альтернативой является написание на Ruby. Мое мнение (необоснованное) заключается в том, что, поскольку это можно сделать полностью в базе данных, я получу лучшую производительность, если отправлю кусок js в Mongodb вместо добавления Ruby в микшер.

Связанный: подходит ли map / lower для нахождения медианы и режима набора значений для многих записей?

1 Ответ

1 голос
/ 04 января 2012

Ответ на самом деле «зависит» - если поля, которые вам нужны для вычислений, очень большие, выполнение вычислений на стороне сервера с JS может быть намного быстрее, просто сокращая сетевой трафик.

Но выполнение JS на стороне сервера также удерживает блокировку записи, поэтому в зависимости от сложности вычислений может оказаться более эффективным просто выполнить вычисления на стороне клиента и затем просто обновить документ.

Лучше всего сделать простой тест с использованием Ruby и JS на стороне сервера. Если вам необходимо одновременно обслуживать другой трафик базы данных, это также следует учитывать, поскольку ваш% блокировки может отличаться в двух сценариях (вы можете отслеживать это с помощью mongostat).

Кроме того, имейте в виду, что использование db.eval не будет работать с шардингом, поэтому избегайте его, если вы используете защищенную среду или планируете это в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...