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

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

yopp
02.04.2018
10:26:02

Google

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

Старый
02.04.2018
10:27:45

Игорь
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

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 будет очищаться перед добавлением данных

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
в общем ограничил объем памяти для текущего процесса монго. Гоняю этот запрос. Перые разы, пока пямять не забъеться выделенная, запрос летает. Потом начинает тупить. То есть ситуация такая, что при запросе каждый раз он создает в памяти копию данных одинаковую, до тех пор пока оперативка не конциться, потом начинает тупить сама база. То есть можно ли после выполнения запроса задать, что бы он не хранил результат в кэше? Пототму, что таких сложных запросов будет много потом в долгом цикле. При таком раскладе он любое количество опретивы съест и не подавиться, а потом начнеться тот же тупняк

Nick
02.04.2018
12:07:33

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

Slava
02.04.2018
12:51:46

yopp
02.04.2018
12:52:10

Dimanius851
02.04.2018
12:52:12

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

Dimanius851
02.04.2018
12:53:59

yopp
02.04.2018
12:54:09

Игорь
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

Dmitriy
03.04.2018
07:02:09

User ?
03.04.2018
07:04:25

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
заодно пока данных мало, пока индексов немного

User ?
03.04.2018
07:07:54

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:02

yopp
03.04.2018
07:17:36

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" списке? Не хотелось бы в питоне перебирать данные каждый раз

Dmitriy
03.04.2018
08:39:39

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
теперь понятно