Nick
Nick
тем более спарс
yopp
robo3t вообще умер
Nick
а если sparse-индекс по myObject? раз там бОльшая часть пустых
The inequality operator $ne is not very selective since it often matches a large portion of the index. As a result, in many cases, a $ne query with an index may perform no better than a $ne query that must scan all documents in a collection.
https://docs.mongodb.com/manual/reference/operator/query/ne/
yopp
надежнее всего — руками в монгу вообще не ходить
yopp
если такой возможности нет, то писать «миграции», которые тестировать
yopp
это если надо менять что-то в монге
Ivan
я под readonly аккаунтом хожу
yopp
если нало только считать, то сделать для этого отдельный интерфейс в вашем бэкенде, который гоняет ваши запросы на отдельной реплике, с возможностью убивать повисшие запросы. если нужны очень большие и долгие расчёты то с out во временную коллекцию.
yopp
в шелле есть очень большая ловушка. ^C не убивает запрос
yopp
это вообще классическая ситуация.: копатели данных из шела написали запрос по всей коллекции, нажали энтер, не должались ответа, нажали ^C. Повторили запрос. И так несколько раз
yopp
а потом монга прилегла
ㅤㅤㅤㅤㅤ
#ask
In mongodb not support installation on ubuntu 32bit??
ㅤㅤㅤㅤㅤ
#ask
how to install mongodb on ubuntu 32bit ??
yopp
We have separate group for english speakers: @mongo_db. But short answer: 32 bit support is deprecated, and there is no builds for 32 bit systems anymore.
But you can still install legacy and unsupported 3.2 version: https://www.mongodb.org/dl/linux/i686
ㅤㅤㅤㅤㅤ
ㅤㅤㅤㅤㅤ
Bro
немного не туда, но может быть есть те кто разбираются в postgres?
Bandikoot
s0menickname
s0menickname
есть же чаты про постгрес
Bro
ага спасибо
Ivan
привет!
о памяти в монге:
может ли процесс съесть больше, чем было по-дефолту зарезервированно под кеш при старте?
Если да, то что гарантированно лежит из жирного в памяти кроме индексов?
yopp
Да, может.
yopp
Размер кеша ограничивает только количество страниц которые WT может положить в память. Все остальные ресурсы никак не ограничиваются. Например буфер под сортировку или агрегации
Ivan
Я посмотрел faq и там только про ограничения, когда контейнеры и как посмотреть serverstatus.
А так есть возможность понять, когда системе требуется увеличить этот самый кеш? Когда IO возрос?
yopp
Размер кеша не стоит устанавливать вручную, за исключением случаев когда монга не может корректно определить размер доступной ей памяти. Например если она в контейнере или если рядом какой-то другой жирный потребитель памяти (чего лучше избегать)
В остальных случаях половина памяти это верная стратегия. В кеше WT хранится не сжатая версия страницы, так что дисковый кеш, под который будет автоматически выделена свободная память, будет в себе содержать сжатые страницы. Что повышает эффективность использования памяти
yopp
Из-за компрессии при увеличении размера кеша можно получить обратный эффект — IO только возрастёт
yopp
В монге нет ручек которые стоит крутить. Если монге перестаёт хватать ресурсов, значит вам надо масштабироваться
yopp
Если монга на сервере одна, то этого делать не стоит.
yopp
Оставьте настройки по-умолчанию
Ivan
Да, можно считать, что одна.
Спасибо
yopp
В монге нет «оптимизационных» ручек
yopp
Единственное что вы там можете накрутить, это алгоритм компрессии
yopp
Если вы не CPU bounded, то переход на zlib может помочь с дисковым IO
yopp
Но это надо мерять в продакшене, переведя на zlib одну из реплик
yopp
Ну и в обратную сторону, если вы CPU bounded, но дискового io ещё куча, отказ от компрессии может помочь разгрузить CPU.
Ivan
честно говоря, я так далеко ещё не ходил, да и в IO проблем пока нет.
yopp
«Работает и не трогай»
Ivan
сжатие есть, но дефолтное
yopp
Если проблем нет, то и делать ничего не надо. Оставьте всё по-умолчанию
Ivan
да тут желают урезать ресурсы машин, я и думаю, насколько возможно.
Ivan
Поэтому и было желание, урезать общее рам, но увеличить в монге. Но, оказывается, был бы фейл
yopp
Вам это ваш observability должен говорить
yopp
А какой объём данных?
yopp
Если памяти меньше чем размер индексов, то будет сильная деградация производительности
Ivan
А какой объём данных?
индексов 20G, на файловой системе 70G не считая индексов, они на подразделе отдельном.
yopp
а какой коэфициент сжатия?
Ivan
Если правильно понял, то storagesize/datasize=0.61
yopp
Т.е. 70 гигов на диске это 114гб данных примерно
Ivan
1.63, если в минус первую возвести
Ivan
ну около
"dataSize" : 101807483246
yopp
ну до 120 гигабайт вероятно можно без боли уменьшить
yopp
сомневаюсь что весь датасет используется
yopp
150 safest best
yopp
120 уже надо смотреть
yopp
минимально что-то около 40гб
Ivan
yopp
да
yopp
сколько монга реально памяти использует сейчас?
Ivan
res 112 и хавает, половину от рам
yopp
я так понимаю у вас виртуализация?
Ivan
121 mongo / 252 all
да, это виртуалка, но без переподписки
yopp
репликасет?
Ivan
Ага, три ноды, мастер-слейв-слейв
yopp
одной ноде порежьте память в два раза, поставьте высокий приоритет и выберите праймари
yopp
и посмотрите что будет
yopp
будет плохо, отмотаете назад
yopp
в смысле переключитесь на более ёмкую ноду
Ivan
ну да, так думал.
Ivan
Спасибо большое за время и ответы =)
Maxim
Всем привет!
Может кто подсказать как импортнуть дамп БД в локальную БД, которая находится в докер контейнере?
Я в этом мало чего понимаю к сожалению =(
yopp
yopp
если монги нет, то тут уже сложнее: потребуется ещё один контейнер, в который надо будет примонтировать дамп и который надо будет, слинковать с контейнером монги (или что там сейчас в докере нужно, чтоб два конейтера могли по сети друг-друга видеть) и в котором запустить mongorestore
Maxim
@dd_bb Есть контейнер с монго
Maxim
@dd_bb спасибо большое за ответ, сейчас попробую
Anonymous
Привет. Помогите с аггрегацией пожалуйста. Во-первых она не работает (заполняет latest только нулями), а во вторых явно избыточно написана.
https://pastebin.com/jPSLHVyV
Есть два поля - тип и дата . Нужно на выходе получить {тип, "сколько такого типа", "сколько такого типа, но с датой в пределах текущего месяца"} Заранее благодарю за помощь.
Привет. Вроде как моя аггрегация работает, но выглядит плохо. https://pastebin.com/V6d5UJQk
Прошу совета, как её оптимизировать. Подход "напихать массив по условию, а потом по нему же отфильтровать" похож на говно, но ничего больше не придумал.
Посмотрел explain - ничего особо он там не поменял. Мне кажется именно такой подход не верен.
UPD: посмотрел обучающих материалов, заменил на
db.items.aggregate([{
$project: {
type: 1,
lastUpdate: 1
}
}, {
$group: {
_id: "$type",
count: {
$sum: 1
},
latest: {
$sum: {
$cond: {
if: {
$eq: [{$month: "$lastUpdate"}, {$month: new Date}]
},
then: 1,
else: 0
}
}
}
}
},
{
$sort: {
count: -1
}
}
])
Вроде смысл тот же, можно ли еще как-то улучшить?
Anonymous
Являются ли следующие два действия эквивалентными?
body.lastUpdate = Date.now();
Item.findByIdAndUpdate(id, { $set:body })
Item.findByIdAndUpdate(id,
{ $set: req.body ,
$currentDate: {
lastUpdate: true
}
}
)