Подтвердить "серию" записей с MongoDB
Использование Mongo 2.4.9 с драйвером C# 1.8.3
Со следующим примером:
WriteConcern concern = WriteConcern.Unacknowledged;
for(int i=0;i<100;i++){
if(i==99)concern=WriteConcern.Acknowledged;
collection.Update(Query.EQ("i",i),Update.Set("i2",i),concern);
}
// Can I assume that all writes in this loop have now been 'committed'?
Моя цель состоит в том, чтобы я выполнил первые 99 обновлений как можно быстрее, без подтверждения, а затем в последний раз запросил подтверждение, поэтому я знаю, что все 100 обновлений произошли
Имеет ли смысл приведенный выше код или работает? Если нет, есть ли лучший способ добиться этого?
В противном случае, я должен ждать выпуска MongoDB 2.6 и массового API?
Спасибо Бен
1 ответ
Моя цель состоит в том, чтобы я выполнил первые 99 обновлений как можно быстрее, без подтверждения, а затем в последний раз запросил подтверждение, поэтому я знаю, что все 100 обновлений произошли
Здесь есть логический недостаток: вы будете знать только успех последнего Acknowledged
обновление, и не может сделать много выводов на первых 99 Unacknowledged
Обновления помимо них не бросают явных сетевых исключений.
Имеет ли смысл приведенный выше код или работает? Если нет, есть ли лучший способ добиться этого?
В MongoDB 2.4 и ранее, если вы хотите Acknowledged
Обновления вам придется отправлять их индивидуально.
В противном случае, я должен ждать выпуска MongoDB 2.6 и массового API?
Для вашего случая использования новые API массовой записи определенно подойдут. Вы можете попробовать API BulkWrite с кандидатами на выпуск для драйвера C# 1.9 и MongoDB 2.6.
К вашему сведению, если вы хотите делать групповые вставки (а не массовые обновления), они уже поддерживаются в MongoDB 2.4 и более ранних версиях.