Алексей
наверное речь про небольшой оверхэд в гошном коде
d.kim
Какие именно? О чем речь?
ну, тебе как минимум надо переводить твой код в SQL
Kurush Qosimi
А что за оверхэд?
Цепочка вызовов функций больше думаю это и есть оверхед
Eugene
речь про неоптимально составленные запросы. в случае обыччного круда орм работает, как только что-то сложное пошло - орм плывет и все сводится обратно к билдеру или самописным кастом запросам. которые, впрочем, могут жить рядом с орм.
Алексей
Я знаю. Хотя сейчас тут за ORM топлю ) Простым джойном
нет, простой джойн даёт простой джойн и результат там плоская таблица (как и практически любой результат в sql), а потом предлагается руками это ещё распихивать по родитель - слайс детей что orm (ну по крайней мере gorm) может легко делать автоматически
Алексей
речь про неоптимально составленные запросы. в случае обыччного круда орм работает, как только что-то сложное пошло - орм плывет и все сводится обратно к билдеру или самописным кастом запросам. которые, впрочем, могут жить рядом с орм.
1. тот же gorm и так можно считать своего рода query builder, там частенько всё к кускам обычного sql сводится 2. можно всякие простые круды делать через орм, а что-то особо забористое делать на сыром sql (через орм опять же, но орм тут особой работы не делает)
Stepan
ORM не плывет. Просто сложные запросы в нем мало кто умеет делать, на SQL сильно проще
еще орм далек от sql, и муторно тестить как орм построит запрос.. вот вот столкнулся с этой проблемой на проекте с орм
Stepan
и тебе не всегда нужна цельная сущность, как сущность. кроме апдейта и инсерта
Stepan
разве что, тесты писать удобно с орм и то сомнительно
CatLecter
Много кто ) Но, Я так и не понял, почему оно медленнее чем SQL. Не больший контроль, не ещё что-то, а про скорость сразу говорят. Как будто ORM из всех вариантов самый неоптимальный SQL генерит
Есть куча причин почему оно медленнее. Попробуй реализовать одну задачу на ORM и SQL, проведи нагрузочное тестирование, будешь удивлен.
Roman
Есть куча причин почему оно медленнее. Попробуй реализовать одну задачу на ORM и SQL, проведи нагрузочное тестирование, будешь удивлен.
Может ты озвучишь эти причины? А то правильно нагрузочно потестить именно что надо - целая наука
Алексей
Задача на джуна. Это обычная рабочая задача. Почему это должно быть проблемой?
Потому что это не должно быть задачей в принципе. Джуны не должны её решать. Потому что она легко решается орм.
CatLecter
А что за оверхэд?
Язык в рантайск должен тратить ресурсы на диспетчеризацию запросов как минимум.
Tima
Может ты озвучишь эти причины? А то правильно нагрузочно потестить именно что надо - целая наука
например ряд ормок когда подгружают релейшены делают это отдельным селектом, а не джоином
CatLecter
Цепочка вызовов функций больше думаю это и есть оверхед
Учитывая что цепочка может быть очень длинной) меньшую часть из них пишет разработчик сам.
Tima
на большом количестве строк дает ощутимую просадку
Tima
ну и в целом более сложные запросы не всегда оптимально составляются внутри ормки
CatLecter
На го не замерял, но в питоне задача решенная на алхимии более чем в 5 раз медленнее, чем простой SQL через asyncpg
Tima
ну тут дело даже не в секундах на конкретную задачу
Roman
ну и в целом более сложные запросы не всегда оптимально составляются внутри ормки
Более сложные задачи не всегда оптимально решаются на go разработчиками из мяса )
Tima
а в том что внутри эксплейна возвращается
Tima
Более сложные задачи не всегда оптимально решаются на go разработчиками из мяса )
согласен, но в случае сырого sql у тебя хотя бы есть шанс написать оптимально, ормки часто такого шанса не дают вообще
Борис
#резюме #parttime Занятость: частичная (20 часов в неделю). Senior Golang Developer (более 5 лет опыта) Ставка: 3000 рублей/час. Контакты - @emplonics. Привет. Ищу частичную занятость на проект любой сложности. Мои достижения как golang разработчика: - Участвовал в разработке собственного S3 хранилища. - Потоковая обработка видео - транскодинг и т.д. для сервиса видеошеринга. - Внедрение распределенных транзакций в систему, состоящую из 20+ микросервисов. - По мелочи: внедрение метрик/трейсов в проект; работа с локальным кэшем для сокращения трафика сети; написание Lua-скриптов для redis (eval); написание продюсеров/консьюмеров для kafka и nats jetstream; написание автотестов; работа с buf/easyp.
Timur
Кого зарефать в бигтех пишите в лс, + подскажу что спрашивают, как проходит. (От мидл и выше)
Алексей
Егор
тогда лучше не писать на го
Алексей
Aleksandr
в реляционной бд нет, в приложении есть
в этом и состоит ваша проблема
Алексей
в этом и состоит ваша проблема
да, и object-relational mapping (сокращённо orm) её решает😁
Алексей
ну или её решают программисты-пуристы которые не пользуются orm по религиозным соображениям
Aleksandr
да, и object-relational mapping (сокращённо orm) её решает😁
а ещё её решает избавление от ооп-мышления
Алексей
потому что апишка (и клиенты юзающие эту апишку) примерно всегда хочет структурированное апи с вложенными сущностями, а не плоскими таблицами
Алексей
ваш изначальный вопрос решается одним JOIN
на уровне бд - да, на уровне приложения - этого недостаточно
Aleksandr
на уровне бд - да, на уровне приложения - этого недостаточно
я ответил на ваш вопрос. Если вы хотели узнать что-то иное, то нужно было задать другой вопрос
Aleksandr
на уровне приложения нужно будет 2 структуры создать и db.Query() написать
Алексей
на уровне приложения нужно будет 2 структуры создать и db.Query() написать
на уровне приложения надо будет получить из бд плоские данные + руками их "структуризировать" распихав по структурам и вложенным в них слайсам других структур ну или заюзать орм которая сделать такое же, но автоматически
Алексей
вот и вопрос есть ли такая штука которая без орм может это автоматически сделать
Aleksandr
вот и вопрос есть ли такая штука которая без орм может это автоматически сделать
Тут только 2 варианта, вы его сами разрулите или за вас его орм разрулит. Любая система которая решает вашу проблему, имхо будет орм
Алексей
хорошо спасибо, тогда смысла отказываться от орм особого нет
CatLecter
на уровне приложения надо будет получить из бд плоские данные + руками их "структуризировать" распихав по структурам и вложенным в них слайсам других структур ну или заюзать орм которая сделать такое же, но автоматически
блин) друг, SQL может все и даже больше, чем делает орм) как можно говорить что проблема не решается, если орм генерирует в итоге тот же SQL)) в чем проблема сразу написать нужный запрос вместо орм?)
Максим
блин) друг, SQL может все и даже больше, чем делает орм) как можно говорить что проблема не решается, если орм генерирует в итоге тот же SQL)) в чем проблема сразу написать нужный запрос вместо орм?)
а зачем писать то, что можно не писать? зачем писать циклы наполнения из массивов пришешдших и раскладывать их туда сюда раз за разом? вам за время платят, это понятно, но вы когда-нибудь тратили свои деньги на разработку? написал модель, и все готово —весь набор типовых ситуций :)
CatLecter
Мне не платят за время) у меня свой продукт)
CatLecter
допустим, но зачем? если можно написать модель
Какой длины будет реальная цепочка вызовов? Сколько там будет рефлексии? Какой оверхед на диспетчеризацию методов ОРМ?
CatLecter
тогда я удивлен
ничего удивительного)))
Segmentation
Парни, а тут вакансии бывают?
John
еще орм далек от sql, и муторно тестить как орм построит запрос.. вот вот столкнулся с этой проблемой на проекте с орм
А, главное, непонятно зачем. Разумеется, если это не проект, где сущности описываются декларативно, типа GraphQL. Я кайфую от sqlc. Написал sql файл, запустил кодеген и репо-слой готов. Сказка!
John
Парни, а тут вакансии бывают?
Время кризисное, экономика падает, работы мало
CatLecter
Скорее всего мизерный
Попробуй и проведи нагрузочное) хотя бы каким-нибудь wrk самое простое) будет интересно всем посмотреть на результаты
CatLecter
Какая разница, если в приложении есть сетевые запросы?
Как этот вопрос матчится с моим предыдущим тейком?)
CatLecter
зачем?
потому-что ты говоришь "скорее всего", что подразумевает под собой набор догадок, а не реальных метрик) ну и просто всем интересно будет думаю
Mark
Везде баланс важен, чего передёргивать. Часто удобен ORM, при этом иногда запрос хитровыебанный, который не часто встречается, ну его и сделайте в SQL
CatLecter
ну и зачем вообще тогда го, если sql может всё? давайте тогда бэк на чистом sql делать😁
а я тебе отвечу) выбор языка иногда зависит чисто от бизнесовых требований) например когда нужно поставлять клиентам приложение целиком и крутить на их машинах) как защитить свой код как интеллектуальную собственность тогда?)
CatLecter
этот тейк не имеет отношения к обсуждению орм, но хотел заметить что выбор языка это в последнюю очередь про скорость скорее всего)
Александр
блин) друг, SQL может все и даже больше, чем делает орм) как можно говорить что проблема не решается, если орм генерирует в итоге тот же SQL)) в чем проблема сразу написать нужный запрос вместо орм?)
я не огромный эксперт в области использования различных орм, но кажется что орм гарантириует экранирование и обеспечивает безопасность, что лучше, чем экранировать запросы вручную
CatLecter
ну я не замечал такого страшного оверхеда от горм и не пытаюсь сделать всё на sql
ну, а все остальные замечают) такими абстрактными ответами можно перекидываться сколько угодно))
Mark
Какого-то рода компромисс - sqlc