Установка правил согласованности монотонными для сеанса с официальным драйвером Mongo Go mongo-go-driver (session.SetMode в mgo) - PullRequest
0 голосов
/ 16 апреля 2019

Мы переключаемся на официальный драйвер, в отличие от устаревшего mgov2

В mgo мы устанавливаем режим сеанса как монотонный:

myMongoSession.SetMode(mgo.Monotonic, true)

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

Это важно для нас

Как бы я это сделал, используя официальный драйвер?Я не могу найти ссылку на это

1 Ответ

3 голосов
/ 17 апреля 2019

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

Да, но не всегда.Давайте посмотрим на код комментария для монотонного режима session.go # L73 :

// Monotonic mode is specific to mgo, and is same as SecondaryPreferred before first write. 
// Same as Primary after first write.
Monotonic Mode = 1

Согласно godoc.org / github.com / globalsign / mgo дляSetMode():

В режиме монотонной согласованности показания могут быть не совсем актуальными, но они всегда будут видеть историю изменений в будущем, считанные данные будут согласованными для последовательных запросовв том же сеансе, и изменения, внесенные в течение сеанса, будут наблюдаться в следующих запросах (чтение-запись-запись).

На практике монотонный режим получается путем выполнения начальных операций чтения по уникальному соединению с произвольнымвторичный, если он доступен, и после первой записи сеансовое соединение переключается на первичный сервер.Это позволяет распределить часть нагрузки чтения со вторичными серверами, сохраняя при этом некоторые полезные гарантии.

Для большинства случаев это верно, однако могут быть случаи, когда SecondaryPreferred может выбрать разные вторичные серверы, которые могут иметь разные оплоги раз.

Как бы я это сделал, используя официальный драйвер?

Монотонный режим - это термин, специфичный для mgo, и не существует для драйвера MongoDB Go .Это было заменено новыми функциями, такими как причинная согласованность и / или многодокументные транзакции .

mongo-go-driver более подробный, но также для обеспечения большего контроля над предпочтениями чтения , чтением и записью

Пример причинной согласованности:

opts := options.Client().ApplyURI(mongoURI).SetReadPreference(readpref.Secondary()).SetReadConcern(readconcern.Majority()).SetWriteConcern(writeconcern.New(writeconcern.WMajority()))
client, err := mongo.NewClient(opts)
if err != nil {
    panic(err)
}

Пример транзакций см. Транзакции в приложениях (выберите Go язык на вкладке)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...