yopp
при такой топологии в каждом регионе будет и праймари для локальный записей из своего «локального» шарда, реплика из шарда другого региона для локальных чтений
Ivan
А есть такая же картинка для двух ДЦ, но без шардов? И что будет, если интердц связь приляжет?
yopp
без шардорв это невозможно
yopp
это и есть два ДЦ
yopp
если линк приляжет то не будет только репликации
yopp
тут подразумевается что регионы в соседние никогда не пишут
yopp
т.е. local writes
Ivan
Получается, надо сказать приложению, что всё что тут обрабатываешь — пиши в шард А
Ivan
Спасибо, интересно
yopp
да. обычно при гео-шардирование ничего специального делать не надо, потому что приложение уже в нужном регионе
yopp
в 4.2 можно менять значение шард-ключа, там вообще можно развернуться по полной :)
Ivan
Сейчас у меня есть сет из мастера и двух слейвов, пока на 3.6 И я думаю, как жить, если попросят в двух дц находиться
yopp
в первую очередь понять что такое «находиться в двух дц»
Dmitrii
вот так?
yopp
не понимаю картинку
yopp
что значат красные стрелки?
Dmitrii
ну типа какой мастер в какой слэйв отправляет данные
yopp
нет, это неверно
yopp
каждый шард это просто реплика. реплики между собой полностью изолированны
yopp
на вашей картинке праймари из одной реплики почему-то указывает на секондари в другой, так не может быть
yopp
плюс у вас по две ноды, что тоже невозможно
yopp
так как не обеспечивается голосующий кворум
yopp
балансировка запросов между шардами это работа mongos
Daniil
@dd_bb мб подскажешь по поводу выбора cluster tier в атласе Есть продакшен-база (размер 0.051GB), число активных пользователей системы очень грубо сверху можно оценить в 10000, рост количества пользователей также грубо сверху x2 в год. Бизнес-логика в принципе не предполагает тяжелых запросов, довольно просто все. Я так понимаю, что из за размера базы монга все в памяти может держать вообще. Хватит ли на данный момент M10?
yopp
Кластер потом легко масштабируется одной кнопкой через rolling upgrade с минимальными проблемами
yopp
Возьмите m10, не будет хватать, нажмёте пару кнопок :)
Andrey
подскажите пожалуйста в чем может быть проблема? делаю следующие шаги - в документе $inc определенного поля - чтение поля данного документа шаги производятся в разных транзакциях, они последовательны (те дожидаюсь завершения первой), настройки транзакций стандартные (mongo-go-driver) .StartTransaction(), rs состоит из одной ноды проблема в том что рандомно второй шаг выводит необновленное значение поля
Dmitrii
когда делается inc в результате возвращается уже инкрментированное значение
Dmitrii
через findOneAndUpdate
Andrey
у меня по БЛ это общий метод поэтому нету возможности
Andrey
склоняюсь к тому, что неправильные настройки транзакций
Andrey
если чтение и изменение в разных транзакция, то так и должно быть
но ведь странно, я дождался окончания транзакции записи и только потом начал новую транзакцию с чтением
yopp
никто не гарантирует что транзакция будет мгновенно видна
yopp
вы хотите read your own writes
yopp
https://docs.mongodb.com/manual/core/read-isolation-consistency-recency/
yopp
вероятно вам нужен read concern linearizable
Max
Здравствуйте, кто может помочь с настройкой репликасета? Авторизация через SSL. После перевыпуска сертификатов сервера не могут между собой взаимодействовать - ошибка " SSL peer certificate validation failed: self signed certificate"
Max
Я не могу сказать как в монге, но в других системах нужно передать флаг, разрешающий self-signed сертификаты
allowInvalidCertificates: true - это поставлено везде где можно. Специалистов нет? это нужно срочно с хорошей оплатой
Aʟᴇx
allowInvalidCertificates: true - это поставлено везде где можно. Специалистов нет? это нужно срочно с хорошей оплатой
Нет, я вряд ли подскажу такое, так как никогда не пользовался SSL для авторизации
Max
Да
yopp
sslCAFile указан?
Max
Да, все работало хорошо пока сертификаты не закончились
Max
Да
Aʟᴇx
Тогда проблема решена?
yopp
Судя по описанию проблемы ключи уже перевыпущены
Aʟᴇx
А как поменялась процедура выпуска?
Max
По данной инструкции: https://habr.com/ru/post/308740/ . По ней предыдущий администратор делал.
Lana
Добрый вечер. Кто-нибудь знает как создавать миграции в монго? Гугл мне только подсовывает как апдейтить данные в базе(( Я изменила класс и теперь мне выдает Element 'HeatCapacity' does not match any field or property of class, а я понятия не имею, что делать.
Vova
как изменился класс? опишите
Lana
в монге нет миграций
хорошо, а есть какой-то флажок "разрешить менять модель"? Я просто убрала поле и хотела бы и дальше спокойно убирать/переименовывать поля менять их типы
Vova
просто выполните обновление с использованием оператора $unset и пустым фильтром, тогда поле будет убрано во всех документах
Dmitriy
в монге и схемы данных нет) предположу, что схему у вас ограничивает ваш ODM)
Vova
Или используйте оператор $set если нужно поменять тип со строки на число например, если имя поля не поменялось
Lana
большое спасибо за ответ, а как выполнить обноление? через код? или как-то через студию? 2) есть ли в монго аналог ForeignKey?
Yehor
добрый вечер с монгой работаю недавно, вопрос простейший есть таблица Тегов, где хранятся айдишник и имя тега поступает запрос с массивом тегов и нужно создать в таблице тегов те теги, которых там нет, а если есть соотвественно не составлять если можно, то напишите на ноде запрос?
yopp
ваш ODM вероятно поддерживает какие-то системы отношений, но со стороны монги гарантий целостности отношений нет. Если у вас монга 4.0+, вы можете эти гарантии самостятельно внутри транзакции реализовать
Lana
как вам удобно: запрос через драйвер, через шелл или через gui нет, FK нет.
спасибо! Т.е. никакого способа сделать так, чтоб монго перестраивало базу при изменении моделей (пусть и с возможной потерей данных) нет? только каждый раз руками?
yopp
так как в монге нет схемы, в ней нет никаких мезанизмов миграций
yopp
вы можете их самостоятельно реализовать
Dmitriy
либо какое-то внешнее решение
yopp
но я считаю что миграции в монге не нужны, а если и нужны то исключительно append only
yopp
т.е. вы никогда не удаляете и не изменяете старые поля, а только добавляете новые
yopp
когда размер документов станет реально проблемой, тогда мигрировать в новую коллекцию и там опять append only
Lana
т.е. вы никогда не удаляете и не изменяете старые поля, а только добавляете новые
для этого нужно иметь более высокий скилл, чем у меня сейчас)
yopp
ваш odm скорее всего имеет какую-то настройку, которая позволяет ему не бросать исключения когда встречаются неизвестные поля
yopp
для этого нужно иметь более высокий скилл, чем у меня сейчас)
абсолютно нет, просто не удаляйте поля из вашей модели :)
yopp
это самый главный плюс этой системы: она просто работает™ :)
Гена
Доброе утро подскажите пожалуйста в profiler'е запросы с показателем скорости выполенения - mills в это время входит суммарное время запроса, с учётом получения connection из пула, выполнения запроса и возврата результата. если нет, то возможно ли высчитать это время? спасибо
yopp
В профайлере указано время фактического выполнения запроса
Гена
Тогда еще вопрос сколько подключений может быть параллельно? На сколько я понял, maxPoolSize это параметр, который выставляет максимальное кол-во на параллельные запросы. Вот как тут описано https://stackoverflow.com/questions/47970249/mongodb-does-maxpoolsize-limit-applies-to-all-the-client-instances#comment82910520_47970394 Или я что-то не так понял?
Гена
то есть maxPoolSize наприме 300, стольок параллельных запросов может выпоняться но при это со стороны кластера это будет одно подключение, верно?