Re[10]: EntityFramework - тормоз
От: rFLY  
Дата: 10.04.15 11:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

FLY>>Если нужно одно или пару полей понятно что не будешь использовать *, а вот если нужно тянуть все поля или почти все, например из 20 нужно 16, что все перечислять?

G>Конечно. И Linq кстати в этом прекрасно помогает.
Это как же он может помочь если все равно перечислять поля как и в запросе? Или мы о разном говорим?

G>Нет, план строится только при первом запросе, потом кешируется, соответственно планов у тебя будет как 2^n параметров, что в принципе немного. И это в разы лучше, чем иметь нестабильный план, который, по факту, хреново подходит для всех запросов, кроме изначальной комбинации параметров.

Ясно
Re[5]: EntityFramework - тормоз
От: rFLY  
Дата: 10.04.15 11:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>И потому что компилятор статически проверяет типизацию, заодно позволяя нам лёгким манием руки исправлять опечатки в названиях полей.

Это как это? Ты рефакторишь код в проекте, а с ним автоматом меняются названия полей таблицы в БД? Или что имелось ввиду?
Re[7]: EntityFramework - тормоз
От: Yoriсk  
Дата: 10.04.15 11:47
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

Y>>Еще как долог. До всех этих ORM какие только велосипеды не велосипедировали, а всё равно приходилось если не в коде клеить, то в хранимке и exec()... Переименовать столбец — так вообще задача для самоубийц.

S>Может, пора подумать о Linq2db?

Да нет, наши потребности EF перекрывает, плюс для, скажем так, администранивного уровня, в споре "тулза от MS" vs "какие-то ребята-энтузиасты запилили прикольную штуку" выигрывает понятно что.
Отредактировано 10.04.2015 12:13 Yoriсk . Предыдущая версия .
Re[6]: EntityFramework - тормоз
От: Yoriсk  
Дата: 10.04.15 11:51
Оценка:
Здравствуйте, rFLY, Вы писали:

S>>И потому что компилятор статически проверяет типизацию, заодно позволяя нам лёгким манием руки исправлять опечатки в названиях полей.

FLY>Это как это? Ты рефакторишь код в проекте, а с ним автоматом меняются названия полей таблицы в БД?

Примерно так. Или "автоматом"(Сode first) или кнопкой "записать изменения в базу".
Re[5]: EntityFramework - тормоз
От: _Case  
Дата: 10.04.15 11:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, _Case, Вы писали:


_C>>Хорошо, а если рассмотреть следующую ситуацию ... — то будет просто запрос на базу вида: EXEC [ProcessDataForMonth] а если эту же задачу реализовывать средствами Entity Framework то придется сначала вытащить все эти сотни тысяч записей на BackEnd сервер, отпроцессать их, и затем сохранить снова в базу — это же займет больше времени чем сделать это всё на месте — внутри DB сервера, не гоняя данные по сети..

S>Это называется "ложная альтернатива". То, что EF сосёт в таком сценарии, вовсе не означает, что кроме хранимок некуда податься.
S>Хранимки можно применять тогда, когда у вас вообше вся логика живёт в базе. В противном случае вы будете постоянно нарываться на рассогласование логики в backend и в хранимках. И на невозможность минимального рефакторинга без прогона долгих регрессионных тестов.
S>То, что обычные тяжеловесные ORM сосут, известно хорошо. Несосёт нормальный SQL. И тулзы по его построению вроде link2db. Потому что они не имеют проблем с версионированием вроде "ой, мы восстановили базу из бэкапа, и теперь у нас отчёты показывают какой-то бред". И потому что компилятор статически проверяет типизацию, заодно позволяя нам лёгким манием руки исправлять опечатки в названиях полей.

_C>>Ещё пример — сложные отчеты, по моему опыту через ORM такой отчет (хотя бы 7-8 джойнов) будет строиться неприлично большое количество времени..

S>Это у вас неправильный ORM.
_C>>Эта тема конечно о производительности EF, но процедуры я люблю именно за то что понятно что вызывается — запустил SQL профайлер и ясно какая страница что делает, а с потоком SQL-а от ORM так просто не разберешься..

Спасибо! Я не был знаком с этим инструментом — link2db, я так понимаю это оно — https://github.com/linq2db/linq2db Почитаю, попробую поработать с этой библиотекой. А так да, я пишу на .NET и обычно выношу всю логику в базу — внутрь хранимок, а на BackEnd-е максимум добавлял кэширование или вызов внешних API..
Отредактировано 10.04.2015 11:59 _Case . Предыдущая версия .
Re[7]: EntityFramework - тормоз
От: rFLY  
Дата: 10.04.15 11:58
Оценка:
Здравствуйте, Yoriсk, Вы писали:

Y>Примерно так. Или "автоматом"(Сode first) или кнопкой "записать изменения в базу".

Linq2db с VS интегрируется? Откуда кнопка появляется? А если это поле в индексах участвует они тоже обновятся?
Re[11]: EntityFramework - тормоз
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.04.15 11:59
Оценка: +1
Здравствуйте, rFLY, Вы писали:

FLY>Здравствуйте, gandjustas, Вы писали:


FLY>>>Если нужно одно или пару полей понятно что не будешь использовать *, а вот если нужно тянуть все поля или почти все, например из 20 нужно 16, что все перечислять?

G>>Конечно. И Linq кстати в этом прекрасно помогает.
FLY>Это как же он может помочь если все равно перечислять поля как и в запросе? Или мы о разном говорим?
В linq ты можешь один раз написать проекцию и применять её много раз. А умные посоны генерируют проекции на основании результирующего класса.
То есть у тебя есть тип Entity, замапленный на таблицу, и Dto — тип, который содержит все поля, которые нужно обрабатывать. Если имена полей совпадают, то можно автоматически генерировать Expression<Func<Entity,Dto>>. Тогда выборки можно написать всего один раз классы и все.
Re[8]: EntityFramework - тормоз
От: Yoriсk  
Дата: 10.04.15 12:14
Оценка:
Здравствуйте, rFLY, Вы писали:

Y>>Примерно так. Или "автоматом"(Сode first) или кнопкой "записать изменения в базу".

FLY>Linq2db с VS интегрируется?

Cорри, я всё перепутал и про EF/l2s писал. Про linq2db не в курсе.
Re[9]: EntityFramework - тормоз
От: rFLY  
Дата: 10.04.15 12:38
Оценка:
Здравствуйте, Yoriсk, Вы писали:

Y>Cорри, я всё перепутал и про EF/l2s писал. Про linq2db не в курсе.

Ничего. В любом случае linq2db меня заинтересовал, хотя я не сторонник (сейчас скаламбурю) использовать сторонние библиотеки.
Re[3]: EntityFramework - тормоз
От: alex_public  
Дата: 10.04.15 17:19
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Я тут изредка переписываю на этом сайте хранимки на линк. И вот что удивительно — еще ни разу перфоманс не упал, зато подрастает он почти всегда. Был даже случай, перфоманс вырос в 3 раза.


Ого, какой на rsdn хороший запас на будущее по оптимизации (ведь если выкинуть и linq, то можно ещё в несколько раз ускориться)...
Re[4]: EntityFramework - тормоз
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.04.15 20:14
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, AndrewVK, Вы писали:


AVK>>Я тут изредка переписываю на этом сайте хранимки на линк. И вот что удивительно — еще ни разу перфоманс не упал, зато подрастает он почти всегда. Был даже случай, перфоманс вырос в 3 раза.


_>Ого, какой на rsdn хороший запас на будущее по оптимизации (ведь если выкинуть и linq, то можно ещё в несколько раз ускориться)...


Пару миллисекунд на запрос, это в несколько раз?
Re[4]: EntityFramework - тормоз
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.04.15 20:20
Оценка:
Здравствуйте, _Case, Вы писали:

_C>Хорошо, а если рассмотреть следующую ситуацию — допустим пользователь по нажатию кнопки на сайте запускает некую сложную (не просто MERGE / UPDATE) процедуру пересчета данных за определенный период времени, например за месяц, алгоритм может использовать большое количество (десятки — сотни тысяч записей) из нескольких таблиц, если это реализовать хранимой процедурой (даже если в ней будут использоваться и курсоры и ещё что-то) — то будет просто запрос на базу вида: EXEC [ProcessDataForMonth] а если эту же задачу реализовывать средствами Entity Framework то придется сначала вытащить все эти сотни тысяч записей на BackEnd сервер, отпроцессать их, и затем сохранить снова в базу — это же займет больше времени чем сделать это всё на месте — внутри DB сервера, не гоняя данные по сети..

А много у тебя процедур, которые могут сделать ВСЕ внутри сервера, не гоняя данные по сети? В среднем приложении 90%+ хранимок это crud и выборки. Их все можно переписать на linq. А хранимки, которые гоняют что-то в базе оставить собственно в базе.


_C>Ещё пример — сложные отчеты, по моему опыту через ORM такой отчет (хотя бы 7-8 джойнов) будет строиться неприлично большое количество времени..

А в чем разница между SQL кодом, сгенерированным с помощью Linq на написанного вручную? В среднем рукопашный код хуже кстати.

_C>Эта тема конечно о производительности EF, но процедуры я люблю именно за то что понятно что вызывается — запустил SQL профайлер и ясно какая страница что делает, а с потоком SQL-а от ORM так просто не разберешься..

Профайлер не показывает какие запросы вызываются, если ты используешь Linq? В чем суть проблемы-то?
Re[4]: EntityFramework - тормоз
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.04.15 00:11
Оценка:
Здравствуйте, alex_public, Вы писали:

_>(ведь если выкинуть и linq, то можно ещё в несколько раз ускориться)...


Ага, языком.
AVK Blog
Re[8]: EntityFramework - тормоз
От: Ночной Смотрящий Россия  
Дата: 11.04.15 00:11
Оценка: +1 -1
Здравствуйте, rFLY, Вы писали:

FLY>Linq2db с VS интегрируется?


В l2db есть набор tt шаблонов, строящий классы модели по структуре БД. В обратную строну такого нет, но фича эта (Code First) довольно дурно пахнет.
Re[6]: EntityFramework - тормоз
От: Ночной Смотрящий Россия  
Дата: 11.04.15 00:11
Оценка:
Здравствуйте, _Case, Вы писали:

_C>Спасибо! Я не был знаком с этим инструментом — link2db, я так понимаю это оно — https://github.com/linq2db/linq2db


Да.
Re[10]: EntityFramework - тормоз
От: Слава  
Дата: 11.04.15 10:03
Оценка:
Здравствуйте, rFLY, Вы писали:

FLY>Здравствуйте, Yoriсk, Вы писали:


Y>>Cорри, я всё перепутал и про EF/l2s писал. Про linq2db не в курсе.

FLY>Ничего. В любом случае linq2db меня заинтересовал, хотя я не сторонник (сейчас скаламбурю) использовать сторонние библиотеки.

Возможно, из-за такого традиций в разработке дотнет и не любят, по сравнению с явой. Сторонние библиотеки не использовать — означает то, что все надо писать или самому, или ждать, пока микрософт напишет.
Re[9]: EntityFramework - тормоз
От: Слава  
Дата: 11.04.15 10:05
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>В l2db есть набор tt шаблонов, строящий классы модели по структуре БД. В обратную строну такого нет, но фича эта (Code First) довольно дурно пахнет.

НС>но фича эта (Code First) довольно дурно пахнет.

А можете подробнее написать, почему вы так считаете?

По моим впечатлениям, code first отсутсвует в linq2db только потому, что его написать не успели.
Re[10]: EntityFramework - тормоз
От: Ночной Смотрящий Россия  
Дата: 11.04.15 10:50
Оценка: +1 -2
Здравствуйте, Слава, Вы писали:

С>А можете подробнее написать, почему вы так считаете?


Потому что в реальности структура БД почти всегда меняется намного реже, чем код. И,зачастую, на нее еще и не одна программа подвязана. Поэтому решения принимаются именно от структуры БД.

С>По моим впечатлениям, code first отсутсвует в linq2db только потому, что его написать не успели.


Твои впечатления тебя обманывают. Такой задачи даже не ставилось.
Re[11]: EntityFramework - тормоз
От: Слава  
Дата: 11.04.15 11:33
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

С>>По моим впечатлениям, code first отсутсвует в linq2db только потому, что его написать не успели.


НС>Твои впечатления тебя обманывают. Такой задачи даже не ставилось.


Понял. А как же миграции с версии на версию писать, как всегда делалось — набором файликов .sql? А как же статическая типизация, поддержка IDE, вот это все?
Re[5]: EntityFramework - тормоз
От: alex_public  
Дата: 11.04.15 12:32
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>Пару миллисекунд на запрос, это в несколько раз?


Так смотря какие запросы. ) Особенно в контексте того, что тут по сути обсуждался перенос сложных запросов из базы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.