В какой степени критика "потерянных данных" по-прежнему действительна для MongoDB? Я имею в виду следующее:
1. MongoDB по умолчанию записывает небезопасные способы, чтобы выигрышные тесты
Если вы не выдаете getLastError(), MongoDB не ждет каких-либо подтверждение из базы данных, что команда была обработана. Это вводит по крайней мере два класса проблем:
- В параллельной среде (пулы подключений и т.д.) вы можете иметь последующее прочтение после завершения записи "закончено"; нет барьера, чтобы знать, в какой момент база данных распознает обязательство по записи
- Любое неизвестное количество операций сохранения может быть сброшено на пол из-за очередей в разных местах, вещи, выдающиеся в TCP буфера и т.д., когда ваше соединение падает на db, должно быть KILL'd или segfault, аппаратный сбой, вы называете его
2. MongoDB может потерять данные многими поразительными способами
Вот список способов, с которыми мы лично сталкивались, записи отсутствуют:
- Они просто исчезали иногда. Причина неизвестна.
- Восстановление поврежденной базы данных не было успешным, pre transaction log.
- У репликации между мастером и подчиненным были пробелы в записях, заставляя рабов отсутствовать записи, которыми обладал мастер. Да, нет контрольной суммы, и да, статус репликации имел slaves current
- Репликация останавливается иногда, без ошибок. монитор ваш статус репликации!
... [другие критические замечания]
Если все еще верны, эти критические замечания будут в некоторой степени беспокоить. В статье упоминаются только версии v1.6 и v1.8, но с тех пор v2 был выпущен. Являются ли недостатки, обсуждаемые в статье, еще актуальными на момент выпуска?