Шынгыс
эта коллекция system.sessions из системной БД config
yopp
Да, скорее всего апдейт попал на момент создания чекпоинта, так бывает
Шынгыс
кейс такой: репликасет из 7 узлов (1 арбитр). в какой то момент выходит на праймери это сообщение (выше), и на всех вторичных узлах коннекты падают и в логах приложения выходит сообщение о таймауте к БД. Приложения читает только секондари узлы.
Шынгыс
вот ищу причину проблемы
yopp
Посмотрите что в логах на secondary, в момент когда происходит потеря связанности в кластере. Вероятно это проявление какой-то другой проблемы
Шынгыс
в логах секондари только это выходит: {"t":{"$date":"2022-07-13T09:57:10.967+06:00"},"s":"I", "c":"NETWORK", "id":22989, "ctx":"conn67","msg":"Error sending response to client. Ending connection from remote","attr":{"error":{"code":6,"codeName":"HostUnreachable","errmsg":"Connection reset by peer"},"remote":"ipadress","connectionId":67}}
Nick
Может в монге кто хорошо разбирается или в Spring MongoDB и может подсказать, как заставить ее не сохранить вот такие пустые массивы. Делать поле как null
вроде как над полем аннотациями поиграться когда его сохранять и в каком виде. Но какая вам разница как это хранится в бд если вы используете спрингдату? она же про то чтобы не лезть в слой бд и не заниматься низкоуровневыми телодвижениями
Шынгыс
может кто то сталкивался.
Nick
Вопрос такой, как оценить время, думаю шардировать коллекцию, условно 100 млн записей, сколько времени может занять?
сделать стенд, нагенерить данные по вашему виду хотя бы приближенно напоминающие те что будут в проде, накидать запросы какие будут в проде и все это дело запустить - на объемах в 100кк кроме как созданием тестового стенда получить адекватную оценку по времени не удастся
Шынгыс
Это сетевая проблема, так как host unreachable это ошибка от сетевого стека ОС. Вероятно у вас «мерцает» линк между нодами в кластере
тоже на это грешил. но сетевики и вмварщики посмотрели, никакой проблемы нет и потери по сети тоже не нашли(
Шынгыс
а проблема периодически выходит. не каждый день, но через день точно
Nick
тоже на это грешил. но сетевики и вмварщики посмотрели, никакой проблемы нет и потери по сети тоже не нашли(
"вмварщики"? напоминает мне случай полугодовой давности у друга, когда вмварщики тоже говорили ему что все ок и сеть стабильна, но после долгих разбирательств выяснилось что патчика не хватало и сеть мигала на очень долгих коннектах ( больше 2 часов)
yopp
вот как доказать им)))
Эта запись в логе однозначно указывает на сетевые проблемы :) Пусть смотрят на свои метрики в районе момента отказа. Если у вас ESXi, с сетевым блочным хранилищем, то там тоже могут быть сюрпризы, особенно если на одном физическом хосте больше одной ноды монги и явно не запровижены iops
Andrey
Да, скорее всего апдейт попал на момент создания чекпоинта, так бывает
а если так записей в логах много при апдейте документов, о чем может свидетельствовать?
yopp
а если так записей в логах много при апдейте документов, о чем может свидетельствовать?
О том что такие запросы попадают под порог временя выполнения который активирует профайлер :)
Nick
спасибо, так и думал, просто думал есть некая приближенная формула, исходя из размера документа и количества
очень сильно зависит от того как выстроите структуру данных и какие запросы будут, если сейчас нет понимания этого то можете называть любые цифры - реальность будет другая. Можете нагенерить хотя бы 1кк доков и посмотреть как ваше железо их обрабатывает, это будет немного ближе к реальности.
yopp
И да и нет. Если не брать низкие пороги, в духе 10мс со 100% профилированием. На стандартном пороге расходы незначительны
Abdulaziz
Привет, вот так получаю информацию про юзера в комменте, и отправляю только firstName, lastName и img, но внутри модели юзера есть поле hideAvatar и hideName, как можно сначала проверить эти поля, если они false получить имя если нет, то Hidden name
yopp
:) от 500 часов...мда...:)
Если у вас около террабайта данных, то несколько дней точно
yopp
Бóльшую роль играет размер и количество чанков. Самая узкая часть это процесс коммита при миграции чанка. Донору и реципиенту нужно согласовать момент когда чанк будет присвоен другому шарду в карте чанков. Особенно медленно это работает если чанк еще и меняется в процессе
yopp
Теоретически можно сначала порезать коллекцию на очень больше чанки, например по 128мб, а после завершения первичной балансировки уменьшить размер чанков. Балансировщик нарежет существующие на части, но так как на каждом из шардов чанков будет примерно одинаковое количество, то повторная балансировка будет уже не такой большой по объему
yopp
Если вам хочется быстро и вы можете остановить кластер или сделать его копию, то dump а потом restore с высоким уровнем параллелизмма и всеми mongos в seed листе, будет на порядки быстрее.
Anonymous
почему я могу создать юзера без аутентификации вручную, но при eval кидает ошибку uncaught exception: Error: couldn't add user: command createUser requires authentication
Сергей
Привет. А подскажите можно ли сделать поле _id авто-инкермент?
Alexander
или ты просто хочешь инт?
Alexander
можно, но как не подскажу - не пробовал
Alexander
так и загугли
Alexander
mongo autoincrement ind _id
Сергей
гуглил, уже потом сюда залес
Сергей
я не думаю что решение получать длину и писать +1 это корректное решение
Nick
Привет. А подскажите можно ли сделать поле _id авто-инкермент?
стандартными способами нельзя сделать, делайте в коде как вам угодно. В общем случае автоинкремент всегда не нужен и является привычкой из SQL мира и нужно от него отказываться и использовать нормальные идентификаторы
Nick
А то что в url странный хеш это норм?
а какая разница что в урле? вы же его руками вбивать не будете
Nick
более того если вы говорите про урлы, то автоинкрмент это сразу уязвимость с возможностью перебора сущностей
Сергей
🤔
Mark
Ребят, если мы какое-то поле пометим как индекс - это автоматически ко всем энтити в бд примениться? Миграцию например не надо делать? (не кидайте тапком плиз)
fierylife
Всем привет. Допустим, используя монго темлейт из спринга, мы используя агрегацию сгруппировали по некоторому значению и отсортировали. Теперь у меня гарантируется порядок внутри т.н. группы, а снаружи группы - нет. То есть сами группы не отсортированы. Как это исправить ?
Exception003
Доброго дня. Подскажите, пожалуйста, как использовать aggregate с lookup, если нужно использовать localfield из объекта типа ["1", "2"]?
Vadzim
Всем привет! Может кто подскажет как подключиться локально базе( mongo) внутри докер контейнера, не используя опцию network_mode: host?
Leksey
Всем привет! Может кто подскажет как подключиться локально базе( mongo) внутри докер контейнера, не используя опцию network_mode: host?
кем подключиться? зайти можешь таким способом простым $ docker exec -it MONGO_CONTAINER_ID mongo можешь настроить слушать mongodb по всем портам (mongod.conf bindIp 0.0.0.0) и далее сделать inspect контейнера и посмотреть какая сеть вариантов масса в целом
Vadzim
сейчас попробую
Vadzim
вроде слушает по всем ip, но подключится так и не смог
🅰️nimeCoder
а почему не хочешь шарить порт на хост машину
Vadzim
на хост машине есть база, а эта база она для проверки идёт
🅰️nimeCoder
на другой порт мапнуть?
Vadzim
на хост машине?
Adilet
на хост машине есть база, а эта база она для проверки идёт
Откуда не можете достучаться? Из другого контейнера докера? Или из хоста?
🅰️nimeCoder
ну ты же можешь любой порт контейнера направить на любой порт хоста
🅰️nimeCoder
т.е условно 27017 контейнера будет на хосте доступен на порту условно 65000
Adilet
Если из хоста и вы не прокинули порт, то вы никак не достучитесь. Если из другого контейнера, убедитесь, что вы находитесь в одной подсети с контейнером монги.
🅰️nimeCoder
Там просто порты же указываются черкз двоеточие где первый если не ошибаюсь порт хоста, а второй порт внутри контейнера
🅰️nimeCoder
Ну или наоборот, у меня просто ide даёт подсказки
🅰️nimeCoder
Нет
🅰️nimeCoder
Ты можешь сделать expose
🅰️nimeCoder
Любого порта контейнера на любой порт хост машины
Vadzim
кстати, да
🅰️nimeCoder
При этом на сам контейнер это никак не влияет, просто порт будет доступен из вне на каком либо порту хоста
Adilet
Если ты сейчас из одного контейнера в другой пытаешься стукнуться, то первое хочу понять, как эти отдельные контейнеры запущены, и второе, это как ты пытаешься стукнуться из одного к другому. Прям покажи кусок кода, строки где происходит подключение.
Adilet
У меня есть ощущение, что у тебя просто неправильно все залинковано, ситуация вполне тривиальная.
🅰️nimeCoder
он хочет бд с контейнера подключить условно в компасе с хост машины
🅰️nimeCoder
ну судя по сообщению https://t.me/mongodb_ru/113849
Vadzim
с опцией network_mode: host я просто обращался по ip докера(172.17.0.1) и всё работало
Vadzim
он хочет бд с контейнера подключить условно в компасе с хост машины
нет, это мне удалось. Я хочу подключиться в контейнере с веб-сервером к данной бд