yopp
network-online.target
yopp
но конфигурация через ip это в любом случае плохая идея
yopp
если нет своего днса, то локальные резолверы на нодах настроить чтоб хосты везде резолвились в нужные ip
Andrey
но конфигурация через ip это в любом случае плохая идея
я не стану приператься, потому что просил помощи. видимо нужно чуть больше освоить этот момент. естественно перенастрою его на имена. Спасибо боьшое @dd_bb за помощь! до такого я врядли бы допер мозгом. сейчас перенастрою и немного покошмарю результат
Bandikoot
It only indicates that the network management stack is up after it has been reached.
хм, соглашусь https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
Andrey
но скрывать не стану - затык на имена при наличии статики вызывает у меня вопросы
yopp
ip адрес это плохой идентификатор ноды в реплике, потому что у физической машины может быть множество адресов. а вот хостнейм — один
yopp
вероятно вашу проблему можно решить через network-online.target + bindIp: <static>
yopp
но потом у вас поменятся адрес и вам надо будет делать лишние телодвижения чтоб снова добавить ноду в реплику
yopp
Кто-нибудь знает, что значит protocol:op_msg 127ms в логе монги? появляется в строках с типом COMMAND
op_msg в 3.6 и старше это вообще любая команда. скорее всего у ваc log slow queries настроен на 100мс и как результат всё что выполняется дольше попадает в лог
yopp
при это всякие мониторинги показывают что куча свободной памяти постоянно.
если мониторинги показывают кучу свободной памяти, но редис не может её выделить, то у кого-то проблемы с расчётом свободной памяти :)
yopp
монга под кеш документов выделит cacheSizeGB, плюс ещё неизвестное количество под различные свои нужны, типа сортировок соединений и всего такого
yopp
кеш файловой системы монгой никак не управляется, им ОС распоряжается. ваша проблема скорее всего связана с overcommit_memory
yopp
и это к редису
yopp
если оно на форке вылетает
yopp
если в редисе ничего не поменялось, то там CoW и при форке новый процесс на деле не будет требовать ещё столько-же памяти, сколько родитель. но если у вас 128G, из которых 80G занято монгой и ещё 40G занято редисом, ось может не дать форку выделить ещё 40G, потому что памяти может и не хватить. Хотя на деле ему 40G и не надо и эвристика ошибается. overcommit_memory в 1 решает проблему.
yopp
https://redis.io/topics/faq#background-saving-fails-with-a-fork-error-under-linux-even-if-i-have-a-lot-of-free-ram
yopp
но иметь несколько хранилищ на одном хосте — плохая идея
Artemy
Подскажите, как решить следующую задачу: Получаю на входе массив ингредиентов следующего вида: ['onion', 'bread', 'potato'] И есть рецепты примерно такого вида: { title: "Title", ingredients: [ { name: "bread" quantity: 2 }, { name: "potato", quantity: 4 } ] } Как правильно сформировать запрос, чтобы получать выборку рецептов, которые содержат все ингредиенты из массива ингредиентов, но при этом не обращать внимание на их необходимое количество? Вероятно, нужно как-то использовать оператор $all, но не совсем понимаю, как массив строк сравнивать с массивом объектов?
Artemy
Ну я увидел, что кто-то только что отправил сообщение с $in Мне нужно, чтобы запрос матчил только те рецепты, которые содержат ВСЕ ингредиенты из массива, поэтому $in не подходит, насколько я понимаю
Artemy
А можешь отправить ещё раз с учётом этого условия?
Artemy
Или нужен другой подход в таком случае?
Artemy
ты уверен что используешь правильную БД для своей задачи?
Не совсем, я экспериментирую А что, есть идеи получше?
Анатолий
реляционные БД в таком сценарии обычно юзают..
Анатолий
mysql, postgresql, mssql, oracle
Artemy
А посредством монги эту задачу невозможно решить?
Bandikoot
есть идея безумного костыля: генерить запрос динамически, вставляя условия на каждый элемент исходного массива
Анатолий
когда инструмент не тот - всегда начиняются костыли
Bandikoot
но вообще правильным было бы двигаться куда-то в сторону сравнения множеств
Анатолий
ты можешь почесать ухо пёрышком зажатом в пальцах роботической руки запущенной подпрограммой с условными координатами комнаты, сканером с определением движущихся тел посредством видеонаблюдения и экстраполяции местоположения уха в пространстве относительно роборуки... а можешь просто почесать рукой
yopp
по ingredients.name сделать индекс
Artemy
делаете условие $and:[ $elemMatch:{ ingredients.name: v1}, $elemMatch:{ ingredients.name: v2}, ..... ]
Но ведь количество ингридиентов может быть каким угодно, значит это желательно как-то динамически делать
Artemy
Но я посмотрю, спасибо
yopp
$elemMatch в вашем случае смысла не имеет
Dmitry
Случайно закрыл терминал в VSCode (с него был запущен mongod), теперь при написании команды mongod пишет Failed to set up listener: SocketException: Address already in use
Dmitry
Как остановить теперь сервер локальный? (ctrl-c соответсвенно не работает)
Dmitry
Заработало, спасибо!
Ivan
Не подскажете - можно как-то просто узнать количество полей в документе?
Ivan
ну мне хочется именно средствами монги, чтобы в монго-шеле найти те документы, у которых одно поле - объект, и в этом объекте больше 1 поля
yopp
а сколько документов?
yopp
«объект» это поддокумент?
Bandikoot
проверка на объект через $type https://docs.mongodb.com/manual/reference/operator/query/type/ а для кол-ва полей в нём можно попробовать $where https://docs.mongodb.com/manual/reference/operator/query/where/
Ivan
документов пара миллионов
yopp
но в целом $objecToArray и $group по $type
yopp
если название аттрибута не известно
yopp
но дважды разворачивать будет дорого
Bandikoot
но в целом $objecToArray и $group по $type
от массива уже можно и $size взять
Ivan
Сделал вот так: db.getCollection('collection').find({"$and":[ {"myObject":{"$ne":{}}}, {"$where":function() { return Object.keys(this.myObject).length > 1 } } ]})
Bandikoot
Сделал вот так: db.getCollection('collection').find({"$and":[ {"myObject":{"$ne":{}}}, {"$where":function() { return Object.keys(this.myObject).length > 1 } } ]})
на верхнем уровне вложенности выражений в запросах mongodb по-умолчанию $and, его можно и не писать
Bandikoot
на верхнем уровне вложенности выражений в запросах mongodb по-умолчанию $and, его можно и не писать
ну т.е. db.getCollection('collection').find({ "myObject" : {"$ne" : {} }, "$where" : function() { return Object.keys(this.myObject).length > 1 } })
yopp
от массива уже можно и $size взять
только если название аттрибута нет, придётся сначала $$ROOT в $objectToArray а потом ещё и объект
yopp
$ne: {} это вообще так себе условие
Ivan
разовая
Ivan
там почти два миллиона документов с пустым этим объектом - для этого фильтрую через ne пустой
Ivan
и несколько десятков тысяч с непустым
Nick
берите что выше либо первое в гугле что выдало и в путь
Nick
и смысла паритсья вообще это делать монгой нет
Ivan
ну я выше уже написал как у меня в итоге заработало
Nick
ну да заработало, только индексы не работают, на монге выполняется тот же код, что и на js клиенте можно было сделать
Ivan
то есть достать на уровень приложения всю коллекцию и по ней проитерироваться?
Nick
ну я выше уже написал как у меня в итоге заработало
вы же написали что уже сделали, это я не понимаю или чтото еще пропустил в диалоге?
Ivan
да, я уже сделал - дальнейшие обсуждение мне тут для общего развития нужно
Ivan
задачи "слазить монгошелом и что-то достать/посчитать" у меня достаточно часто возникают, а с монгой я только начал работать
yopp
монгошелл плохой инструмент для этого