Теорема Brewers CAP - лучший источник, чтобы понять, какие варианты доступны для вас. Я могу сказать, что все зависит, но если мы говорим о Mongo, то он обеспечивает горизонтальную масштабируемость из коробки, и это всегда приятно в некоторых ситуациях.
Теперь о последовательности. На самом деле у вас есть три варианта обновления ваших данных:
1) Первое, что нужно рассмотреть, это «безопасный» режим или «getLastError ()», как указано Андреасом. Если вы выполняете «безопасную» запись, вы знаете, что база данных получила вставку и применила запись. Однако MongoDB сбрасывается на диск только каждые 60 секунд, поэтому сервер может выйти из строя без данных на диске.
2) Второе, что нужно рассмотреть, это «ведение журнала» (v1.8 +). При включенном ведении журнала данные отправляются в журнал каждые 100 мс. Таким образом, у вас есть меньшее время до сбоя. Драйверы имеют опцию «fsync» (проверьте это имя), которая идет на один шаг дальше, чем «безопасная», она ожидает подтверждения того, что данные были сброшены на диск (то есть файл журнала). Однако это касается только одного сервера. Что произойдет, если жесткий диск на сервере просто умрет? Ну, вам нужен второй экземпляр.
3) Третье, что нужно учитывать, это репликация Драйверы поддерживают параметр «W», который говорит «реплицируйте эти данные на N узлов» перед возвратом. Если запись не достигает «N» узлов до истечения определенного времени ожидания, запись завершается неудачно (генерируется исключение). Однако вам необходимо правильно настроить букву «W» в зависимости от количества узлов в вашем наборе реплик. Опять же, поскольку жесткий диск может выйти из строя, даже при ведении журнала, вы захотите посмотреть на репликацию. Затем происходит репликация в центрах обработки данных, которая слишком длинна, чтобы попасть сюда. Последнее, что нужно учитывать, это ваше требование «откатиться». Насколько я понимаю, MongoDB не обладает такой способностью «отката». Если вы делаете пакетную вставку, лучшее, что вы получите, это указание на то, какие элементы потерпели неудачу.
Во всяком случае, существует множество сценариев, когда согласованность данных становится обязанностью разработчика, и вы должны быть осторожны и включать все сценарии и корректировать схему БД, потому что нет «Это правильный способ сделать это» в Монго, как мы привыкли в RDB-ы.
О памяти - это вопрос производительности, MongoDB хранит индексы и «рабочий набор» в оперативной памяти. Ограничивая вашу оперативную память, вы ограничиваете свой рабочий набор. На самом деле вы можете иметь SSD и меньший объем оперативной памяти, а не огромное количество RAM и HDD - по крайней мере, это официальные рекомендации. В любом случае, этот вопрос индивидуален, вы должны выполнить тесты производительности для ваших конкретных случаев использования