Nick
журнал по умолчанию включен?
включен, но стоит всеравно проверить через db.serverStatus() и там стату в wiredTiger.log
Nick
сверяйте типы
Kino Recovery
есть ли ресурсы типа монго академи,но в тексте? тут человека надо натаскать да и мнебы знания обновить
Kino Recovery
есть бооооооооооооооооооооооооооооольшая коллекция на 37к документов и надо достать документ с максимальным полем cid int32 как правильно написать
Артем
37к такая большая
Артем
find с сортировкой, лимитом и всё
Kino Recovery
37к такая большая
а большая, это сколько по вашему
Артем
а большая, это сколько по вашему
ну люди бывает терабайтами данных оперируют, так что относительно маленькая
Dubzer
чатик, монга заставляет меня страдать. пишу запрос с updateMany, и не могу догадаться, как обновить значение поля последнего элемента массива. с первым элементом массива, как я понял, все просто: {$set: {"someArray.$.field": "value"}} а как сделать такое с последним?
✨ Uni
а большая, это сколько по вашему
ну хотя бы миллионов 10 что ле…
Viktar
а большая, это сколько по вашему
У меня коллекции есть по 800 миллионов.
Kino Recovery
ну хотя бы миллионов 10 что ле…
у меня там чат логи геймсервере и они будут расти так что цифра 800млн на регион в палне скоро
Dubzer
grafana loki как менее жручий вариант
Kino Recovery
легаси
Kino Recovery
посмотрел, не подходит мне надо, что-то что умеет работать с json
Артем
видимо хочет json логи
Артем
ну не сказал бы, работать с json логами проще обычно же
Dubzer
ну не сказал бы, работать с json логами проще обычно же
так что в итоге есть JSON логи? loki умеет в структурированные логи, при этом имея рест апишку с жсоном. это считается?
Kino Recovery
так что в итоге есть JSON логи? loki умеет в структурированные логи, при этом имея рест апишку с жсоном. это считается?
на вход в общею очередь идет json не структурированный, например если, это чат локации то там всё просто, если это трейдчат то в объект лога еще и инвентарь идет(это так тупо)
Kino Recovery
посмотрю...
Alexandrr
а большая, это сколько по вашему
несколько сотен млрд записей примерно
Alexandrr
на 1 коллекцию ?
а вопрос был про базу или про коллекцию?
Kino Recovery
про кол
Alexandrr
про кол
а в чём вопрос тогда?
Kino Recovery
а в чём вопрос тогда?
как много документов внутри коллекции должно быть, чтобы они считалась большой 4x3.5Ghz 16gb ram
Dubzer
Мб что-то из этого поможет db.collection.updateMany( { фильтр }, { $set: { "массив.$[элемент]": "новое_значение" } }, { arrayFilters: [{ "элемент": { $eq: { $arrayElemAt: ["$массив", -1] } } }] } )
чет ничего не обновляется при таком запросе. правда я set модифицировал так, что он стал "массив.$[элемент].поле". но вроде сломаться от этого не должно
Alexandrr
чет ничего не обновляется при таком запросе. правда я set модифицировал так, что он стал "массив.$[элемент].поле". но вроде сломаться от этого не должно
db.collection.updateMany( {}, { $set: { "someArray.$[last].field": "value" } }, { arrayFilters: [ { "last": { $eq: { $arrayElemAt: [ "$someArray", -1 ] } } } ] } )
Alexandrr
ничего не обновляет. запрос выдает matchedCount 19, а modifiedCount в итоге 0
сли запрос выполняется без ошибок, но при этом modifiedCount равен 0, это может означать, что вам необходимо обновить документы, которые соответствуют фильтру, переданному в первом параметре функции updateMany. Проверьте, что ваш фильтр правильно выбирает документы, которые должны быть обновлены. Можно также попробовать выполнить запрос с использованием метода find вместо updateMany, чтобы проверить, соответствует ли ваш фильтр документам, которые вы хотите изменить. Также обратите внимание на наличие индексов на полях, которые вы используете для фильтрации. Отсутствие индекса может замедлить выполнение запроса и привести к тому, что изменения не будут внесены в документы. Если вы все еще столкнулись с проблемой, попробуйте добавить параметр { multi: true } в вызов updateMany, чтобы обновить все соответствующие документы: db.collection.updateMany( { /* ваш фильтр */ }, { $set: { "someArray.$[last].field": "value" } }, { arrayFilters: [ { "last": { $eq: { $arrayElemAt: [ "$someArray", -1 ] } } } ], multi: true } )
Dubzer
сли запрос выполняется без ошибок, но при этом modifiedCount равен 0, это может означать, что вам необходимо обновить документы, которые соответствуют фильтру, переданному в первом параметре функции updateMany. Проверьте, что ваш фильтр правильно выбирает документы, которые должны быть обновлены. Можно также попробовать выполнить запрос с использованием метода find вместо updateMany, чтобы проверить, соответствует ли ваш фильтр документам, которые вы хотите изменить. Также обратите внимание на наличие индексов на полях, которые вы используете для фильтрации. Отсутствие индекса может замедлить выполнение запроса и привести к тому, что изменения не будут внесены в документы. Если вы все еще столкнулись с проблемой, попробуйте добавить параметр { multi: true } в вызов updateMany, чтобы обновить все соответствующие документы: db.collection.updateMany( { /* ваш фильтр */ }, { $set: { "someArray.$[last].field": "value" } }, { arrayFilters: [ { "last": { $eq: { $arrayElemAt: [ "$someArray", -1 ] } } } ], multi: true } )
чатжпт чет нагаллюцинировал
-
чатжпт чет нагаллюцинировал
То что выше вам скинул оно от части не работает т.к. условие $arrayElemAt: [ "$someArray", -1 ], возвращает сам элемент, а не index. В качестве решения можно сделать следующее: 1. Прокинуть функцию JS. 2. Использовать курсор. 3. Выполнить запрос аггрегации и получить _id и размер массива $size. После чего выполнить запрос(-ы), где вы сами высчитаете длину массива.
Easy Rider
Транзакции сильно ограничивают производительность?
Easy Rider
к примеру у меня в контроллере какая-то операция, ну например, некий чел вступает в группу на сайте. то есть об этом должна обновиться инфа в нескольких коллекциях. а есть еще контроллер например где его удаляют. тогда соответственно тоже затрагивается множество таблиц, информация о его аваатарке, о его сообщениях в чатах и тд. и обе эти операции (как и многие другие) обернуты в транзакции от начала до конца.
Easy Rider
ну так я вот подумал, по идее же это как операция блокировки, пока выполняется одна транзакция, другие не имеют доступа к коллекциям? то есть это может на порядки ухудшить производительность при большом числе параллельных операций? или не? на практике кто-нибудь с этим сталкивался?
Easy Rider
сервер на чем работает? апач? nginx? воркеры используются?
nginx, но какая разница? это уровень приложения же. монолитный уродец такой, которого я пилю. на C#
Arams
nginx, но какая разница? это уровень приложения же. монолитный уродец такой, которого я пилю. на C#
nginx однопоточный, пока выполняется один запрос, остальные встают в очередь
Easy Rider
самый быстрый сервер в мире - однопоточный?
Arams
Andrey
ага, он просто очень быстрый
Вы в конфиг nginx заглядывали?
Arams
самый быстрый сервер в мире - однопоточный?
Nginx запускает несколько процессов в памяти — один master-процесс и несколько «воркеров». Также существует несколько службных процессов — например, менеджер и загрузчик кэша. В версиях nginx 1.x все процессы однопоточные. Все они используют для взаимодействия друг с другом механизмы разделения памяти. Master-процесс запускается под пользователем root. Служебные и worker-процессы работают без привилегий суперпользователя.
Easy Rider
ага, он просто очень быстрый
нет, не верю. ты что-то не так понял. потому что если бы так было, то любое приложение, даже если бы было многопоточным, выполнялось бы очень медленно, от его многопоточности не было бы толку
Arams
Вы в конфиг nginx заглядывали?
да, но есть же нюансы, те же самые воркеры расширяют поточность, поэтому я в самом начале уточнил
Andrey
да, но есть же нюансы, те же самые воркеры расширяют поточность, поэтому я в самом начале уточнил
Ну вот, не видел, где ранее были уточнее про воркеры. Поэтому так округленно говорить, очень не то
Easy Rider
вот я делаю на asp.net, у меня там как бы кестрел, то есть нгинкс это прокси. хочешь сказать, что мои контроллеры не могут выполняться одновременно? ни в жизнь не поверю
Andrey
@AndrewFoma тут?
угу, увидел, а по вопросу, по дефолту в конфиге идет 1 воркер?
Arams
угу, увидел, а по вопросу, по дефолту в конфиге идет 1 воркер?
затрудняюсь ответить, еще же от ядер зависит на сервере)
Arams
1 поток = 1 ядро если мне память не изменяет)
Arams
большинство вдсок 1 ядро и предоставляют по низу тарифа)
Easy Rider
вот у меня получается каждый контроллер идет к сервису своему, который сразу начинает транзакцию. для атомарности. пока работает одна транзакция, никакая другая не может получить доступ к коллекции?
Easy Rider
Транзакции чуть более затратные чем обычные операции, но если нет конфликтов, это незначительно влияет на производительность
то есть пока не завершена одна транзакция, другая может тоже оперировать с коллекцией, которая используется в первой?
Arams
вот у меня получается каждый контроллер идет к сервису своему, который сразу начинает транзакцию. для атомарности. пока работает одна транзакция, никакая другая не может получить доступ к коллекции?
это не ощущается пока сервер не начнет обрабатывать хотя бы данные хотя бы 10к записей). вот там уже 2ой пользователь будет наблюдать прелодер некоторое время)
Easy Rider
Да
ок
Arams
да хз.
конфиг глянь nginx и кол-во ядер на проце)))
Easy Rider
конфиг глянь nginx и кол-во ядер на проце)))
пока что ядро одно но их будет 16 когда все будет работать уже в боевом режиме
Easy Rider
Вы совсем не понимаете как работает Nginx! В его документации четко написано, что он не блокируется.
если рассуждать логически, он и не может блокироваться. потому что тогда приложение которое он обслуживает, бессмысленно делать многопоточным. все равно же будет все работать в один поток
Easy Rider
скорее всего там даже на 1 ядро нет ограничений. 1 ядро тоже на самом деле может обеспечить приличную параллельность
Easy Rider
нет смысла это искусственно ограничивать
RapidCodeLab
Только не параллельность а конкурентность, это немного разное
Easy Rider
конкурентность это, по идее, сражение за ресурс. а тут как раз параллельность
RapidCodeLab
На одном ядре не может быть параллельно ничего)
Easy Rider
на уровне абстракции приложения может