У меня есть вопрос о том, какова лучшая стратегия обновления определенного поля каждого элемента в коллекции mongodb? У меня в коллекции около 3 миллионов предметов, и вся БД находится на одной машине и НЕТ шардинга.
Очевидно, что можно получить курсор для коллекции и пройтись по каждому элементу и обновить желаемое поле одно за другим, но это не кажется эффективным. Это еще сложнее сделать, когда вы хотите выполнить обновление на нескольких машинах, чтобы ускорить процесс, и у вас всегда есть задача обновить те же самые элементы снова. Я должен отметить, что для каждого обновления базы данных моей базы данных требуется HTTP-вызов в Интернет, и если я могу одновременно выполнять несколько обновлений полей, это более эффективно.
Как мне сделать такую вещь?
Я использую драйвер C #.
Примечание:
Я не хочу обновлять все поля своих товаров одним конкретным значением. В моем сценарии каждый мой элемент получает различное значение для требуемого поля, и новое значение рассчитывается исключительно для этого элемента. Другими словами, мне, вероятно, все еще нужно получить каждый элемент и использовать мою логику для обновления до нового значения.
Мне интересно, как я могу сделать это одновременно, чтобы я мог применить логику одновременно ко многим элементам, не обновляя элемент дважды?
Я хочу иметь возможность сделать это из одного процесса в нескольких потоках или из другого процесса на нескольких машинах? Это очень напоминает процесс карты в map-Reduce, где map-key - это идентификатор объекта, а map-value - элемент обновления, а преобразователь - это преобразователь идентификаторов, но я не уверен, подходит ли карта / уменьшение MongoDb для такая вещь.