Alexander
Вариант увеличения ресурсов это крайний случай
Andrey
Микросервис во время переливания
вы же сами ответили на вопрос, причем тут монга?
Nick
Микросервис во время переливания
Уменьшайте объемы выборки из монги
Alexander
вы же сами ответили на вопрос, причем тут монга?
Вопрос к тому, можно ли уменьшить расходуемую память уменьшив размер батча
Andrey
Alexander
В батче по дефолту 101
Andrey
ну то есть у вас 10 мегабайт в памяти в го в моменте(+-) вызывает oom?
Andrey
Микросервис во время переливания
видимо, вам внимательней надо посмотреть код сервиса, где-то что-то "утекает".
Alexander
ну то есть у вас 10 мегабайт в памяти в го в моменте(+-) вызывает oom?
Это если не учитывать текущую нагруженность сервиса, поэтому хотелось бы максимально оптимизировать это переливание
Alexander
ну это не про монгу, это про другое.
Хорошо, в любом случае спасибо за ответы, помогли продвинуться по проблеме🙌
Егор
Использую motor + pymongo Коллекция имеет следующий вид записей: { '_id':0, 'data':[0,1,2], 'profit':30 }, { '_id':1, 'data':[0,12,25], 'profit':37 } Хочу обновить у записи поле data увеличив последний элемент массива на значение поля profit соответствующей записи. Т. е. при обновлении элемента с id = 1 Получится следующее: { '_id':1, 'data':[0,12,62], 'profit':37 } Как можно это сделать ? Псевдокод выглядит как-то так: await collection.update_one( {"_id":1}, {'$inc':{ 'data.-1':"$profit" }} )
NIX
Всем привет! В bson есть поле с датой, но сохранено, как строка Делаю индекс, который, получается будет строковый, а вот мне нужен индекс на дату Есть какие-нибудь приблуды, которые бы говорили, что это должен быть индекс с датой, а не строкой?
Артем
Как можно оптимизировать коллекцию (индексы) и запрос к ней? Есть коллекция с 10 миллионами документов У документа есть поля: - send_at, является ISODate - sended_at, является ISODate или null Индекс по двум полям существует, оба ASC Запрос вида {"send_at": {"$lte": ISODate("2024-07-17T13:45:19.817Z")}, "sended_at": null} выполняется 7 — 10 секунд, explain выглядит так: { "stage": "FETCH", "filter": { "sended_at": { "$eq": null } }, "nReturned": 0, "executionTimeMillisEstimate": 7365, "works": 11410813, "advanced": 0, "needTime": 11410812, "needYield": 0, "saveState": 14918, "restoreState": 14918, "isEOF": 1, "docsExamined": 0, "alreadyHasObj": 0 } { "stage": "IXSCAN", "nReturned": 0, "executionTimeMillisEstimate": 7242, "works": 11410813, "advanced": 0, "needTime": 11410812, "needYield": 0, "saveState": 14918, "restoreState": 14918, "isEOF": 1, "keyPattern": { "send_at": 1, "sended_at": 1 }, "indexName": "send_at_1_sended_at_1", "isMultiKey": false, "multiKeyPaths": { "send_at": [], "sended_at": [] }, "isUnique": false, "isSparse": false, "isPartial": false, "indexVersion": 2, "direction": "forward", "indexBounds": { "send_at": [ "[new Date(-9223372036854775808), new Date(1721223919817)]" ], "sended_at": [ "[undefined, undefined]", "[null, null]" ] }, "keysExamined": 11410813, "seeks": 11410813, "dupsTested": 0, "dupsDropped": 0 }
Артем
Как можно оптимизировать коллекцию (индексы) и запрос к ней? Есть коллекция с 10 миллионами документов У документа есть поля: - send_at, является ISODate - sended_at, является ISODate или null Индекс по двум полям существует, оба ASC Запрос вида {"send_at": {"$lte": ISODate("2024-07-17T13:45:19.817Z")}, "sended_at": null} выполняется 7 — 10 секунд, explain выглядит так: { "stage": "FETCH", "filter": { "sended_at": { "$eq": null } }, "nReturned": 0, "executionTimeMillisEstimate": 7365, "works": 11410813, "advanced": 0, "needTime": 11410812, "needYield": 0, "saveState": 14918, "restoreState": 14918, "isEOF": 1, "docsExamined": 0, "alreadyHasObj": 0 } { "stage": "IXSCAN", "nReturned": 0, "executionTimeMillisEstimate": 7242, "works": 11410813, "advanced": 0, "needTime": 11410812, "needYield": 0, "saveState": 14918, "restoreState": 14918, "isEOF": 1, "keyPattern": { "send_at": 1, "sended_at": 1 }, "indexName": "send_at_1_sended_at_1", "isMultiKey": false, "multiKeyPaths": { "send_at": [], "sended_at": [] }, "isUnique": false, "isSparse": false, "isPartial": false, "indexVersion": 2, "direction": "forward", "indexBounds": { "send_at": [ "[new Date(-9223372036854775808), new Date(1721223919817)]" ], "sended_at": [ "[undefined, undefined]", "[null, null]" ] }, "keysExamined": 11410813, "seeks": 11410813, "dupsTested": 0, "dupsDropped": 0 }
upd, решил проблему с помощью partialFilterExpression
Егор
Как мне запушить последний элемент массива в этот же массив?
Nick
Как можно оптимизировать коллекцию (индексы) и запрос к ней? Есть коллекция с 10 миллионами документов У документа есть поля: - send_at, является ISODate - sended_at, является ISODate или null Индекс по двум полям существует, оба ASC Запрос вида {"send_at": {"$lte": ISODate("2024-07-17T13:45:19.817Z")}, "sended_at": null} выполняется 7 — 10 секунд, explain выглядит так: { "stage": "FETCH", "filter": { "sended_at": { "$eq": null } }, "nReturned": 0, "executionTimeMillisEstimate": 7365, "works": 11410813, "advanced": 0, "needTime": 11410812, "needYield": 0, "saveState": 14918, "restoreState": 14918, "isEOF": 1, "docsExamined": 0, "alreadyHasObj": 0 } { "stage": "IXSCAN", "nReturned": 0, "executionTimeMillisEstimate": 7242, "works": 11410813, "advanced": 0, "needTime": 11410812, "needYield": 0, "saveState": 14918, "restoreState": 14918, "isEOF": 1, "keyPattern": { "send_at": 1, "sended_at": 1 }, "indexName": "send_at_1_sended_at_1", "isMultiKey": false, "multiKeyPaths": { "send_at": [], "sended_at": [] }, "isUnique": false, "isSparse": false, "isPartial": false, "indexVersion": 2, "direction": "forward", "indexBounds": { "send_at": [ "[new Date(-9223372036854775808), new Date(1721223919817)]" ], "sended_at": [ "[undefined, undefined]", "[null, null]" ] }, "keysExamined": 11410813, "seeks": 11410813, "dupsTested": 0, "dupsDropped": 0 }
keysExamined говорит об очень широкой выборке, что все 10кк доков затрагиваются. И да тут либо индекс где sended_at первым добавлять либо как и сделали уже через partial индекс
Артем
keysExamined говорит об очень широкой выборке, что все 10кк доков затрагиваются. И да тут либо индекс где sended_at первым добавлять либо как и сделали уже через partial индекс
Да, но вообще это странное поведение, имхо Я пробовал индекс только на send_at и запрос только по этому полю, но все равно очень долго работает Хотя казалось бы тот же бин поиск по этому индексу должен отработать моментально 😂 Хотя ладно, 10 миллионов и в правду много, да и сортировать еще как-то нужно
Артем
Тзза того что там $lte монга для каждого подходящего значения send_at проверяет значение sended_at. А т.к. под лте подходит много документов то и аремя соответствующее
Я проверял только с поиском по send_at с lte и индексом по этому полю, все равно долгий поиск был, хз почему Проблему собственно решил уже, но просто непонятно из-за чего такое замедление
Nick
Я проверял только с поиском по send_at с lte и индексом по этому полю, все равно долгий поиск был, хз почему Проблему собственно решил уже, но просто непонятно из-за чего такое замедление
Советую поискать описание работы составных индексов или лучше попробовать реализовать самостоятельно, чтобы появилось понимание, в целом очевидное поведение при широких выборках на неподходящих индексах
Артем
Советую поискать описание работы составных индексов или лучше попробовать реализовать самостоятельно, чтобы появилось понимание, в целом очевидное поведение при широких выборках на неподходящих индексах
Опять таки, речь не про составной индекс)) Я делал отдельный тест с индексом только на 1 поле и поиском по одному полю и всё равно было медленно
Nick
Опять таки, речь не про составной индекс)) Я делал отдельный тест с индексом только на 1 поле и поиском по одному полю и всё равно было медленно
Поведение от этого поменяется только в части необходимости вытащить док, а не доп ветвь индекса. Количество операций остается тоже самое
of Astora 𒉭
если я поверх своей монги установлю ещё одну монгу но уже новой версии 7, у меня будут какие конфликты?
of Astora 𒉭
у меня сейчас 5.0.2 версия
Nick
если я поверх своей монги установлю ещё одну монгу но уже новой версии 7, у меня будут какие конфликты?
надо смотреть на зависимости, так и не скажешь. В целом нет проблем запустить несколько инстансов на одной машине с разными конфигами смотрящие на разные директории
of Astora 𒉭
та я уже удалил старую, сейчас ставлю новую
Егор
мужики, подскажите пожалуйста, никак не могу решение найти Как в много обратиться к определному элементу массива и заменить его? mongo db У меня есть записи формата: 'profit':[0,1,2], 'data':40 Как мне последний элемент массива profit увеличить на значение поля data? Т е псевдокод выглядит так: collection.update_many({}, {'$inc':{'profit.-1':"$data"}})
Егор
updateMany, чи не?
Да, но как это проблему решит?
of Astora 𒉭
Да, но как это проблему решит?
покопай на $expr оператор, кажется то, что тебе нужно
Егор
Мне по факту, нужно в массив его последний элемент добавлять, и потом обновлять ссылаясб на другое поле
Егор
я через . и $ пробовало по типу $arr.-1 и так далее, но не работает
of Astora 𒉭
для такого действия у тебя запрос уж очень простой. думаю чтобы найти последний элемент в массиве нужно юзать $arrayFilters, $arrayElemAt
Y
Помогите с составлением правильного запроса https://mongoplayground.net/p/oswwkT9t-dS например вот такая example коллекция, как мне отобрать только те записи из коллекции, где в "my_array" есть 1 ?
Y
https://mongoplayground.net/p/45orBYCFiSD
Хм, проще чем через elemMatch. Спасибо! А если случай по сложнее, если скажем поиск осуществлять не на содержание единички, а на пересечение с другими массивами, например на вход пришел массив [1,2] а на выходе должно вернуть все, массивы, которые содержать 1 или 2 исходного массива
Y
$in: [1, 2]
Ага, спасибо. А можете тогда сразу прокомментирорвать принципиальную разницу между обычным db.collection.find({ "my_array": { "$elemMatch": { "$in": [ 1, 4 ] } } })
Y
и таким db.collection.find({ my_array: { "$in": [ 1, 4 ] } })
Y
Как я понимаю, результат возвращается одинаковый
E1ecti⁠
Как я понимаю, результат возвращается одинаковый
$elemMatch проверяет выполнение всех условий, без него проверяется соблюдение лишь одного из них. Можете потыкать, убрать $elemMatch тут: https://mongoplayground.net/p/EpMdFDokwXO
Andry
Подскажите пожалуйста - у меня есть саб элементы и мне надо за один запрос либо обновить текущий саб элемент либо вставить его - пробовал AddToSet и Set но что то не выходит через них
Andry
как сделать?
Andry
{ "_id" : "1", "UserFields" : [ { "Key" : "key1", "Value" : "value", "StoreId" : "" }, { "Key" : "key2", "Value" : "value2", "StoreId" : "" } ], "Name" : "Test", "Count" : NumberInt(0), "CreatedBy" : null, "CreatedOnUtc" : ISODate("0001-01-01T00:00:00.000+0000"), "UpdatedBy" : null, "UpdatedOnUtc" : null, "Phones" : [ ], "Category" : [ ] }
Andry
Вот предположим такая коллекция - мне за один запрос без получения зная идшник нужно либо обновить Key либо вставить туда значение
Артем
Есть какой-то способ понять куда уходит память mongodb? В гугле нашел только информацию по просмотру размера индексов для коллекций (они в норме), а также общий объем кэша, но это вообще ни о чем не говорит
Артем
База потребляет 30 — 50 ГБ ОЗУ, хотя данных внутри на 10 — 15 ГБ (не сжатое)
Viktar
База потребляет 30 — 50 ГБ ОЗУ, хотя данных внутри на 10 — 15 ГБ (не сжатое)
Монга потребляет всю память, до которой может дотянуться. Вы можете ограничить только размер кэша
Артем
Монга потребляет всю память, до которой может дотянуться. Вы можете ограничить только размер кэша
И тем не менее раньше потребление было меньше, значит все таки от чего-то зависит)
Viktar
От запросов и времени. У меня база в 1гб, выедала 30-40. Можете запустить моргу в докере.
Nick
А что там такого могло закэшироваться на 30 - 40 гб?))
Не путайте закешировалось и выделило, память может быть пуста, но не высвобождается
Егор
Что делать в такой ситуации? Добавлял список доступных ip через iptables - непомогло
Maxmudjon
Что делать в такой ситуации? Добавлял список доступных ip через iptables - непомогло
включи аутентификация, у меня тоже на белом айпи такая ржач было
Егор
тип юзера добавить?
Егор
а почему через iptables не помогло ?
Егор
я пробовал добавлять юзера в админ с правами read write, но почему-то я мог и без аутефеканции заходить
Егор
admin - ReadWriteAny чето такое
Егор
Я роль добавил, но почему то к бд мог логиниться без нее и изменять данные
Nick
а почему через iptables не помогло ?
Iptables как настраивали?
Егор
Iptables как настраивали?
Добавил доступ для ip сервера, а остальным ip порезал доступ
Егор
А почему я не могу подключить к mongo db с компьютера? В связи с чем могут возникнуть проблемы эти?
Влад
А почему я не могу подключить к mongo db с компьютера? В связи с чем могут возникнуть проблемы эти?
если у тебя роутер на полу стоит то его нужно на стену повесить, см 50 от пола +-
Егор
У меня монга на серваке работает, через iptables доступн настроил все окей врооде, но когда с домашнего пк подключаюсь через компас то timeoueterror
Егор
локалка? наружу выбрасывать монгу такой се момент(впн если ток)
она по сути запросы с самого сервера и моего Ip принимать должа