Игорь
Ну это пока тесты разрабатываемого ПО
Игорь
а не продакшн
yopp
может им и монга то не нужна?
Ещё немного и у нас появится правило, что за такие вот советы, советчики будут уходить в ро на некоторое время
Старый
Ещё немного и у нас появится правило, что за такие вот советы, советчики будут уходить в ро на некоторое время
ну монга не замена реляционным субд, а многие кодеры её реально суют куда попало
yopp
Ну это пока тесты разрабатываемого ПО
Симптоматика не очень ясна в итоге. У вас какие-то проблемы с производительностью. Вы считаете что причиной этой проблемы является нехватка памяти?
yopp
Виртуальная машина или контейнер?
yopp
Какие средства анализа производительности вы использовали? Что получили?
Игорь
Собственно да. Я прогоняю скрипт, он делает сложною выбору из коллекции, скрипт завершается штатным или не штатным образом. Смотрю мониториг потребляемой оперативы процессами. После каждого запуска скрипта монго отъедает большой кусок. И это происходит при каждом запуске скрипта. Естественно при определенном пороге система начинает тормозить и приходиться ребутать монго и освобожать оперативку. Я не понять почему происходит такое дублирование данных в оперативной памяти. По моим скромным предположениям, я думал что максимум потребляемых ресурсов оперативки при частых обращениях к одной и той же коллекции будет размер самой коллекции+ размер индексов. Что в итоге будет порядка примерно 950-1000 мб
Nick
а своп включен?
Nick
и насколько он заполнен?
yopp
Собственно да. Я прогоняю скрипт, он делает сложною выбору из коллекции, скрипт завершается штатным или не штатным образом. Смотрю мониториг потребляемой оперативы процессами. После каждого запуска скрипта монго отъедает большой кусок. И это происходит при каждом запуске скрипта. Естественно при определенном пороге система начинает тормозить и приходиться ребутать монго и освобожать оперативку. Я не понять почему происходит такое дублирование данных в оперативной памяти. По моим скромным предположениям, я думал что максимум потребляемых ресурсов оперативки при частых обращениях к одной и той же коллекции будет размер самой коллекции+ размер индексов. Что в итоге будет порядка примерно 950-1000 мб
Ваш расчёт верен только с позиции объема данных для обработки и не учитывает память необходимую непосредственно для обработки. Простой пример сортировка не по индексу. На неё потребуется как минимум столько же памяти, сколько есть данных
yopp
Точнее не как минимум, а примерно до
yopp
И если у вас несколько таких параллельных запросов — легко может быть так, что монга выделяет большебпамчти чем вы рассчитывали
p
всем привет, подскажите, пожалуйста, можно ли для каждого документа, который вернется из запроса создать документ в другой коллекции db.MyCollection.find({})
yopp
Встроенными средствами можно через map/reduce с output в нужную коллекцию. Но это плохой способ
p
почему плохой?
yopp
Ещё можно через Aggregation Framework, но там коллекция указанная в output будет очищаться перед добавлением данных
yopp
почему плохой?
Map/Reduce в монге очень непредсказуем
p
я хочу все скриптом сделать, чтобы потом в windows выполнить
p
это реализуемо в принципе? или лучше сразу mongoose под node?
yopp
Вы можете это через mongodump сделать
yopp
Там есть возможность указать критерии для запроса
p
те команды для админства больше предназанчены?
p
я монгус использую, но решил mongo чистый поробовать
p
раньше только права настривал
yopp
Это одноразовая задача?
p
да
yopp
Тогда лучше сделать с помощью mongodump/mongorestore. Они кажется доступны на все тех платформах, на которых доступна сама монга.
p
понял. спасибо большое!
Игорь
в общем ограничил объем памяти для текущего процесса монго. Гоняю этот запрос. Перые разы, пока пямять не забъеться выделенная, запрос летает. Потом начинает тупить. То есть ситуация такая, что при запросе каждый раз он создает в памяти копию данных одинаковую, до тех пор пока оперативка не конциться, потом начинает тупить сама база. То есть можно ли после выполнения запроса задать, что бы он не хранил результат в кэше? Пототму, что таких сложных запросов будет много потом в долгом цикле. При таком раскладе он любое количество опретивы съест и не подавиться, а потом начнеться тот же тупняк
Игорь
В общем нашел откуда ноги растут у проблемы. Когда программа запрашивает данные, создается клиентский курсор. Если все данные, возвращенные курсором не были считаны до конца, то они повисают в базе. То есть если программа завершилась не штатным образом, из-за этого курсор "висит" в базе со всеми результатами запроса
yopp
Отлично :) Курсоры без maxTimeMS — очень плохая практика.
yopp
Странно что нет возможности задать глобальный тайм-аут для курсоров. Такие ситуации очень часто встречаются когда люди имеют прямой доступ в монгу. Человек кидает find({}).sort(a: -1) на коллекцию в терабайт, не получает ответа за пару минут, выходит из шелла
yopp
Но курсор остаётся висеть. Хуже всего если человек настойчивый и повторяет эту операцию несколько раз
Ilya
вроде у питоновского пакета pymongo по умолчани 10000 равняется этот параметр
Ilya
в других коннекторах я думаю тоже есть такие дефолтные значения?
Dmitry
привет, нужен совет по схеме, юзер модели допустим, нужно создать ещё юзера, у которых не будет телефона, а вместо него будет уникальный username, что делать при такой схеме? создавать новую, типа AnotherUserSchema? https://gist.github.com/DmitryGG/481e8fee84bffab71f5683bbbd88f87f зы: в доках этого нет :D
yopp
Нет стандарта, по-умолчанию значение не задаётся.
yopp
еще было б здорово, при выходи из шела кидать cancelation для запроса, интересно почему сразу такое не сделали
Шелл вообще мог бы показывать где-то открытые курсоры и призакрытии мог бы спрашивать что с ними делать. Но тут ещё такой момент: kill cursor не факт что сработает :)
yopp
это мне?
Нет. Это про maxTimeMS
Игорь
Я искренне наивно полагал, что курсор умирает при разрыве соединения в течении какого-то адекватного срока. А тут безлимит из коробки
Nick
да тоже так думали, а потом ручками киляли
Игорь
И я правильно понимаю, что глобально задать это никак не вариант? Только для каждого конкретного курсора?
Nick
да
Nick
но ваш драйвер может поддерживать, стоит порыться в доках
Игорь
только что смотрел, собстенно поведения драйвера здесь копирует полностью поведение монго
Hopf
Всем привет, посоветуйте mongodb хостинг для личных проектов (бесплатный) https://www.mongodb.com/cloud/ подойдет или есть более подходящие варианты? Если да, то почему?
Hopf
Что нашел mlab.com mongodb.com остальные хотят денег
yopp
Логично хотят, потому что хранение данных стоит денег.
yopp
Если вас устраивает родной mongo cloud, берите его
yopp
а так, сейчас виртуалки стоят смешных денег, собрать себе тестовый стол для личных нужд можно по цене двух бокалов среднего пива в месяц
Hopf
а так, сейчас виртуалки стоят смешных денег, собрать себе тестовый стол для личных нужд можно по цене двух бокалов среднего пива в месяц
Да, я в курсе. Просто хочу сделать сервис на raspberry pi, и не хочу морочиться с использованием своего инстанса монги локально или на своих виртуальных серверах. Ведь их придётся обновлять, Бекапить, следить за безопасностью. Остановился на mongo cloud. Спасибо
Мечтатель
,, заработает...
SvPupok
заработает, но так то монга вообще очень прожорлива к памяти.
Мечтатель
Только до поры до времени пока запросов мало и они нетяжелые
Мечтатель
Когда памяти мало то она просто в один момент может перестать работать. И это реально будет неожидано
SvPupok
заодно пока данных мало, пока индексов немного
Мечтатель
Ого. А можно пример с логами? Чтобы я был подготовлен.
Они остались на работе на прошлой. Но факт в том, что в логах ничего необычного нет!
Мечтатель
Правда морга была 3.2
Мечтатель
Монга*
yopp
Вы слишком много внимания памяти уделяете. На RPi монга заведётся, но производительность будет ограничена со всех сторон. Например там всего одна usb шина, на которой в том числе и Ethernet контроллер висит. Так что туда в принципе данных много не залить. Ну и все это на 32х битный ARM процессоре, которому уже десятый год. Если это не RPi3.
Hopf
>Если это не RPi3. это рпи3 В домашних проектах(моих) особой производительности не будет.
Hopf
Но спасибо за комментарий
Мечтатель
Самое главное саму БД выносить на внешний носитель
yopp
Смысла это не имеет
Мечтатель
Hopf
Меньше всего хотел я разжигать ненужный холивар
Мечтатель
Я бы для таких целей заюзал бы sqlite. А к нему прикрутил бы либу питоновскую dataset
Мечтатель
А какой смысл если я монгу и го хочу поизучать?
Если это с целью изучения, тогда забудь что я писал)