0

В теореме CAP компонент «P» (разделение) по существу утверждает, что система работает хорошо, несмотря на физические сетевые разделы.Понятие «P» в «CAP» с DDBMSes

Я думаю, что «C» (согласованность) и «A» (доступность) имеют для меня смысл в контексте DDBMS: при согласованности все клиенты должны иметь согласованное представление данных независимо от узла БД, которым они являются служил. При наличии доступности все клиенты должны иметь возможность получить ответ от узла базы данных для чтения/записи (т. Е. Все узлы никогда не опускаются одновременно).

Но по какой-то причине я задыхаюсь от элемента перегородки CAP и что это имеет значение, особенно в отношении DDBMS.

С распределенной базой данных вы по определению имеете несколько (кластерных) узлов. В зависимости от архитектуры сети, физических устройств и т. Д. У вас будут проблемы с производительностью при репликации или обмене (полу-соединения и т. Д.) Между узлами. Таким образом, «P» в CAP - это просто способ ускорения работы в DDBMS; производительность, которая в противном случае была бы затруднена без P-гарантии?

Также как «P» относится к одной узловой (некластеризованной) БД? Я чувствую, что в этом контексте он совершенно неактуальен. Заранее спасибо!

+2

CAP - теорема о * распределенных * системах. По определению одноузловая база данных не является распределенной системой. – APC

+0

Спасибо @APC (+1) - Я не знал, что CAP ограничивается распределенными системами. Однако это только вторит моему второму, менее важному вспомогательному вопросу. Главный вопрос здесь: ** что действительно означает P *? ** – IAmYourFaja

ответ

5

Теорема CAP гласит, что в распределенной системе вы не можете имеют универсальную правильность, доступность и допустимость разделов во время сбоев. Правильность означает, что данные, считанные с любого узла, не имеют противоречивых значений в любом другом узле. Доступность означает, что все здоровые узлы могут использоваться клиентами. Толерантность раздела означает, что система может быть разделена на подмножества, которые не могут взаимодействовать друг с другом и все еще функционируют.

Скажем, у вас есть 3 машины. Один из них не может связаться с другими, или, другими словами, кластер разделен на 2 раздела. Если система может обрабатывать этот сценарий, то он является толерантным к разделам. Тем не менее, вы должны либо отказаться от полной корректности, либо полной доступности:

Правильность удаления: все узлы остаются в силе, но разделенный узел и остальные узлы кластера могут содержать конфликтующие данные, иногда называемые разделенными мозгами.

Доступность: Один из разделов выходит в автономный режим. Это защищает целостность данных, поскольку любое успешное чтение не будет иметь конфликтное значение где-либо еще.

С точки зрения системы баз данных, это означает, что у вас должны быть разные стратегии для устранения сбоя. База данных, которая не может обрабатывать сбои раздела, означает, что если какой-либо узел опускается, поведение не определено. База данных, которая жертвует правильностью во время сбоев, заставит приложение решать проблемы согласованности при устранении отказа, но больше узлов может оставаться доступным. База данных, которая отказывается от доступности, позволит логике приложения предположить, что данные всегда согласованы, но некоторые другие здоровые узлы будут недоступны во время сбоя.

0

Мое понимание CAP заключается в том, что вы не можете надежно иметь все три желаемые атрибуты все время и должны выбирать свои приоритеты. Я согласен, что использовать эту терминологию нелегко, но эта статья от самого Эрика Брюера неплохо объясняет это. http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

Чтобы ответить на ваш вопрос напрямую, если вы решите разделить данные, то на каком-то уровне вам нужно будет согласовать согласованность или доступность. Если вы разделите данные между A и B и потеряете соединение друг с другом, то либо вы блокируете обновления (-availibity), либо обновляете их независимо (-consistency)