Где mongodb стоит в теореме CAP?
везде, куда я смотрю, я вижу, что MongoDB-это CP.
Но когда я копаю, я вижу, что это в конечном итоге последовательно.
Это CP, когда вы используете safe=true? Если да, то означает ли это, что когда я пишу с safe=true, все реплики будут обновлены до получения результата?
6 ответов:
MongoDB сильно согласован по умолчанию - если вы делаете запись, а затем выполняете чтение, предполагая, что запись была успешной, вы всегда сможете прочитать результат записи, которую вы только что прочитали. Это связано с тем, что MongoDB является системой с одним мастером, и все чтения по умолчанию переходят к основному. Если вы дополнительно включите чтение из второстепенных файлов, то MongoDB станет в конечном итоге согласованным, где можно прочитать устаревшие результаты.
MongoDB также получает высокую доступность через автоматический переход на другой ресурс в наборах реплик:http://www.mongodb.org/display/DOCS/Replica + наборы
Это должно помочь ответить на вопрос, наряду с другими NoSQL и другими постоянными системами хранения.
Я согласен с Luccas post. Вы не можете просто сказать, что MongoDB-это CP/AP / CA, потому что на самом деле это компромисс между C, A и P, в зависимости от конфигурации базы данных/драйвера и типа аварии: вот визуальный обзор, а ниже более подробное объяснение.
Scenario | Main Focus | Description ---------------------------|------------|------------------------------------ No partition | CA | The system is available | | and provides strong consistency ---------------------------|------------|------------------------------------ partition, | AP | Not synchronized writes majority connected | | from the old primary are ignored ---------------------------|------------|------------------------------------ partition, | CP | only read access is provided majority not connected | | to avoid separated and inconsistent systemsпоследовательность:
MongoDB сильно согласован при использовании одного соединения или правильного написать/Читать Уровень Заботы (что будет стоимость вам скорость выполнения). Как только вы не выполняете эти условия (особенно когда вы читаете из вторичной реплики), MongoDB становится в конечном итоге последовательным.
в наличии:
MongoDB получает высокую доступность через Реплика-Наборы. Как только первичный отключается или становится недоступным, то вторичные определят новый первичный, чтобы снова стать доступным. В этом есть недостаток: каждая запись, которая была выполнена старый первичный, но не синхронизированный с вторичными будет откат и сохраняется в rollback-файл, как только он снова подключается к набору(старый первичный теперь является вторичным). Поэтому в этом случае некоторая последовательность приносится в жертву ради доступности.
Раздел Терпимости:
благодаря использованию указанных наборов реплик MongoDB также достигает допуска разделов: пока более половины серверов набора реплик подключены друг к другу, новый первичный может быть выбран. Зачем? Для обеспечения двух разделенных сетей нельзя одновременно выбрать новую первичную. Когда недостаточно вторичных файлов подключены друг к другу, вы все равно можете читать из них (но согласованность не гарантируется), но не писать. Набор практически недоступен для обеспечения согласованности.
Как блестящая новая статья появился, а также некоторые удивительные эксперименты Кайл в этом поле вы должны быть осторожны при маркировке MongoDB и других баз данных, как C или A.
конечно, CAP помогает без лишних слов отслеживать, что в нем преобладает база данных, но люди часто забывают, что C в CAP означает атомарную согласованность (линеаризуемость), например. И это причинило мне много боли, чтобы понять, пытаясь классифицировать. Так, кроме того, MongoDB дает сильную согласованность, что не означает, что это C. Таким образом, если сделать эту классификацию, я рекомендовал также дать больше глубины в том, как это на самом деле работает, чтобы не оставлять сомнений.
Да, это CP при использовании
safe=true. Это просто означает, что данные попали на главный диск. Если вы хотите убедиться, что он также прибыл на некоторую реплику, посмотрите в параметр 'w=N', где N-количество реплик, на которых должны быть сохранены данные.посмотреть этой и этой для получения дополнительной информации.
Я не уверен насчет P для Монго. Представьте себе ситуацию:
- ваша реплика разделяется на два раздела.
- пишет продолжают обе стороны, как новые хозяева были избраны
- раздел разрешен - все серверы теперь подключены снова
- что происходит, так это то, что новый мастер выбирается-тот, который имеет самый высокий oplog, но данные от другого мастера возвращаются в общее состояние перед разделом, и он сбрасывается в файл для ручного управления восстановление
- все второстепенные догоняют нового мастера
проблема здесь в том, что размер файла дампа ограничен, и если у вас был раздел в течение длительного времени, вы можете потерять свои данные навсегда.
вы можете сказать, что это вряд ли произойдет - да, если только в облаке, где она более распространена, чем можно подумать.
вот почему я был бы очень осторожен, прежде чем назначать любую букву в любую базу данных. Там так много сценариев и реализации не идеальны.
Если кто-нибудь знает, если этот сценарий был рассмотрен в более поздних версиях Mongo, пожалуйста, прокомментируйте! (Я не следил за всем, что происходило в течение некоторого времени..)

Comments