@MongoDBRussian

Страница 216 из 342
yopp
02.04.2018
10:22:20
Либо разбирайтесь в запросах и пытайтесь их оптимизировать, либо давайте монге больше ресурсов

Либо сократите объём данных

Игорь
02.04.2018
10:25:16
так они нормально выполняються. Если я сделаю 500 одинаковых последовательных запросов по 500 мб мне же не нужно иметь 250 гигов оперативы? В базе одна коллекция на 850 мб сейчас и проходит один и тот же запрос с одними и теме же параметрами. Но монго каждый одинаковый результат запроса, после его выполнения и завершения скрипта продолжает держать в оперативе.

Google
yopp
02.04.2018
10:26:55
Да, на 850мб данных не надо 250 гигабайт. Но учитывайте что у вас там есть индексы, самой монге надо памяти и на выполнение ваших запросов тоже. Если у вас есть сортировки или сложные агрегации, их выполнение может требовать дополнительной памяти

Игорь
02.04.2018
10:28:21
Ну это пока тесты разрабатываемого ПО

а не продакшн

yopp
02.04.2018
10:30:01
может им и монга то не нужна?
Ещё немного и у нас появится правило, что за такие вот советы, советчики будут уходить в ро на некоторое время

Старый
02.04.2018
10:30:33
Ещё немного и у нас появится правило, что за такие вот советы, советчики будут уходить в ро на некоторое время
ну монга не замена реляционным субд, а многие кодеры её реально суют куда попало

yopp
02.04.2018
10:31:07
Ну это пока тесты разрабатываемого ПО
Симптоматика не очень ясна в итоге. У вас какие-то проблемы с производительностью. Вы считаете что причиной этой проблемы является нехватка памяти?

Виртуальная машина или контейнер?

Какие средства анализа производительности вы использовали? Что получили?

Игорь
02.04.2018
10:35:40
Собственно да. Я прогоняю скрипт, он делает сложною выбору из коллекции, скрипт завершается штатным или не штатным образом. Смотрю мониториг потребляемой оперативы процессами. После каждого запуска скрипта монго отъедает большой кусок. И это происходит при каждом запуске скрипта. Естественно при определенном пороге система начинает тормозить и приходиться ребутать монго и освобожать оперативку. Я не понять почему происходит такое дублирование данных в оперативной памяти. По моим скромным предположениям, я думал что максимум потребляемых ресурсов оперативки при частых обращениях к одной и той же коллекции будет размер самой коллекции+ размер индексов. Что в итоге будет порядка примерно 950-1000 мб

Nick
02.04.2018
10:36:49
а своп включен?

и насколько он заполнен?

yopp
02.04.2018
10:48:38
Собственно да. Я прогоняю скрипт, он делает сложною выбору из коллекции, скрипт завершается штатным или не штатным образом. Смотрю мониториг потребляемой оперативы процессами. После каждого запуска скрипта монго отъедает большой кусок. И это происходит при каждом запуске скрипта. Естественно при определенном пороге система начинает тормозить и приходиться ребутать монго и освобожать оперативку. Я не понять почему происходит такое дублирование данных в оперативной памяти. По моим скромным предположениям, я думал что максимум потребляемых ресурсов оперативки при частых обращениях к одной и той же коллекции будет размер самой коллекции+ размер индексов. Что в итоге будет порядка примерно 950-1000 мб
Ваш расчёт верен только с позиции объема данных для обработки и не учитывает память необходимую непосредственно для обработки. Простой пример сортировка не по индексу. На неё потребуется как минимум столько же памяти, сколько есть данных

Google
yopp
02.04.2018
10:49:24
Точнее не как минимум, а примерно до

И если у вас несколько таких параллельных запросов — легко может быть так, что монга выделяет большебпамчти чем вы рассчитывали

p
02.04.2018
10:52:32
всем привет, подскажите, пожалуйста, можно ли для каждого документа, который вернется из запроса создать документ в другой коллекции db.MyCollection.find({})

yopp
02.04.2018
10:53:36
Встроенными средствами можно через map/reduce с output в нужную коллекцию. Но это плохой способ

p
02.04.2018
10:53:46
почему плохой?

yopp
02.04.2018
10:54:19
Ещё можно через Aggregation Framework, но там коллекция указанная в output будет очищаться перед добавлением данных

почему плохой?
Map/Reduce в монге очень непредсказуем

p
02.04.2018
10:55:21
я хочу все скриптом сделать, чтобы потом в windows выполнить

это реализуемо в принципе? или лучше сразу mongoose под node?

yopp
02.04.2018
10:56:00
Вы можете это через mongodump сделать

Там есть возможность указать критерии для запроса

p
02.04.2018
10:56:25
те команды для админства больше предназанчены?

я монгус использую, но решил mongo чистый поробовать

раньше только права настривал

yopp
02.04.2018
10:58:16
Это одноразовая задача?

p
02.04.2018
11:03:53
да

yopp
02.04.2018
11:04:38
Тогда лучше сделать с помощью mongodump/mongorestore. Они кажется доступны на все тех платформах, на которых доступна сама монга.

p
02.04.2018
11:06:33
понял. спасибо большое!

Игорь
02.04.2018
11:40:09
в общем ограничил объем памяти для текущего процесса монго. Гоняю этот запрос. Перые разы, пока пямять не забъеться выделенная, запрос летает. Потом начинает тупить. То есть ситуация такая, что при запросе каждый раз он создает в памяти копию данных одинаковую, до тех пор пока оперативка не конциться, потом начинает тупить сама база. То есть можно ли после выполнения запроса задать, что бы он не хранил результат в кэше? Пототму, что таких сложных запросов будет много потом в долгом цикле. При таком раскладе он любое количество опретивы съест и не подавиться, а потом начнеться тот же тупняк

Google
Игорь
02.04.2018
12:38:01
В общем нашел откуда ноги растут у проблемы. Когда программа запрашивает данные, создается клиентский курсор. Если все данные, возвращенные курсором не были считаны до конца, то они повисают в базе. То есть если программа завершилась не штатным образом, из-за этого курсор "висит" в базе со всеми результатами запроса

yopp
02.04.2018
12:41:34
Отлично :) Курсоры без maxTimeMS — очень плохая практика.

Странно что нет возможности задать глобальный тайм-аут для курсоров. Такие ситуации очень часто встречаются когда люди имеют прямой доступ в монгу. Человек кидает find({}).sort(a: -1) на коллекцию в терабайт, не получает ответа за пару минут, выходит из шелла

Но курсор остаётся висеть. Хуже всего если человек настойчивый и повторяет эту операцию несколько раз

Ilya
02.04.2018
12:46:52
вроде у питоновского пакета pymongo по умолчани 10000 равняется этот параметр

в других коннекторах я думаю тоже есть такие дефолтные значения?

Dimanius851
02.04.2018
12:50:28
привет, нужен совет по схеме, юзер модели допустим, нужно создать ещё юзера, у которых не будет телефона, а вместо него будет уникальный username, что делать при такой схеме? создавать новую, типа AnotherUserSchema? https://gist.github.com/DmitryGG/481e8fee84bffab71f5683bbbd88f87f зы: в доках этого нет :D

yopp
02.04.2018
12:52:31
Нет стандарта, по-умолчанию значение не задаётся.

yopp
02.04.2018
12:54:09
еще было б здорово, при выходи из шела кидать cancelation для запроса, интересно почему сразу такое не сделали
Шелл вообще мог бы показывать где-то открытые курсоры и призакрытии мог бы спрашивать что с ними делать. Но тут ещё такой момент: kill cursor не факт что сработает :)

это мне?
Нет. Это про maxTimeMS

Игорь
02.04.2018
13:22:01
Я искренне наивно полагал, что курсор умирает при разрыве соединения в течении какого-то адекватного срока. А тут безлимит из коробки

Nick
02.04.2018
13:25:00
да тоже так думали, а потом ручками киляли

Игорь
02.04.2018
13:28:26
И я правильно понимаю, что глобально задать это никак не вариант? Только для каждого конкретного курсора?

Nick
02.04.2018
13:31:26
да

но ваш драйвер может поддерживать, стоит порыться в доках

Игорь
02.04.2018
13:36:35
только что смотрел, собстенно поведения драйвера здесь копирует полностью поведение монго

Google
User ?
02.04.2018
14:35:32
Всем привет, посоветуйте mongodb хостинг для личных проектов (бесплатный) https://www.mongodb.com/cloud/ подойдет или есть более подходящие варианты? Если да, то почему?

Что нашел mlab.com mongodb.com остальные хотят денег

yopp
02.04.2018
15:00:45
Логично хотят, потому что хранение данных стоит денег.

Если вас устраивает родной mongo cloud, берите его

а так, сейчас виртуалки стоят смешных денег, собрать себе тестовый стол для личных нужд можно по цене двух бокалов среднего пива в месяц

User ?
02.04.2018
15:03:21
а так, сейчас виртуалки стоят смешных денег, собрать себе тестовый стол для личных нужд можно по цене двух бокалов среднего пива в месяц
Да, я в курсе. Просто хочу сделать сервис на raspberry pi, и не хочу морочиться с использованием своего инстанса монги локально или на своих виртуальных серверах. Ведь их придётся обновлять, Бекапить, следить за безопасностью. Остановился на mongo cloud. Спасибо

Dmitriy
03.04.2018
07:04:47
,, заработает...

Artem
03.04.2018
07:05:09
заработает, но так то монга вообще очень прожорлива к памяти.

Dmitriy
03.04.2018
07:05:14
Только до поры до времени пока запросов мало и они нетяжелые

Когда памяти мало то она просто в один момент может перестать работать. И это реально будет неожидано

Artem
03.04.2018
07:06:04
заодно пока данных мало, пока индексов немного

Dmitriy
03.04.2018
07:10:56
Ого. А можно пример с логами? Чтобы я был подготовлен.
Они остались на работе на прошлой. Но факт в том, что в логах ничего необычного нет!

Правда морга была 3.2

Монга*

yopp
03.04.2018
07:13:41
Вы слишком много внимания памяти уделяете. На RPi монга заведётся, но производительность будет ограничена со всех сторон. Например там всего одна usb шина, на которой в том числе и Ethernet контроллер висит. Так что туда в принципе данных много не залить. Ну и все это на 32х битный ARM процессоре, которому уже десятый год. Если это не RPi3.

User ?
03.04.2018
07:15:30
>Если это не RPi3. это рпи3 В домашних проектах(моих) особой производительности не будет.

Но спасибо за комментарий

Google
Dmitriy
03.04.2018
07:17:51
Самое главное саму БД выносить на внешний носитель

yopp
03.04.2018
07:18:12
Смысла это не имеет

Dmitriy
03.04.2018
07:18:16
User ?
03.04.2018
07:18:53
Меньше всего хотел я разжигать ненужный холивар

Dmitriy
03.04.2018
07:19:29
Я бы для таких целей заюзал бы sqlite. А к нему прикрутил бы либу питоновскую dataset

User ?
03.04.2018
07:19:54
Dmitriy
03.04.2018
07:20:29
А какой смысл если я монгу и го хочу поизучать?
Если это с целью изучения, тогда забудь что я писал)

User ?
03.04.2018
07:20:43
?

Pachvarsh
03.04.2018
08:21:30
Ребятки, есть документ в монге, в нем n-ое количество элементов, у каждого из которых есть поле "rating". Как одним запросом/аггрегацией обновить поле "place" у каждого из элементов, показывающее порядковый номер в упорядоченном по полю "rating" списке? Не хотелось бы в питоне перебирать данные каждый раз

Aleksandr
03.04.2018
08:44:03
https://stackoverflow.com/jobs/companies/kink кинку нужен мастер монги посоны

Pachvarsh
03.04.2018
08:44:37
вот если честно, то у меня когнитивный диссонанс. Я не понимаю что ты подразумеваешь под элементом. А лучше приведи пример документа
надо из такого [ {"_id":123, "name":"name1", "rating":12}, {"_id":124, "name":"name2", "rating":45}, {"_id":125, "name":"name3", "rating":31}, ] получить такое [ {"_id":123, "name":"name1", "rating":12, "place": 3}, {"_id":124, "name":"name2", "rating":45, "place": 1}, {"_id":125, "name":"name3", "rating":31, "place": 2}, ] основываясь на величине "rating"

надеюсь, правильно написал

Dmitriy
03.04.2018
08:44:59
теперь понятно

Страница 216 из 342