yopp
А есть какая-нибудь развернутая статья про этот подход?
https://www.mongodb.com/blog/post/building-with-patterns-the-attribute-pattern
Josh
их можно избежать сразу, практически любые
yopp
Потому вы не знаете проблемы
yopp
А значит вы не можете подобрать решение
Josh
ну и что, пальцем в небо тыкать до появления проблем
yopp
Ваши гипотезы практически гарантированно будут ошибочными, в лучшем случае. А в худшем ещё и создадут много новых проблем, что более вероятно
yopp
Не заниматься предварительной оптимизацией
Josh
так это не оптимизация, а подход
yopp
Это оптимизация
yopp
В вакууме :)
Josh
не согласен чет совсем
yopp
Я не против доменного подхода, но идея без очень весомых аргументов хранить две версии данных я считаю совершенно неразумным
Josh
тогда бизнес на модели данных "как удобней"
yopp
Это в три раза сложнее, чем хранить только конечное состояние
yopp
На деле скорее всего на порядок
yopp
Даже вычисление конечного состояния прямо из эвентов это адски дорого и очень тяжело масштабируется
Josh
думал сталкивался на практике с подходом, монга чуть ли ни с коробки все обеспечит
yopp
Я сталкивался с эвент сорсингом, вычислением и кешированием. Дорого :)
yopp
Три основные проблемы: 1) Хранить события дорого. Обычно это небольшие документы, которые приходится сложно индексировать и в лучшем случае на придётся хранить в два раза больше данных из-за индексов. Плюс эти собтытия immutable, append only и никогда не потеряют актуальность, иначе по новой вычислить состояние будет невозможно. Т.е. это база будет бесконечно расти 2) Вычислять состояние из событий архисложно. Есть два основных подхода: корректный — каждый раз вычислять по новой из всех событий относящихся к одно сущености; корректный в жестких условиях — довычислять из предыдущего состояния и нового события. Первое относительно просто в реализации и работает с ситуациями когда поставщиков событий больше одного. Тяжело масштабировать, стоимость вычисления и хранения будет увеличиваться с увеличением числа документов. И это будет в лучшем случае log2 рост Второй работает только в жестких условиях: события всегда приходят в гарантированном порядке. Гарантировать порядок более-менее можно только когда есть один однопоточный продюсер событий. Когда потоков больше одного или продьюсеров больше одного, у вы испытаете дикий ужас от того насколько сложно гарантировать порядок. И дорого. 3) Хранение состояния. Кроме того что у нас де-факто дублируются данные из хранилища событий, вам ещё придётся второй раз решать (== изобретать) что-то для consistency. Так как наверняка вам придётся хранить события и состояниях в разных базах, то у вас не будет инструментов на её уровне. Вероятнее всего, всё сведётся к линеаризации вообще всего, включая чтения из базы. Эти три вещи это уже масштабы десятков миллионов долларов в год
yopp
И это верхушка айсберга
yopp
И годы разработки
Josh
Три основные проблемы: 1) Хранить события дорого. Обычно это небольшие документы, которые приходится сложно индексировать и в лучшем случае на придётся хранить в два раза больше данных из-за индексов. Плюс эти собтытия immutable, append only и никогда не потеряют актуальность, иначе по новой вычислить состояние будет невозможно. Т.е. это база будет бесконечно расти 2) Вычислять состояние из событий архисложно. Есть два основных подхода: корректный — каждый раз вычислять по новой из всех событий относящихся к одно сущености; корректный в жестких условиях — довычислять из предыдущего состояния и нового события. Первое относительно просто в реализации и работает с ситуациями когда поставщиков событий больше одного. Тяжело масштабировать, стоимость вычисления и хранения будет увеличиваться с увеличением числа документов. И это будет в лучшем случае log2 рост Второй работает только в жестких условиях: события всегда приходят в гарантированном порядке. Гарантировать порядок более-менее можно только когда есть один однопоточный продюсер событий. Когда потоков больше одного или продьюсеров больше одного, у вы испытаете дикий ужас от того насколько сложно гарантировать порядок. И дорого. 3) Хранение состояния. Кроме того что у нас де-факто дублируются данные из хранилища событий, вам ещё придётся второй раз решать (== изобретать) что-то для consistency. Так как наверняка вам придётся хранить события и состояниях в разных базах, то у вас не будет инструментов на её уровне. Вероятнее всего, всё сведётся к линеаризации вообще всего, включая чтения из базы. Эти три вещи это уже масштабы десятков миллионов долларов в год
2 mq уж разрулить можно
yopp
Это на словах просто
yopp
Плюс в итоге у вас будет огромное количество точек отказа
yopp
Вам брокеров надо будет масштабировать, обеспечивать для них гарантии
yopp
Уметь точно линеаризовать события
yopp
Даже read own writes уже будет крайне нетривиальная задача
yopp
А самое главное это абсолютно бесполезная в ~100% случаев система
yopp
Я вижу для подобных систем применение, когда у нас события могут приходить с большой задержкой, но нужно любое последнее известное состояние. Плюс нужен тотальный аудит
yopp
Но там где реально есть такие требования, там не в паттернах проблема совершенно :)
yopp
И деньги там на такие вещи тоже есть
yopp
jpmorgan смогли
Да, потому что у них есть и проблемы, которые решаются таким подходом и деньги на их решение
Josh
в яндексе тож налегать начали на ддд
yopp
А поделить на read и write домены можно и без этого
Dmitry
здравствуйте, можно ли переименовать поле в populate?
yopp
допустим, из _id в id
думаю что проще всего сделать виртуальный аттрибут для схемы из populate
Aidyn
Всем привет! Ребят, кто знает как отправить логи в Монгу ?
Melonges
где можно посмотреть условия mongodb в плане оплаты? Что бесплатно, а за что деньги нужно платить? Не могу найти
yopp
Всем привет! Ребят, кто знает как отправить логи в Монгу ?
У вашего logging агента или консьюмера должна быть интеграция. Ну или вы можете просто insert делать, но это скорее всего не самая лучшая идея
Melonges
все каждый раз логинятся в клауде монги?
Melonges
меня выкидывает каждый день
yopp
А, вы про атлас?
Melonges
на любом ресурсе
Melonges
постоянно не залогинен
Andrey
Всем привет! Ребят, кто знает как отправить логи в Монгу ?
logstash с output модулем(предыдущей версии), fluentd - аналогично
Aidyn
@dd_bb @AndrewFoma , спасибо ! Попробую ваши варианты
Вадим
В монгусе это будет attrs: [AttributeValue]; Atttribute {name: ..., type: ..., .... } AttributeValue: {a: refs Attribute, v: ...} Product: attrs: [AttributeValue]
Скажите, а вот так это работать не будет? Без создания дополнительной коллекции. Если сделать по лекалам той статьи, что вы дали.
yopp
Так тоже можно, но если вы хотите хранить человекочитаемые атрибуты, то логичнее вынести всю «человеческую» часть в отдельную схему и хранитьтолько её ref
Ігор
Случай удалили колекцию в Mongo Atlas, можно теперь как-то востановить её?
Artem
А фиксится баг с кэшированием уникальных полей в монгусе, знает кто? а то кэшируется иногда, убираю проверку ан unique, а она остается
Melonges
тут неразговорчивые челы сидят
yopp
Случай удалили колекцию в Mongo Atlas, можно теперь как-то востановить её?
Если не подключена услуга резервного копирования, то нет
yopp
Вы имеете ввиду in-memory storage engine?
Oleh Kopyl
Ребят, подскажите, а в монге или pymongo можно как-то указать при insert_one что делать если в базу добавляется документ, в котором все то же самое, что и в одном из существующих документов, кроме _id ? Что-то типа .insert_one(, if_exists="overwrite") .insert_one(, if_exists="pass")
Viktar
Нет. Это совершенно другой документ. Но вы можете указать уникальный индекс по полям. И в случае дублирования, будет ошибка
yopp
Не знаком с этим пакетом. Могу предположить что сервер может перезапускаться между запусками тестов?
yopp
upsert вставит новый документ, если нет документа удовлетворяющего условию в query, если документ есть, то он его обновит
Melonges
Алло
Vladimir
Я юзал, все норм было, в nestjs. даже юзал с проверкой указана ли конфига в .env или подымай в памяти. Но правда задолбало наливать базу, поэтому оставил это добро только в тестах, но все работало, а что за вопрос?
yopp
Алло
Будет продуктивнее если вы зададите свой вопрос
yopp
Памагите с mongodb
Чем именно? :)
azabroflovski
Чем именно? :)
Гляньте, шо этот молодой человек себе позволяет
Melonges
фотошоп
Nick
))
Vladimir
Он же в памяти все хранит, Точно ничего не перезапускаете? Какие нибудь webpack nodemon и прочее?
Viktar
Всем привет. подскажите, как вывести записи _id которых начинаются не с 5ed. _id это ObjectId
yopp
$lte 0x5ed0_0000_0000_0000_0000_0000 $gte 0x5ee0_0000_0000_0000_0000_0000
Viktar
А конвертить к строке не надо?