2016-06-25 2 views
2

В документации MongoDB, here, было упомянуто, что в наборе реплик даже с большинством readConcern мы достигнем конечной согласованности. Мне интересно, как это возможно, когда у нас есть большинство в чтениях и письмах, что приводит к кворуму (R + W> N) в нашей распределенной системе? Я ожидаю сильной последовательной системы в этой ситуации. Это техника, которую использует Cassandra, чтобы добиться сильной согласованности.Как добиться сильной согласованности в наборах MongoDB Replica?

Может кто-нибудь прояснить это для меня, пожалуйста?

ответ

3

MongoDb не очень хорошо воспринимается с точки зрения сильной консистенции. Если у вас есть типичная осколочная и реплицированная настройка для повышения согласованности, вам нужно будет отменить некоторые из характеристик db. Как вы знаете, вы можете выполнять операции записи только на мастере набора реплик. По умолчанию вы можете читать только его. Это, возможно, самая сильная последовательность, которую вы можете получить от MongoDb AFAIK, поскольку другие узлы используются только для репликации, восстановления после сбоев и наличия. И вы можете читать из вторичных узлов только для операций, когда последние данные не имеют решающего значения и для длительных операций, например, для агрегирования.

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

+0

Вы говорите о производительности и масштабируемости при чтении и записи, которые можно обрабатывать с помощью sharding. Конечная согласованность имеет значение только в том случае, если вы хотите использовать вторичные узлы в наборе реплик для операций чтения. Мой вопрос в том, почему у нас нет сильной консистенции, хотя у нас есть quruom? –

+0

Кворум необходим только при выборе первичного. Он не может учитывать задержку сети/задержку, и первичная не обязана ждать, пока транзакция записи будет воспроизведена на всех вторичных операциях только ради согласованности. Представьте себе этот сценарий - наличие двух узлов на основе ssd для производительности и восстановления после сбоев и более дешевый hdd-узел для резервного копирования. Должен ли высокопроизводительный первичный узел ждать завершения операции над самым медленным элементом? –

+0

Мажоритарное голосование необходимо для первичных выборов. Кворум означает «Читатели + Писатели»> «Нет узлов». Это выражение верно, когда мы устанавливаем как readConcern, так и writeConcern в большинстве. Поэтому, когда мы читаем из большинства узлов, существует хотя бы один узел, который имеет самую последнюю запись, поэтому система сильно согласована. Я хочу знать, почему это выражение не верно в отношении MongoDB? –

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