Подтвердить "серию" записей с 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 и более ранних версиях.

Другие вопросы по тегам