Алексей
конечно, монго просто работает с твоим диском, все изменения фиксируются там, при отключении докера папка не исчезает, значит при повторном запуске монга их подтянет и продолжит работу. В этом и смысл. А чего просто локально не установил монгу?)
Lonly
Больше спасибо за помощь
Ilya
Я делаю запрос к базе: запрашиваю документ, вместе с этим выполняю Populate (как Join в реляционных базах) к другой коллекции. C populate варианта 2: либо мне вернется документ (если найден), либо null (если не найден). Вопрос не столько к монге относится, сколько концептуальный (или даже архитектурный). Как обрабатывать случай, если populate возвращает null? Например, у меня HTTP GET запрос - запрос пользователя (users) по ID. В документе users есть поле role, по нему я выполняю populate. Возвратить пользователю я должен структуру с данными users, которая включает в себя так же и populated документ role. Но вот незадача - он null. Мне просто интересно, ведь в реляционных базах данных такое должно встречаться постоянно. Неужели разработчики каждый раз создают отдельную ошибку в таких случаях? Или как вообще это обрабатывается?
Алексей
ноу-сиквель БД ведь тем и хороши что все нужное можно хранить в одном месте, не размазывая по таблицам. Почему роль юзера не хранится с ним?
Ilya
я привел просто теоретический пример
Tetra
Я делаю запрос к базе: запрашиваю документ, вместе с этим выполняю Populate (как Join в реляционных базах) к другой коллекции. C populate варианта 2: либо мне вернется документ (если найден), либо null (если не найден). Вопрос не столько к монге относится, сколько концептуальный (или даже архитектурный). Как обрабатывать случай, если populate возвращает null? Например, у меня HTTP GET запрос - запрос пользователя (users) по ID. В документе users есть поле role, по нему я выполняю populate. Возвратить пользователю я должен структуру с данными users, которая включает в себя так же и populated документ role. Но вот незадача - он null. Мне просто интересно, ведь в реляционных базах данных такое должно встречаться постоянно. Неужели разработчики каждый раз создают отдельную ошибку в таких случаях? Или как вообще это обрабатывается?
и ошибки создаются отдельные на каждый чих и обрабатывается и игнорируется и предотвращается - чтото из этого комбинируется, чтото выкидывается, все зависит от вашего подхода и чисто проблема проектирвоания системы
Ilya
ну понятно, что я могу, скажем, создать класс UserRoleNotFoundError, специально заточенный под этот запрос неужели для всех случаев делать такие вот отдельные ошибки? и я не уверен, что фронту вообще о таком знать следует
Tetra
вот как раз интересовало, есть ли некий "общепринятый" подход к обработке таких случаев
общепринятого нет, есть только потребности на конкретном проекте
Нуриддин
Я делаю запрос к базе: запрашиваю документ, вместе с этим выполняю Populate (как Join в реляционных базах) к другой коллекции. C populate варианта 2: либо мне вернется документ (если найден), либо null (если не найден). Вопрос не столько к монге относится, сколько концептуальный (или даже архитектурный). Как обрабатывать случай, если populate возвращает null? Например, у меня HTTP GET запрос - запрос пользователя (users) по ID. В документе users есть поле role, по нему я выполняю populate. Возвратить пользователю я должен структуру с данными users, которая включает в себя так же и populated документ role. Но вот незадача - он null. Мне просто интересно, ведь в реляционных базах данных такое должно встречаться постоянно. Неужели разработчики каждый раз создают отдельную ошибку в таких случаях? Или как вообще это обрабатывается?
Лучше вообще не смотреть на nosql как на реалиционную
Нуриддин
К примеру nginx
Tetra
+ это можно выводить и через другие структуры с мониторингом
если это надо то да, но мне например всегда достаточно мессаджа в логи самим прикладом и засорять контракт работы с веб частью сложно и дорого
Нуриддин
если это надо то да, но мне например всегда достаточно мессаджа в логи самим прикладом и засорять контракт работы с веб частью сложно и дорого
Это да, но когда есть условие о дальнейшем сотрудничестве и предоставлении услуг, лучше всем сразу всё сделать так чтобы и * нащёл всё что надо
Андрей
Привет всем Возникла проблема: MongoDB не использует созданные индексы при сортировке Есть индекс count_-1, выполняю .sort({count: -1}), в результате запрос выполняется долго и в статистике использования индекса его кол-во не прибавляется В чём может быть дело?
Андрей
Дело скорее всего в том что в выборке это поле не используется
в фильтре (первый параметр)? да, не используется. получается, никак не ускорить сортировку?
Nick
в фильтре (первый параметр)? да, не используется. получается, никак не ускорить сортировку?
Составной индекс может помочь, но не факт если выборка широкая
Андрей
Составной индекс может помочь, но не факт если выборка широкая
не помог, к сожалению. но хотя бы используется. так и оставлю спасибо
Andrey K.
знает ли кто канал/чатик с вакансиями по Монго и/или иными nosql?
Алексей
hh
+1
Aisultan
Всем привет. Есть кто смог успешно подключиться к mongo db, который находится на yandex cloud, посредством odbc?
Alexander
Пытаюсь использовать оператор $ в проекции, чтобы вернуть подходящий элемент во вложенном массиве: https://mongoplayground.net/p/6CMYQC4phSi При этом возвращается весь элемент массива Services. Подскажите, как сделать, чтобы в нём был только тот элемент массива Prices, который подходит под условие (у которого Id равен 3)?
Нуриддин
Alexander
Если задача просто ограничить данные то и limit подойдёт
Не подойдёт. limit ограничивает количество возвращаемых документов. А мне нужно уменьшить размер самого документа, потому что в Prices на самом деле приличное количество элементов, которые не хочется гонять по сети. Поэтому, видимо, аггрегация 🤷‍♂
Нуриддин
Либо агрегируешь данные либо играешь с переменными в поиске, кстати это звучит возможно проще но не надёжнее
Nick
Всем привет. Подскажите пожалуйста можно ли настроить replica set из трех нод так, чтобы при падении двух из них можно было писать в последнюю, оставшуюся? Write concern я принудително выставил в w:1, а вот как перевести оставшуюся ноду из secondary в primary не нашел. Спасибо.
Nick
Нода осталась одна в secondary, изменить параметры кластера может только primary.
Nick
Нода осталась одна в secondary, изменить параметры кластера может только primary.
https://www.mongodb.com/docs/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
Nick
на всякий отмечу, что чтото могло потеряться, что было на праймари, поэтому желательно провести какую либо сверку на консистентность данных
Nick
Задача стоит такая: есть приложение и база монги, необходимо сделать отказоустойчивый кластер, разнесенный по трем цодам, и в случае отсутствия связи между цодами приложения и бд работали автономно.
Nick
Бд в 99% работают на чтение, запись полезных данных в момент аварии не производится.
Nick
Но если бд в ro режиме приложение не работает, так как пишет в бд сессии и логи
Nick
никакой магии, вы можете защититься только от потери (N-1)/2 нод, т.е. если у вас три ДЦ, то вы переживете только потерю одного из них
Принудительно не сделать чтобы каждая нода при отсутсвии двух других работала автономно, позволяла писать данные, а когда ноды снова видят друг друга, то данные перезатирались везде с мастера?
Nick
Принудительно не сделать чтобы каждая нода при отсутсвии двух других работала автономно, позволяла писать данные, а когда ноды снова видят друг друга, то данные перезатирались везде с мастера?
нет конечно, в этом вся суть кластера, что нужно большинство для фиксации изменений, да для чтения достоверной последней актуальной информации
Nick
Звучит как идеальной случай репликации
Специфика сервиса только отдавать данные :)
Nick
Не получится это приведёт к сплит браину
Это да, но он не страшен для сервиса, будет достаточно если с мастера данные перезальются после восстановления
Nick
Принудительно не сделать чтобы каждая нода при отсутсвии двух других работала автономно, позволяла писать данные, а когда ноды снова видят друг друга, то данные перезатирались везде с мастера?
но вы можете сделать все это в коде в своем приложении и самостоятельно решая проблемы возникающие изза потери связи. Т.е. использовать БД без выстраивания кластера, а как отедльные инсталляции. Но будьте готовы к тому что магии опять же не будет и CAP теорема не из воздуха появилась и пробелмы согласованности надо будет решать, правда тогда вы можете чтото улучшить под свою специфику
Nick
он страшен для состояния кластера, а не для вашего сервиса
Кластер в случае сплита как себя поведет, развалится?
Nick
Кластер в случае сплита как себя поведет, развалится?
да, перейдет в режим восстановления в зависимости от того сколько нод живо
Нуриддин
Есть вариант поиграть с ha proxy и настроить зеркальность сообщений и ниже редис чтобы данные кэшировались
Нуриддин
Однако это лишь одно из оптимальных но не надёжных решений
Nick
Есть вариант поиграть с ha proxy и настроить зеркальность сообщений и ниже редис чтобы данные кэшировались
Хотелось без лишних прослоек, надеялся, что можно принудительно разрешить писать в секондари, а потом мастер перезапишет
Нуриддин
Если нужен полностью отказаустойчивый кластер без доп инструментов не обойтись
Нуриддин
Даже если не критично это может плохо сказаться на остальных участках кода
Нуриддин
И уж тем более на имедж производителя
Nick
Да но ты смотри если запись не пройдёт к мастеру данные потеряются а это должно быть всегда на первом месте иначе вы нарушаете парадигмы бд
не вижу проблемы, если логика работы софта будет допускать это и будет реализован механизм восстановления нормальной работы
Nick
Даже если не критично это может плохо сказаться на остальных участках кода
Тут по сути пишутся только аксесс логи и токен доступа, эти данные не критичны вконтексте, главное, чтобы оставалась максимальная доступность и автономность.
Nick
Задача скорее репликации чем отказоустойчивости в классическом понимании
Нуриддин
очевидно что не нужен))
Тогда и код не нужен пусть люди сами пишут запросы в базу чтобы получить их просто раздадим дрова всем клиентам)))
Nick
Тогда и код не нужен пусть люди сами пишут запросы в базу чтобы получить их просто раздадим дрова всем клиентам)))
именно, разные пробелмы требуют разных решений и иногда и прямая работа с файликами напрямую лучше чем навороты со всем функционалом СУБД
Нуриддин
Тогда при ЧП ставьте новую бд и записывайте реплики по новой с первого мастера
Nick
Тогда при ЧП ставьте новую бд и записывайте реплики по новой с первого мастера
Вот примерно сюда придется смотреть, чтобы был быстрый способ переразвернуть или кластер или сингл ноду в отвалившемся цоде
Nick
Спасибо всем!
Нуриддин
Я не понял этот совет помог?
Нуриддин
Спасибо всем!
Когда найдете решение расскажите к каким итогам вы пришли, очень интересно
Nick
Я не понял этот совет помог?
Скорее подтвеодил мои опасения:)
Viktar
Если вы рассматриваете что больше половины нод могут быть недоступны, то может монга не ваш выбор. Посмотрите касандру
Nick
Если вы рассматриваете что больше половины нод могут быть недоступны, то может монга не ваш выбор. Посмотрите касандру
К сожалению выбора у меня нет, это коробочный продукт. А такой сценарий рассмативаю в смом крайнем случае. И тут не вопрос половины нод, ситуация, что если цод выпал, то системы в нем должны видеть отавшуюся в нем часть кластера, реплику.