|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Я уже несколько лет как прокачивают навыки дба, оставаясь при этом и разработчиком. Да вакансий дба меньше, ну а рынок толковых спецов по бд ещё меньше, на порядок! Ну а по рынку фриланса, в том числе зарубежного, особенно на фоне популярности всяких там три, я понял, что работы для дба непочатый край. Надо же кому-то потом исправлять то, что наговнокодили разрабы, особенно фанаты орм. :) Кстати, по фрилансу много заказов от самих разработчиков. А то с течением времени их говноподелка почему-то стала дико тормозить. Докупили железа, но это помогло ненадолго, а потом и вовсе перестало помогать. Вот тогда-то они и приходят к дба. :) Так что фанаты тем - это благо для дба, без работы не останемся)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2018, 13:07 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte, Можно пример того, что говнокодят фанаты ОРМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 04:54 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Вам что, ссылку на таск на бирже фриланса или описать словами? :) Если словами, то, различные crm\erp-системы, где более-менее сложная логика, аналитика. Один заказ был, разработчик написал ПО под MS SQL на каком-то entity фреймворке. С увеличением размеров данных, как я понимаю, все стало дико тормозить. Клиент сам увидел, во что превратилась его система и решил переписывать без entity, логику переводить на сервер, в хп. Ко мне обратились как к специалисту по БД. Другой вариант. У одной украино-американской конторы есть ПО на ОРМ, только какой-то по ходу свой движок. Какие-то запросы они все же сами пишут. Куча клиентов по всему миру. ПО умеет работать с MS SQL и с PostgreSQL. Сильно заковыристых запросов у них нет. Большую часть логики реализовывают на клиенте. Но вот загрузка данных в систему(порядка 50млн. записей), с каким-то расчетами занимает больше 2ч на MS SQL. Ну типа их заказчиков это устраивает... Хотя, думаю, с логикой на сервере там можно было бы все за полчаса, максимум, загрузить, с расчетами, а то и быстрее. С MS SQL у них все просто: добавили памяти, работает на столько-то шустрее. С PostgreSQL так не получается, надо настраивать. Вот они ко мне обратились насчет донастройки PostgreSQL. p.s. я не говорю, что ОРМ - это однозначное зло. Для автоматизации простых задач без сложной логики их можно использовать, или для автоматизации простых линейных операций в сложном ПО. А для задач, где сложная логика, таки придется уметь писать качественные запросы и уметь их оптимизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 21:21 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte, Сорри, но я все же не увидел нигде вины orm-фреймворков. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 23:55 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
yabs Megabyte, Можно пример того, что говнокодят фанаты ОРМ? Спойлер (@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 datetime2,@P5 int,@P6 nvarchar(4000),@P7 nvarchar(4000),@P8 nvarchar(4000),@P9 nvarchar(4000),@P10 nvarchar(4000),@P11 int,@P12 int,@P13 int,@P14 int,@P15 nvarchar(4000),@P16 nvarchar(4000),@P17 int) SELECT TOP 100000 c0_member.member_id FROM c0_member WHERE (c0_member.attribute_18 IS NOT NULL AND ((((c0_member.attribute_3994 = @P0 OR c0_member.attribute_3994 = @P1) AND ((c0_member.attribute_3595 <> @P2 OR c0_member.attribute_3595 IS NULL) AND (c0_member.attribute_3600 <> @P3 OR c0_member.attribute_3600 IS NULL)) AND (DATEDIFF(DAY,@P4,c0_member.attribute_4195) <= @P5 OR c0_member.attribute_4195 IS NULL) AND ((((NOT(c0_member.attribute_5 = @P6) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P7) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P8) OR c0_member.attribute_5 IS NULL))) AND (NOT(c0_member.attribute_5 = @P9) OR c0_member.attribute_5 IS NULL) AND (((NOT(c0_member.attribute_5 = @P10) OR c0_member.attribute_5 IS NULL) OR c0_member.member_id NOT IN (SELECT recipient_id FROM c0_sending_protocol prot JOIN c0_sending_log log ON prot.sending_id=log.sending_id WHERE log.mailing_id = @P11 AND ( prot.state = @P12 OR prot.state = @P13 OR prot.state = @P14 ) ))) AND (NOT(c0_member.attribute_5 = @P15) OR c0_member.attribute_5 IS NULL) AND (NOT(c0_member.attribute_5 = @P16) OR c0_member.attribute_5 IS NULL)))) AND (c0_member.attribute_51 IS NULL OR c0_member.attribute_51 < @P17))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 16:04 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
yabs Megabyte, Сорри, но я все же не увидел нигде вины orm-фреймворков. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 17:39 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
наткнулся, похоже в тему https://www.brentozar.com/archive/2018/07/common-entity-framework-problems-n-1/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 17:45 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
sti yabs Megabyte, Можно пример того, что говнокодят фанаты ОРМ? Спойлер (@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 datetime2,@P5 int,@P6 nvarchar(4000),@P7 nvarchar(4000),@P8 nvarchar(4000),@P9 nvarchar(4000),@P10 nvarchar(4000),@P11 int,@P12 int,@P13 int,@P14 int,@P15 nvarchar(4000),@P16 nvarchar(4000),@P17 int) SELECT TOP 100000 c0_member.member_id FROM c0_member WHERE (c0_member.attribute_18 IS NOT NULL AND ((((c0_member.attribute_3994 = @P0 OR c0_member.attribute_3994 = @P1) AND ((c0_member.attribute_3595 <> @P2 OR c0_member.attribute_3595 IS NULL) AND (c0_member.attribute_3600 <> @P3 OR c0_member.attribute_3600 IS NULL)) AND (DATEDIFF(DAY,@P4,c0_member.attribute_4195) <= @P5 OR c0_member.attribute_4195 IS NULL) AND ((((NOT(c0_member.attribute_5 = @P6) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P7) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P8) OR c0_member.attribute_5 IS NULL))) AND (NOT(c0_member.attribute_5 = @P9) OR c0_member.attribute_5 IS NULL) AND (((NOT(c0_member.attribute_5 = @P10) OR c0_member.attribute_5 IS NULL) OR c0_member.member_id NOT IN (SELECT recipient_id FROM c0_sending_protocol prot JOIN c0_sending_log log ON prot.sending_id=log.sending_id WHERE log.mailing_id = @P11 AND ( prot.state = @P12 OR prot.state = @P13 OR prot.state = @P14 ) ))) AND (NOT(c0_member.attribute_5 = @P15) OR c0_member.attribute_5 IS NULL) AND (NOT(c0_member.attribute_5 = @P16) OR c0_member.attribute_5 IS NULL)))) AND (c0_member.attribute_51 IS NULL OR c0_member.attribute_51 < @P17))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 20:41 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte yabs Megabyte, Сорри, но я все же не увидел нигде вины orm-фреймворков. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 20:41 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Насчет генерации говнокода ОРМом. Вот в этой статье пишется про "фирменный" почерк Django. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 21:53 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
yabs sti пропущено... вот могу предложить не самый плохой пример, кстати Спойлер (@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 datetime2,@P5 int,@P6 nvarchar(4000),@P7 nvarchar(4000),@P8 nvarchar(4000),@P9 nvarchar(4000),@P10 nvarchar(4000),@P11 int,@P12 int,@P13 int,@P14 int,@P15 nvarchar(4000),@P16 nvarchar(4000),@P17 int) SELECT TOP 100000 c0_member.member_id FROM c0_member WHERE (c0_member.attribute_18 IS NOT NULL AND ((((c0_member.attribute_3994 = @P0 OR c0_member.attribute_3994 = @P1) AND ((c0_member.attribute_3595 <> @P2 OR c0_member.attribute_3595 IS NULL) AND (c0_member.attribute_3600 <> @P3 OR c0_member.attribute_3600 IS NULL)) AND (DATEDIFF(DAY,@P4,c0_member.attribute_4195) <= @P5 OR c0_member.attribute_4195 IS NULL) AND ((((NOT(c0_member.attribute_5 = @P6) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P7) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P8) OR c0_member.attribute_5 IS NULL))) AND (NOT(c0_member.attribute_5 = @P9) OR c0_member.attribute_5 IS NULL) AND (((NOT(c0_member.attribute_5 = @P10) OR c0_member.attribute_5 IS NULL) OR c0_member.member_id NOT IN (SELECT recipient_id FROM c0_sending_protocol prot JOIN c0_sending_log log ON prot.sending_id=log.sending_id WHERE log.mailing_id = @P11 AND ( prot.state = @P12 OR prot.state = @P13 OR prot.state = @P14 ) ))) AND (NOT(c0_member.attribute_5 = @P15) OR c0_member.attribute_5 IS NULL) AND (NOT(c0_member.attribute_5 = @P16) OR c0_member.attribute_5 IS NULL)))) AND (c0_member.attribute_51 IS NULL OR c0_member.attribute_51 < @P17))) Зло ОРМ не в том, что там делается какой то кривой код условий запросов, например, с синтаксическими ошибками (с чего бы?), а в том, что разработчики не выделяют работу с данными как слой системы, требующий специалиста с соответствующей квалификацией. Поэтому получаются такие вот страшные поделия. Второй недостаток, вытекающий из первого - отсутствие отдельного слоя не позволяет полноценно контролировать работу с СУДБ, теми же самыми узкими специалистами. И если это прекрасно работает для приложения-записной книжки, то для более сложных и нагруженных систем будет проблемой, делая их неработоспособными в реальной жизни. Когда приложение разрабатывается и поддерживается много лет, так что сменились несколько поколений разработчиков, если ни один разработчик не представляет, как работает весь код системы, потому что его много, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 23:03 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
yabs sti пропущено... вот могу предложить не самый плохой пример, кстати Спойлер (@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 datetime2,@P5 int,@P6 nvarchar(4000),@P7 nvarchar(4000),@P8 nvarchar(4000),@P9 nvarchar(4000),@P10 nvarchar(4000),@P11 int,@P12 int,@P13 int,@P14 int,@P15 nvarchar(4000),@P16 nvarchar(4000),@P17 int) SELECT TOP 100000 c0_member.member_id FROM c0_member WHERE (c0_member.attribute_18 IS NOT NULL AND ((((c0_member.attribute_3994 = @P0 OR c0_member.attribute_3994 = @P1) AND ((c0_member.attribute_3595 <> @P2 OR c0_member.attribute_3595 IS NULL) AND (c0_member.attribute_3600 <> @P3 OR c0_member.attribute_3600 IS NULL)) AND (DATEDIFF(DAY,@P4,c0_member.attribute_4195) <= @P5 OR c0_member.attribute_4195 IS NULL) AND ((((NOT(c0_member.attribute_5 = @P6) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P7) OR c0_member.attribute_5 IS NULL) OR (NOT(c0_member.attribute_5 = @P8) OR c0_member.attribute_5 IS NULL))) AND (NOT(c0_member.attribute_5 = @P9) OR c0_member.attribute_5 IS NULL) AND (((NOT(c0_member.attribute_5 = @P10) OR c0_member.attribute_5 IS NULL) OR c0_member.member_id NOT IN (SELECT recipient_id FROM c0_sending_protocol prot JOIN c0_sending_log log ON prot.sending_id=log.sending_id WHERE log.mailing_id = @P11 AND ( prot.state = @P12 OR prot.state = @P13 OR prot.state = @P14 ) ))) AND (NOT(c0_member.attribute_5 = @P15) OR c0_member.attribute_5 IS NULL) AND (NOT(c0_member.attribute_5 = @P16) OR c0_member.attribute_5 IS NULL)))) AND (c0_member.attribute_51 IS NULL OR c0_member.attribute_51 < @P17))) Несчастные конечные пользователи, которым приходится работать с такими вот продуктами ради универсальности у кого-то там. PS: если уж запрос генерируется динамически, неужели нельзя лёгким движением руки убрать хотя бы все эти IS NULL OR ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 23:42 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Ruuu, Сорри, глаза можно сломать Ты б хоть запрос отформатировал предварительно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 23:59 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
yabs, отформатируй, если тебе это поможет увидеть топ 100000 без сортировки, зато с десятком необязательных условий. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 00:10 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Ruuu Несчастные конечные пользователи, которым приходится работать с такими вот продуктами ради универсальности у кого-то там. PS: если уж запрос генерируется динамически, неужели нельзя лёгким движением руки убрать хотя бы все эти IS NULL OR ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 04:05 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
alexeyvg Когда приложение разрабатывается и поддерживается много лет, так что сменились несколько поколений разработчиков, если ни один разработчик не представляет, как работает весь код системы, потому что его много, и т.д. Когда ни один аналитик не представляет структуру данных всей системы. Отвечая только за её локальный модуль. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 06:20 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Ruuu Несчастные конечные пользователи, которым приходится работать с такими вот продуктами ради универсальности у кого-то там. PS: если уж запрос генерируется динамически, неужели нельзя лёгким движением руки убрать хотя бы все эти IS NULL OR ? Вывалить на клиент кучу данных и пусть дальше фильтруют в каком-нибудь девэкспресовском компоненте, попивая кофе в ожидании результатов. Ни у кого из фанатов орм не возникает даже вопроса, почему пользователю отдаются произвольные 100000 записей, видимо 100 тыс должно хватить всем (с) У меня только одтн вопрос, если на уровне интерфейса к данным всё быстро и красиво, то зачем вообще делать какую-то фильтрацию и топ миллион на уровне базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 09:39 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte Насчет генерации говнокода ОРМом. Вот в этой статье пишется про "фирменный" почерк Django. Это фирменный почерк многих наколенных поделий. Вне зависимости от стека технологий. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 10:16 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Ruuu Несчастные конечные пользователи, которым приходится работать с такими вот продуктами ради универсальности у кого-то там. PS: если уж запрос генерируется динамически, неужели нельзя лёгким движением руки убрать хотя бы все эти IS NULL OR ? Кстати, в чем заключается лучшая поддерживаемость кода на клиенте? Только в том, что на фирме нет людей, хорошо знающих SQL, но знающих код клиента? p.s. тысяча хранимок - это плохо, если можно обойтись 100, но должным образом параметризированных. Но если функциональность разная, то какая разница, сколько хранимок? Вы же не предъявляете претензии к объему клиентского кода... L_argo Megabyte Насчет генерации говнокода ОРМом. Вот в этой статье пишется про "фирменный" почерк Django. Это фирменный почерк многих наколенных поделий. Вне зависимости от стека технологий. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 11:42 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Ruuu Ни у кого из фанатов орм не возникает даже вопроса, почему пользователю отдаются произвольные 100000 записей, видимо 100 тыс должно хватить всем (с) У меня только одтн вопрос, если на уровне интерфейса к данным всё быстро и красиво, то зачем вообще делать какую-то фильтрацию и топ миллион на уровне базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 12:32 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte Планы будут одинаковыми может быть в 80% случаев, но остальные 20 вам сделают проблем намного больше. Кстати, в чем заключается лучшая поддерживаемость кода на клиенте? Только в том, что на фирме нет людей, хорошо знающих SQL, но знающих код клиента? p.s. тысяча хранимок - это плохо, если можно обойтись 100, но должным образом параметризированных. Но если функциональность разная, то какая разница, сколько хранимок? Вы же не предъявляете претензии к объему клиентского кода... Никаких проблем с планами не будет, а если и возникают - то решаются точно такими-же методами, как и при написании запросов вручную ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 12:42 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Megabyte Планы будут одинаковыми может быть в 80% случаев, но остальные 20 вам сделают проблем намного больше. Кстати, в чем заключается лучшая поддерживаемость кода на клиенте? Только в том, что на фирме нет людей, хорошо знающих SQL, но знающих код клиента? p.s. тысяча хранимок - это плохо, если можно обойтись 100, но должным образом параметризированных. Но если функциональность разная, то какая разница, сколько хранимок? Вы же не предъявляете претензии к объему клиентского кода... Никаких проблем с планами не будет, а если и возникают - то решаются точно такими-же методами, как и при написании запросов вручную Кто вам мешает все вызовы в БД завернуть в один метод верхнего уровня, как вы сделали с клиентским кодом? Не, есть бизнес-логика, которую на клиенте бывает проще обработать, но в целом это редкость. Да и СУБД развивается. Используя же СУБД посредством ОРМ, вы лишаетесь множества полезного функционала. Часто ОРМщики, да и не только они, работают с большими объемами данных построчно, например, для заливки данных в БД. Тогда как это можно сделать на sql одной командой. Скорость работы на порядок\два будет выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:06 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
alexeyvg yabs пропущено... Сложночииаемо, но кроме дурацких столбцов таблицы ничего плохого не вижу. Зло ОРМ не в том, что там делается какой то кривой код условий запросов, например, с синтаксическими ошибками (с чего бы?), а в том, что разработчики не выделяют работу с данными как слой системы, требующий специалиста с соответствующей квалификацией. Поэтому получаются такие вот страшные поделия. Второй недостаток, вытекающий из первого - отсутствие отдельного слоя не позволяет полноценно контролировать работу с СУДБ, теми же самыми узкими специалистами. И если это прекрасно работает для приложения-записной книжки, то для более сложных и нагруженных систем будет проблемой, делая их неработоспособными в реальной жизни. Когда приложение разрабатывается и поддерживается много лет, так что сменились несколько поколений разработчиков, если ни один разработчик не представляет, как работает весь код системы, потому что его много, и т.д. Ruuu ...топ 100000 без сортировки... Привет бывшему коллеге, если не ошибаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:19 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte Можно пример функционала, когда на сервере тысяча хранимок(для чего?), а на клиенте 1 метод? Мне просто сложно это представить... Обычно 1 метод на клиенте равен 1 хп на сервере. Кто вам мешает все вызовы в БД завернуть в один метод верхнего уровня, как вы сделали с клиентским кодом? С ОRM будет один метод DAL IQuerable GetClients(). Вызывающие подсистемы просто вызовут его как GetClients().Where(c => c.Name == 'Alex' && Surname == 'Ivanov'). Все остальное сделает ОRM. Теперь для следующей версии понадобится фильтр по наличию у клиента детей. Вы будете либо создавать новый DAL метод + новую хранимку, либо добавлять новый параметер с новым case'ом в существующую (и заодно перетестировать весь код что-бы убедится что ничего не сломалось). А мне в буквальном смысле слова не надо будет ничего делать. Подсистема просто вызовет мой метод как GetClients().Where(c => c.Kids > 0) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:43 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford А мне в буквальном смысле слова не надо будет ничего делать. Подсистема просто вызовет мой метод как GetClients().Where(c => c.Kids > 0) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 15:11 |
|
|
start [/forum/topic.php?fid=7&msg=21632926&tid=1297162]: |
0ms |
get settings: |
17ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
35ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
448ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 799ms |
0 / 0 |