2016-07-25 9 views
3

Серверы MongoDB запрашиваются с несколькими правилами согласования . В mgo, SetMode объекта Session изменяет режим согласованности сеанса. Доступны три типа режимов консистенции: Eventual, Monotonic и Strong.Сравнение моделей согласованности, используемых в mgo

например.

session, err := mgo.Dial("localhost") 
if err != nil { 
    panic(err) 
} 
defer session.Close() 
//Switch the session to a monotonic behavior. 
session.SetMode(mgo.Monotonic, true) 

Я читал о различных моделях согласованности в https://en.wikipedia.org/wiki/Consistency_model

Но каковы отношения между этими тремя моделями, используемыми в mgo?

Верно ли, что Strong подразумевает Eventual и Eventual означает Monotonic?

Спасибо.

ответ

6

Эти три модели непротиворечивости, что MongoDB претендует на поддержку:

  • Сильная консистенция: Все доступы рассматриваются все параллельные процессы (или узлов, процессоров и т.д.) в том же порядке (последовательно).

  • монотонные гласит: Если процесс считывает значение элемента данных х, любая последующая операция чтения на й с помощью этого процесса всегда будет возвращать то же самое значение или более последнее значение.

  • Конечная консистенция: Если новые данные не внесены в данный элемент данных, в конечном итоге все обращения к этому элементу будут возвращать последнее обновленное значение.

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

Однако, глядя на настоящую систему, есть еще что-то еще.

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

В конечном режиме чтение выполняется из нескольких вторичных узлов одновременно. Это означает, что мы можем видеть обновления не в порядке, поскольку они достигают разных узлов. Записи выполняются против первичного, но, возможно, нескольких параллельных соединений. Это означает, что записи могут выходить из строя. Из документации не ясно, читаются ли первые записи, как первичные, так и в монотонном режиме, или если они продолжают обслуживаться второстепенными. The source code, однако, говорит нам, что чтение продолжает обслуживаться второстепенными.

// Switch over a Monotonic session to the master. 
if !slaveOk && s.consistency == Monotonic { 
    s.slaveOk = false 
} 

Таким образом, для ГГО v2, Strong предполагает монотонное подразумевает Eventual.

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

  • Нет связанных вопросов^_^