2011-12-15 2 views
0

MongoDB имеет настраиваемую долговечность: при выполнении операции обновления вы можете указать «проблему с записью», чтобы сообщить системе, что вы хотите, чтобы обновление считалось полным, когда данные (например) были сброшены на диск и реплицированы в X ведомых.Помогает ли MongoDB заботиться о прошлых письмах?

Есть ли какие-либо гарантии относительно не текущего обновления, а записи, которые ему предшествовали? Если я хочу обновить три документа, нужно ли мне отмечать дорогостоящую проблему с записью на всех из них или достаточно, чтобы выдать ее только с последней операцией?

Кроме того, связано ли это с использованием пулов соединений (т. Е. Трех обновлений, выполняемых по трем различным соединениям) и очертания (т. Е. Трех обновлений, затрагивающих более одного осколка)?

ответ

1

Если вы используете одно и то же соединение для нескольких операций записи, getLastError с j, безопасным флагом fsync, который возвращается успешно, укажет, что предыдущие операции до последней операции уже сохраняются/реплицируются на другие серверы.

Однако, если эти предыдущие операции не срабатывают по каким-либо причинам, вы не знаете об этом, если вы не вызываете getLastError для каждой операции. Однако, если ваши записи отправляются из разных соединений, нет гарантии, что все операции будут сохранены на диск/реплицированы на другие серверы.

+0

Используется ли этот первый абзац, если наложение на место? – Thilo

+0

Нет, это не – Nat

+0

getLastError() на mongos будет успешным, если все записи в кластере будут успешными - т. Е. GetLastError() будет блокироваться до тех пор, пока все осколки не будут удовлетворены проблемой записи. Первая ошибка будет возвращена, в противном случае. – brandon10gen

Смежные вопросы