Диёр
нет не часто, если по уму
Ну вот как в монге какой-нибудь правовой документ или научную статью хранить, если там повсюду ссылки на другие статьи
Диёр
Вообще каждое слово на что-нибудь ссылается
Диёр
И на него ссылаются
Андрей
А страница в вики это документ)
ну и храни как документ, юзверь откроет и кликнет сам куда надо, один раз в месяц и без монги
Диёр
ну и храни как документ, юзверь откроет и кликнет сам куда надо, один раз в месяц и без монги
Ну так в итоге у тебя в документе хранится ссылка на другой документ
Андрей
всеравно случай вики не так уж и част кмк, не встречал ни разу
Vladimir
я тоже замечал, что почти всегда документы должны друг на друга ссылаться по бизнес логике. А если вдруг такой кейс что нет, так и вообще можно по базе на тип документа держать тогда
Roman
нет не часто, если по уму
Часто или не часто, а без этого никак. Ни один домен не ложится на 100% на полную денормализацию.
Shub
вы упускаете из виду пару важных моментов технического характера
Shub
во-первых, 99% кодерков не могут в документ-ориентированный дизайн и поэтому все аппликации на монге очень быстро упираются в проблему отсутствия транзакций, точнее, даже не транзакций, а атомарной записи в несколько документов
Диёр
чота совсем грустно
Shub
я бы сказал что в большинстве юзкейсов с монгой как с основным хранилищем кромешный ад начинается именно тут
Anonymous
Чем чревато отсутствие транзакций я понимаю. Но причем тут документоориентированночть?
Shub
потому что упомянутые 99% дизайнят по принципу "документ == таблица"
Shub
ну с поправкой, что есть тип данных "структура", которого нет в стандартном скуэле
Shub
то есть они дизайнят будто это postgres + jsonb
Anonymous
А надо?
Shub
что надо?
Anonymous
А как надо дизайнить?
Shub
в смысле. как надо?
Shub
ну как минимум считать, что документ - это aggreggate root, со всеми вытекающими
Anonymous
ну как минимум считать, что документ - это aggreggate root, со всеми вытекающими
Я не улавливаю связь с транзакциями. Можно как для идиота объяснить?
Shub
ну обычно дизайнят что-то типа "документ Юзер ссылается на документы ЮзерТекст\ЮзерАватар\ЮзерХХХ". то есть есть n (n >= 2) документов, между которыми требуется консистентность.
Shub
монга не позволяет писать в оба документа с гарантией атомарности
Shub
бай дизайн.
Shub
монга часто не позволяет писать в один документ с гарантией атомарности или дурабилити, но это не бай дизайн, это просто там багов миллион
Anonymous
Так их достаточно слить воедино и будет атомарно же.
Anonymous
В этом же смысл Монги не?
Shub
Так их достаточно слить воедино и будет атомарно же.
я думаю, ты был бы превосходным коллегой. чем я провинился в прошлой жизни, что мне приходится искупать со всеми этими десятикратными иженерами?
Shub
в общем, это проблема номер раз. последствия этой проблемы - доморощенные "грязные" транзакции, которые часто не работают
Диёр
а у меня на старом проекте один из фронтендщиков говорил что надо постгрю выкидывать и брать монгу потому что жсон закинул и збс
Shub
проблема номер два - агреггатные запросы в монге (аналоги GROUP BY) требуют отдельного инженера на фултайм
Shub
потому что внезапно для этого требуется писать мап-редьюс джобы, а они ни в одном клиенте толком не поддерживаются. монга предлагает херачить туда жсон хранимки вербатим
Диёр
сколько проблем от этой монги
Shub
а у меня на старом проекте один из фронтендщиков говорил что надо постгрю выкидывать и брать монгу потому что жсон закинул и збс
ты проси его развить мысль дальше. спроси у него че-нить элементарное, мол, какая у нас будет модель данных?
Shub
и если он даже сумеет проблеять что-то вразумительное, поинтересуйся, кто будет писать эту тонну кода, чтобы адаптировать текущий дизайн, базирующийся на реляционке? ну и заодно какие будут гарантии консистентности этой всей темы?
Shub
если речь про вспомогательные вещи, типа "давайте запилим кэш на монге" - то это пожалуйста, монга для этого хороша, даже синхронная версия очень быстрая
Shub
а в остальном я нахожу свое, особенное удовольствие - задавать уточняющие вопросы
Диёр
не, в его представлении постгря или монго это чисто хранилище данных и вся их разница в том что на постгресе надо скулем пользоваться и описывать таблицы и связи, а в монге жсоноподобное закидывать
Shub
типа, ну у нас же микросервисы, да? как там с попыткой одновременного доступа к документу дела?
Shub
не, в его представлении постгря или монго это чисто хранилище данных и вся их разница в том что на постгресе надо скулем пользоваться и описывать таблицы и связи, а в монге жсоноподобное закидывать
ну в рамках хелловорлд там таки действительно нет разницы. но вот джанговские поллз на монге запилить уже крайне нетривиальная задача
Диёр
для меня тема констрейнтов в монге всё ещё не раскрыта
Диёр
все варианты которые я находил это всё к херам лочить и ручками проверять
Shub
для меня концептуальная целостность монги все еще открытый вопрос
Shub
а если говорить про ее имплементацию - то монга вопрос закрытый. это не бд, это hey save me maybe
Shub
https://aphyr.com/posts/284-call-me-maybe-mongodb
Shub
помимо того, что говорит афир - почитайте еще и комменты, там просто жир
Диёр
есть ещё datomic - не знаю что это такое, но в кложур все на него фапают
Anonymous
и если он даже сумеет проблеять что-то вразумительное, поинтересуйся, кто будет писать эту тонну кода, чтобы адаптировать текущий дизайн, базирующийся на реляционке? ну и заодно какие будут гарантии консистентности этой всей темы?
Звучит как-то недоброжелательно. А вообще, есть тьма задач, где информация носит вторичный характер и допустимы определенные послабления взамен на простоту использование и как раз отсутствия дизайна. Будет лучше и лично я буду тебе больше благодарен, если ты будешь делиться своим жизненным опытом и помогать другим взрослеть, а не пускать сопли о том какие вск кругом долбоебы, т.к. последнее не способствует улучшению ситуации.
Диёр
ну я про конкретный кейс с тем фронтендщиком
Anonymous
А.
Anonymous
Я думал ты про мой вопрос о транзакционности.
Диёр
ну тот типчик в принципе странный был: "ну зачем все эти типы, тесты, можно же просто сразу четенько писать код без ошибок"
Диёр
ну опять таки явно не наш кейс был, там довольно сложный гуй был какой-то
Ilya
https://aphyr.com/posts/284-call-me-maybe-mongodb
7 лет прошло. Ничего не изменилось?
Ilya
Что ж...
Андрей
7 лет прошло. Ничего не изменилось?
изменилось, они почти все пофиксили, каменты тоже устарели
Андрей
какие бы ни были быстрые джойны в постгре итд. иногда (иногда), да почти всегда, лучше когда их не надо. - jsonb в постгре, это нетипизированная хрень еще хуже чем bson, - запросы по ним не менее страшненькие чем монговские, там хотя бы как все остальное - настроить репликацию в постгре, итд вразы сложнее чем добавить ноду в монге, лучше уж сразу couchdb, вот где вам нужен будет инженер на фултайм несмотря на это постгря - лучшая реляционная база, была, есть и долго еще будет
Андрей
во-первых, 99% кодерков не могут в документ-ориентированный дизайн и поэтому все аппликации на монге очень быстро упираются в проблему отсутствия транзакций, точнее, даже не транзакций, а атомарной записи в несколько документов
наблюдаю тот же самый икспириенс с этими кодерками и постгрей, да что там базы, асинк авайт или тот же еф вводит почти любого в ступор, прям каждый раз открываю неизведанные границы вселенского невежества. часто забываю не принимать этот факт близко к сердцу и кошельку монга или еще какой дизайн тут ваще не при делах
Андрей
больше типов - более типизированный. Например есть int32, int64, double и decimal128. Ещё сам формат оптимирован для быстрого поиска объектов и полей внутри
Roman
В постгре тоже отдельный механизм индексирования jsonb. И поиск там шустрый. Насчёт numeric типов не знаю ситуацию
Диёр
Ъуъ
Диёр
По качеству, например, hello world принимающий 1000 http запрос на node.js 8-10мб оперативной и 1-но ядно, на java это 300-500мб(только на старт) и все 8 ядер не хватет на обработку. при этом на node рост памяти до ~100мб.
Диёр
Это что надо сделать чтобы 8 ядер не хватало на такое
Ayrat
ОХ ЕБАТЬ КАКАЯ СКАЛА ТУПАЯ ПИЗДА
Ayrat
вот такой жсон { “value”: 1 } где валуе может быть, а может не быть и вообще оно Double при таком классе: case class Foo(value: Option[Double]) она парсит в (ВНИМАНИЕ) Foo(value = Some(1)), где 1 - это ИНТЕЖЕР в рантайме
Ayrat
потому что ебаное стирание типов
Ayrat
НУ ПИЗДЕЦ
Sergey
потому что ебаное стирание типов
эт к жвм вопросы тогда не?