Алексей
Ребят, всем привет, подскажите пожалуйста, возможно ли то, что я хочу сделать?
Есть документ A, у которого есть поле networks - это массив объектов.
Структура объекта:
{
currency: Types.ObjectId;
amount: number;
}
На входе я имею некий массив values, структура которого аналогична полю networks
Я хочу одним запросом .updateOne() обновить поле networks, прибавив каждому полю amount значение из принадлежащего ему объекта в поле values (определяется по полю currency).
Алексей
в монге так можно?
Нуриддин
Nick
Алексей
насчёт того, что проще - согласен.
но в итоге столкнулись с тем, что при частых запросах от чедулера + по сокету данные перезаписываются((
Алексей
Алексей
T~B
Привет, подскажите как в логах монги идентификации действий пользователя в бд mongodb пишет uuid "....". как то можно сопаставить username и uuid ? Хочу узнать от какого пользователя делался запрос
Bretbas
Народ, подскажите пожалуйста
КТо нибудь встречал
MongoDB.Driver.MongoNotPrimaryException: Server returned not primary error.
Ivan
Dmitry
Асхат
Всем привет, кто может подсказать?.. есть два докер контейнера с монгодб.. надо зайти с одного контейнера в другой и просмотреть базы
Асхат
Как это можно реализовать?
-
Асхат
А через какую команду монги?
mongo --host <название контейнера> или сетевой адрес контейнера?
Асхат
У меня почему то команду mongo не определяет
Нуриддин
Если при docker run даш флаг --hostname то можно
Нуриддин
Но только если они в одно docker network
Нуриддин
Я понял по другому, ну вчё прокидывай порт из хоста или запускай монго консоль из контейнера и работай как удобно
FOR YOU
Всем привет!
Подскажите, как считаете, в монго нормально реализованы транзакции и принципы ACID?
ПыСы: документацию читал, все смотрел
Но хотел бы узнать личный опыт
Вопрос исследовательский, можно ли будет в дальнейшем полностью отказаться от реляционный бд в пользу nosql, где существуют ACID и транзакции
Не кидайте камни, надо научную статью писать..
Easy Rider
Easy Rider
если у тебя возникает конфликт записи в рамках транзакции, монга его не решает, а просто выдает ошибку. предполагается что ты сам должен повторно проводить транзакцию.
существуют утилиты, которые облегчают эту задачу, но все равно это выглядит убого
Easy Rider
короче, транзакции это не аналог оператора lock например в C#, который гарантирует что одновременно участок кода может выполняться только одним потоком.
тут такого нет, все что в рамках транзакции, может одновременно выполняться несколькими потоками, процессами и тд..... просто если возникает конфликт, все откатывается. но что делать после этого, ты должен решать сам.
Easy Rider
а конфликты возникают очень-очень часто. ну фактически, почти всегда. если в базу пишется что-то, операция записи же может выполняться много миллисекунд, и если паралельно идет запись в разных местах, то у тебя 100% возникнет конфликт максимум в течение нескольких секунд.
FOR YOU
Easy Rider
что делает монга при этом? Ничего. Просто выдает ошибку.
Специальные утилиты прикрученные сбоку изолентой, наподобие WithTransaction, при этом будут повторять попытку записи до победного конца, выглядит это решение сомнительно по эффективности, т.к. время когда монге наконец удатся провести транзакцию, не гарантированно
Easy Rider
Но зато в монге есть куча способов выплнять операции атомарно.
По возможности именно так и надо делать. Но это порой, довольно сложно. Сами операторы эти весьма сложны.
Easy Rider
Реляционные БД основаны на строгой математической модели, которая сама, уже в силу своей строгости, решает массу проблем.
А монга это просто коллекции. Ну то есть все равно что массивы или списки в любом ЯП, только с продвинутыми фичами вроде сохранения на диск, индексами и тд, но если попытаться использовать это для серьезной бизнес-логики, то у тебя со временем появится куча проблем по поводу того как сохранять консистентность базы, а в РСУБД такая консистентность обеспечивается просто математикой.
Подозреваю что многие, как и я, недооценили в свое время предупреждения о том что монгу надо использовать только в довольно узких сценариях, и ей не следует пытаться заменить РСУБД.
FOR YOU
Реляционные БД основаны на строгой математической модели, которая сама, уже в силу своей строгости, решает массу проблем.
А монга это просто коллекции. Ну то есть все равно что массивы или списки в любом ЯП, только с продвинутыми фичами вроде сохранения на диск, индексами и тд, но если попытаться использовать это для серьезной бизнес-логики, то у тебя со временем появится куча проблем по поводу того как сохранять консистентность базы, а в РСУБД такая консистентность обеспечивается просто математикой.
Подозреваю что многие, как и я, недооценили в свое время предупреждения о том что монгу надо использовать только в довольно узких сценариях, и ей не следует пытаться заменить РСУБД.
Понимаю, просто нужно про что то новое написать статью, а вот про что - хз..
RavenDB увидел, тоже NoSQL но с транзакциями
Easy Rider
FOR YOU
И я ж не в Q1 собираюсь..
Easy Rider
научная статья должна открывать что-то новое, а тут этого нет. это тянет на очередную статью на хабре на тему "как я соблазнился легкостью монгодб и огреб геморой на пол жизни". там таких уже много
Easy Rider
Есть разные подходы в построении хранилищ данных больших систем, например в сфере ecom
Стоит вопрос, использовать polyglot persistence, мультимодальную дб или придумывать, что то свое
Как вариант был, это отказ от реляционнки в пользу nosql и тогда в первом подходе мы избавимся от одного вида БД -> уже что-то новое
Научная статья не должна быть про великие открытия и то, как все у тебя хорошо получилось
Открой semanticscholar и посмотри про что люди пишут, бывают статьи, которые пишут об одном и том же
я разрабатываю в основном сайты обычные. и для них монга не подходит. ну ее можно использовать (чем я и занимаюсь), но она просто не подходит, РСУБД бы подошла лучше.
Но это не значит что ее нельзя использовать для того для чего она и создавалась.
Easy Rider
для каких-то научных применений, например, для того чтобы писать быстро какие-нибудь данные с датчиков, она конечно подходит как нельзя лучше. особенно если эти данные не структурированные.
но если есть сложные отношения между сущностями, то в монге тебе самому придется реализовывать функционал РСУБД, но при этом будет куча багов, и все сценарии ты не предусмотришь
FOR YOU
Это уже понял, спасибо, что пояснил)
Easy Rider
Удаление аккаунта юзера с сайта выглядит как-то так...
А в РСУБД это были бы связанные сущности, достаточно было бы удалить одну и каскадно бы удалились все с ней связанные. А тут придется еще возвращаться, что-то добавлять, если у тебя добавилась коллекция.
FOR YOU
Vladimir
Ящик водки
Ящик водки
Реляционные БД основаны на строгой математической модели, которая сама, уже в силу своей строгости, решает массу проблем.
А монга это просто коллекции. Ну то есть все равно что массивы или списки в любом ЯП, только с продвинутыми фичами вроде сохранения на диск, индексами и тд, но если попытаться использовать это для серьезной бизнес-логики, то у тебя со временем появится куча проблем по поводу того как сохранять консистентность базы, а в РСУБД такая консистентность обеспечивается просто математикой.
Подозреваю что многие, как и я, недооценили в свое время предупреждения о том что монгу надо использовать только в довольно узких сценариях, и ей не следует пытаться заменить РСУБД.
что бы не пороть чушь, советую эту книгу, как минимум от корки до корки
Easy Rider
что бы не пороть чушь, советую эту книгу, как минимум от корки до корки
Прочитал немного, не от корки до корки, а того что касается транзакций в nosql, там так и пишут - в нем понятие acid не определено так же четко как в реляционных базах и под ним может подразумеваться что угодно.
А в чем чушь? Что такое по сути монго? В нем нет модели. Просто набор коллекций, которые ты сам между собой согласуешь как хочешь, но никаким принципам это следовать не обязано.
Alexander
Alexander
Alexander
Alexander
Easy Rider
Alexander
Ну, к слову, про применимость монги в небольших проектах можно порассуждать. Постгрес удобен нет, что он много где есть "менеджед". Но это совсем другая история...
Alexander
Easy Rider
Alexander
Easy Rider
Alexander
У меня был
Значит ты делал что-то неправильно.
Easy Rider
Alexander
Нормально делай, нормально будет. :-)
А говорить, что монга для специальных кейсов, это крайне странно и как бы намекает, что тымне разобрался с тем, как с ней работать.
Alexander
Добавлю, что про то, что по возможности надо пользоваться атомарными операциями, у тебя мысль верная. Ещё поддерживаю.
Easy Rider
Нормально делай, нормально будет. :-)
А говорить, что монга для специальных кейсов, это крайне странно и как бы намекает, что тымне разобрался с тем, как с ней работать.
Можно сделать на монге все что угодно, но простой пример, я выше скрин кидал. Мы удаляем юзера. И есть еще десяток коллекций, в которых есть Id юзера. Сами по себе документы с идом этого юзера не исчезнут. Потому что схемы нет. Надо будет написать код удаления из каждой коллекции. И таких случаев в небольшом проекте может быть много. Пока ты просто добавляешь данные, все отлично. Но когда тебе надо их редактировать и тем более удалять, начинаются раздумья «а где еще в этот момент что-то может пойти не так»
Alexander
Alexander
Ещё раз напомню, что у меня не "небольшой" проект. И подобных проблем мы в реальной жизни не наблюдаем. :-)
Alexander
Easy Rider
В счетчике посетителей к меня например каждый запрос к апи пишется вместе со всеми заголовками и телом post. По моим расчетам, при нормальной работе, этого хватит на полгода. Зачем мне хранить данные о всем этом, давно ненужные? К тому же если размер коллекции растет, то индексы не влезут в рабочий набор и скорость критически просядет
Alexander
Alexander
Alexander
Alexander
Alexander
Это не данные твоей бизнес-логики.
Alexander
Пока еду в такси подумал о том, что как простое быстрое решение писать запросы в базу норм. Но должна быть задача на рефакторинг, после того, как проект будет запущен. Ничего сложного в этом нет и много времени не займёт. :-)