Я никогда не понимал, почему документация Mongoose так широко рекомендует отключать autoIndex
в производстве. После добавления индекса последующие вызовы ensureIndex
будут просто видеть, что индекс уже существует и затем возвращается. Таким образом, это влияет только на производительность при первом создании индекса, и в то время коллекции часто пустые, поэтому создание индекса в любом случае будет быстрым.
Мое предложение оставить autoIndex
если у вас нет конкретной ситуации, когда это создает проблемы; например, если вы хотите добавить новый индекс в существующую коллекцию, в которой есть миллионы документов, и вам нужно больше контролировать, когда она создана.
Операции.watch каким-то образом предотвращают это?
blockquote>ДА. После просмотра ключа, если ключ был изменен до завершения транзакции,
EXEC
не будет выполнен. Таким образом, еслиEXEC
успешно, значение гарантированно не изменится другими.почему для (;;)? Всегда есть одна итерация.
blockquote>В вашем случае кажется, что бесконечный цикл избыточен.
Однако, если вы хотите реализовать операцию проверки и установки для изменения значения со старым значением, необходим бесконечный цикл. Посмотрите этот пример из redis doc :
WATCH mykey val = GET mykey val = val + 1 MULTI SET mykey $val EXEC
Поскольку
EXEC
может завершиться неудачей, вам нужно повторить весь процесс в цикле, пока он не завершится успешно.
Q: Операции. Часы каким-то образом предотвращают это?
ДА.
Цитирование из документации Redis о транзакции :
WATCH используется для обеспечения поведения проверки и установки (CAS) для транзакций Redis.
Наблюдаемые ключи отслеживаются, чтобы обнаружить изменения против них. Если хотя бы один отслеживаемый ключ был изменен перед командой EXEC, вся транзакция прерывается, и EXEC возвращает нулевой ответ, чтобы уведомить, что транзакция не удалась.
blockquote>Вы можете узнать больше о транзакции Redis из этой документации.
В: зачем (;;)? Всегда есть одна итерация.
Кажется, код, который вы разместили, очень старый. Из кеша Google этого URL я увидел предоставленный вами код, датированный
Oct 15th, 2012
!Последние коды выглядят очень по-разному:
- [ 113] метод compareAndSet
- класс CompareAndSet