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