|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Публикую материалы доклада с SQL Server User Group и пример как оптимизировать доступ к данным ASP.NET приложения с помощью Linq и Entity Framework. http://gandjustas.blogspot.ru/2014/09/asp.net-linq-ef-sql-server-performance.html Мой блог http://gandjustas.blogspot.ru/ . Много интересного про архитектуру приложений, SharePoint и управление проектами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 02:19 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustas, а если обычный разработчик напишет в хранимой процедуре два запроса (как и с помощью Linq), а не один? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 08:37 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAgandjustas, а если обычный разработчик напишет в хранимой процедуре два запроса (как и с помощью Linq), а не один? Будет тот же эффект. Процедура оптимизируется один раз при первом вызове с учетом фактических параметров. Обойти на уровне SQL можно тремя способами: 1) вызывать процедуру WITH RECOMPILE - самый плохой способ 2) Сделать две процедуры с разными запросами и одну, которая их вызывает, но это дублирование кода будет аццкое 3) клеить строки динамически и использовать sp_executesql - это гемор, ошибки и потенциальные SQL инъекции. Клеить строки идеальный вариант с точки зрения результата, но без автоматизации типа Linq, крайне сложный. С Linq (почти) все просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 09:30 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasКлеить строки идеальный вариант с точки зрения результата, но без автоматизации типа Linq, крайне сложный .Ну прям-таки крайне сложный. Не преувеличивайте ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 09:39 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustas3) клеить строки динамически и использовать sp_executesql - это гемор, ошибки и потенциальные SQL инъекции.Всегда так делали. Никакого гемора, никаких инъекций. С точки зрения плана выполнения, результат ничем не отличается от запуска через LINQ. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 09:42 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Алексей К, 1) для сортировок надо уже имена полей клеить 2) имена полей надо эскйпить, чтобы избежать инъекций 3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 09:52 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAgandjustasКлеить строки идеальный вариант с точки зрения результата, но без автоматизации типа Linq, крайне сложный .Ну прям-таки крайне сложный. Не преувеличивайте По сравнению с linq сложнее раз в 10, особенно когда запросы не такие простые, как в примере. Надо ведь еще проекцию не забыть клеить, и джоины могут зависеть от условий. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 09:54 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasАлексей К, 1) для сортировок надо уже имена полей клеить 2) имена полей надо эскйпить, чтобы избежать инъекций 3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад. Забыл еще: 4) проекции тоже надо клеить ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 09:55 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAпропущено... Ну прям-таки крайне сложный. Не преувеличивайте По сравнению с linq сложнее раз в 10, особенно когда запросы не такие простые, как в примере. Надо ведь еще проекцию не забыть клеить, и джоины могут зависеть от условий.Что-то не припомню случаев, когда надо было клеить проекции, сортировки и были сложности с джоинами. А как будет выглыдить C# код, когда запросы не такие простые? Может следовало пример посложнее придумать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 10:01 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Ну и главное: статья называется "Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server с помощью LINQ", - а под названием какой-то простенький надуманный пример. Хоть бы агенду какую расписал, или слайды к докладу запостил. На какой минуте там про высоконагруженные приложения-то? Примеры из реальной практики есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 10:08 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Алексей Кgandjustas3) клеить строки динамически и использовать sp_executesql - это гемор, ошибки и потенциальные SQL инъекции.Всегда так делали. Никакого гемора, никаких инъекций. С точки зрения плана выполнения, результат ничем не отличается от запуска через LINQ. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
В топку классическое императивное мышление. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 10:11 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustas Процедура оптимизируется один раз при первом вызове с учетом фактических параметров. У процедуры, в плане построения плана, над простым запросом, только одно преимущество, план ее выполнения с большей вероятностью будет находиться в кеше планов. Более того, у процедуры может быть стопицот планов, в зависимости от параметров, фрагментации индексов и того, с какой ноги встала сегодня жена Барака Обамы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 10:18 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВАлексей Кпропущено... Всегда так делали. Никакого гемора, никаких инъекций. С точки зрения плана выполнения, результат ничем не отличается от запуска через LINQ. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
В топку классическое императивное мышление. Код: sql 1. 2. 3. 4.
В топку Index Seek ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 10:24 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasАлексей К, 1) для сортировок надо уже имена полей клеитьНе проблема. gandjustas2) имена полей надо эскйпить, чтобы избежать инъекцийЗачем? Имена полей не приходят в качестве параметра. gandjustas3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад.Ад начинается, когда нужно выделить фрагмент SQL для повторного использования. В MSSQL это решается в том числе через Scalar UDF, которые работают, мягко говоря, не быстро. Вот тут, да - LINQ приходить на помощь: "Композиция дерева выражений и подставляемые выражения" . Но я помню, тебе не нравится такой подход, ты предпочитаешь в этом случае копипастить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 10:31 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAЧто-то не припомню случаев, когда надо было клеить проекции, сортировки и были сложности с джоинами. Значит все запросы у тебя простые были. Я делал систему с row-level security, вот там пришлось много генерить запросов, причем из-за кеширования ACL иногда генерировался запрос с кучей джоинов, а иногда без них, на дну и ту же выборку. skyANAА как будет выглыдить C# код, когда запросы не такие простые? Может следовало пример посложнее придумать? Тоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами. Но об этом не писал. ИМХО очевидно всем .NET программистам должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 14:40 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВgandjustas Процедура оптимизируется один раз при первом вызове с учетом фактических параметров. У процедуры, в плане построения плана, над простым запросом, только одно преимущество, план ее выполнения с большей вероятностью будет находиться в кеше планов. Более того, у процедуры может быть стопицот планов, в зависимости от параметров, фрагментации индексов и того, с какой ноги встала сегодня жена Барака Обамы. Чушь полнейшая. 1) У процедуры ровно одни план, который оптимизируется при первом вызове с учетом конкретных параметров. Можно делать вызов with recompile, тогда план будет генерироваться при каждом вызове и не будет кешироваться. 2) Все adhoc запросы в .NET выполняются с использованием sp_executesql, которая гарантирует сохранение плана запроса в кеше. Изучайте как работает SQL Server прежде чем писать такое. В видео, кстати, упоминаю этот миф. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 14:43 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAЧто-то не припомню случаев, когда надо было клеить проекции, сортировки и были сложности с джоинами. Значит все запросы у тебя простые были. Я делал систему с row-level security, вот там пришлось много генерить запросов, причем из-за кеширования ACL иногда генерировался запрос с кучей джоинов, а иногда без них, на дну и ту же выборку. skyANAА как будет выглыдить C# код, когда запросы не такие простые? Может следовало пример посложнее придумать? Тоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами. Но об этом не писал. ИМХО очевидно всем .NET программистам должно быть.Давай пример. А то не понятно, что у тебя в хранимке становится крайне сложным, а в linq при этом крайне просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 14:45 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Алексей КВот тут, да - LINQ приходить на помощь: "Композиция дерева выражений и подставляемые выражения" . Но я помню, тебе не нравится такой подход, ты предпочитаешь в этом случае копипастить. Ты о чем? Как раз в Linq можно ничего не копипастить, используя комбинаторы. А если нужно подставлять деревья выражений в деревья выражений, то я это еще 4 года назад придумал - http://gandjustas.blogspot.ru/2010/06/expression-tree.html Сейчас в EF это можно прозрачно для пользователя сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 14:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasТоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами.В MSSQL есть View и Inline UDF. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 14:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasА если нужно подставлять деревья выражений в деревья выражений, то я это еще 4 года назад придумал - http://gandjustas.blogspot.ru/2010/06/expression-tree.html Сейчас в EF это можно прозрачно для пользователя сделатьКроме тебя это ещё придумали в BLToolkit (LINQ2DB) и в LinqKit. :-) gandjustasСейчас в EF это можно прозрачно для пользователя сделатьКак? Кроме обёртки над LINQ-провайдером способов не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 14:56 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustas1) У процедуры ровно одни план, который оптимизируется при первом вызове с учетом конкретных параметров. Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 15:20 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Алексей КgandjustasТоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами.В MSSQL есть View и Inline UDF. И? композиции то нет, ты же не можешь написать так: Код: sql 1.
. А в Linq ты это напишешь еще красивее: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 16:30 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Алексей КgandjustasА если нужно подставлять деревья выражений в деревья выражений, то я это еще 4 года назад придумал - http://gandjustas.blogspot.ru/2010/06/expression-tree.html Сейчас в EF это можно прозрачно для пользователя сделатьКроме тебя это ещё придумали в BLToolkit (LINQ2DB) и в LinqKit. :-) Только он появился спустя год кажись ;) Алексей ККак? Кроме обёртки над LINQ-провайдером способов не вижу. Кроме обертки и нет способов, но у меня обертка генерируется в AOP и подсовываться вместо IDbSet. То есть в коде приложения вообще никаких изменений. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 16:34 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВgandjustas1) У процедуры ровно одни план, который оптимизируется при первом вызове с учетом конкретных параметров. Код: sql 1. 2. 3. 4. 5.
запустил скрипт из поста Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Потом сделал запрос Код: sql 1. 2. 3. 4. 5. 6. 7.
bucketidrefcountsusecountssize_in_bytesmemory_object_addresscacheobjtypeobjtypeplan_handlepool_idparent_plan_handledbidobjectidnumberencryptedtext3072322573440x00000004743FA060Compiled PlanProc0x05000800D1D9C83490A2647F04000000010000000000000000000000000000000000000000000000000000001NULL888557819310CREATE PROCEDURE [dbo].[GetTransactionsByShipDate] Упс, один план, используемый два раза. Сделал много запусков с разными параметрами без сброса кеша - все равно один план. Короче приходи ко мне на тренинг по оптимизации, научу, ориентировочно 16 октября. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 16:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasЗначит все запросы у тебя простые были.Эхх, да, наверное не довелось... Ни когда для ЮКОСа, Норникеля, ВНИИСТа софт писали. Ни когда системы онлайн бронирования в реальном времени. Ни сейчас. Сейчас вообще тухляк, в основном к MongoDB запросы. И на HighLoad++ никто с докладами про LINQ с проекциями не выступает. Печаль. Пример-то будет, приближённый к реальности? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:06 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
это ни очём не говорит. разве у вас были активные изменения в используемых этой ХП таблицах? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:07 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Konst_Oneэто ни очём не говорит. разве у вас были активные изменения в используемых этой ХП таблицах? Что значит "активные изменения" ? Делаю так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И все равно один план получается. Хватит фантазировать, читайте BOL. Там четко расписано что и когда компилируется. И нет у ХП в SQL Server больше одного плана вообще никогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:41 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAПример-то будет, приближённый к реальности? Тебе реально приложение показать? Увы, NDA. Или тебе помочь применить знания к твоей реальности? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:46 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAПример-то будет, приближённый к реальности ? Тебе реально приложение показать? Увы, NDA. Или тебе помочь применить знания к твоей реальности?Выделил жирным, так понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:48 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
у вас один planguide в вашем запросе, потому что вы своих не создавали для него. о чём вам и указали, что planguides может быть много. идите саим читайте BOL ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Опять этот упоротый теоретик отжигает на форуме? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 17:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Konst_Oneу вас один planguide в вашем запросе, потому что вы своих не создавали для него. о чём вам и указали, что planguides может быть много. идите саим читайте BOL Что за бред? Хоть сто плангайдов создайте, а план у процедуры будет один. Покажите пример с двумя планами в кеше для одной и той же процедуры. Любым способом. Спорим на 10к рублей, что не получится? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:04 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
а причём тут кэш? мы говорим, что их много может быть и можно всегда заюзать тот, который нужен: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:07 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAgandjustasпропущено... Тебе реально приложение показать? Увы, NDA. Или тебе помочь применить знания к твоей реальности?Выделил жирным, так понятнее? Честно говоря нет. Что ты имеешь ввиду "приближенный к реальности"? Лично я писал такую процедуру (с точностью до имен полей и таблиц) в 2007 году и после того как разобрался с кешем планов - переписывал на Linq. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:10 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Konst_Oneа причём тут кэш? мы говорим, что их много может быть и можно всегда заюзать тот, который нужен: Специально для тебя цитирую с чего начался разговор, в который ты влез: ЕвгенийВ Более того, у процедуры может быть стопицот планов, в зависимости от параметров, фрагментации индексов и того, с какой ноги встала сегодня жена Барака Обамы. Про плангайды - ты не в тему влез, более того, несмотря на много плангайдов план у процедуры все равно будет один. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:14 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAпропущено... Выделил жирным, так понятнее? Честно говоря нет. Что ты имеешь ввиду "приближенный к реальности"? Лично я писал такую процедуру (с точностью до имен полей и таблиц) в 2007 году и после того как разобрался с кешем планов - переписывал на Linq.Ну вот и вставь сюда объявление и кусок той процедуры, где у тебя случилась крайняя сложность. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:23 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAgandjustasпропущено... Честно говоря нет. Что ты имеешь ввиду "приближенный к реальности"? Лично я писал такую процедуру (с точностью до имен полей и таблиц) в 2007 году и после того как разобрался с кешем планов - переписывал на Linq.Ну вот и вставь сюда объявление и кусок той процедуры, где у тебя случилась крайняя сложность. 1) Было давно, кода не осталось. 2) Большая часть работы под NDA и нельзя на форумах выкладывать. 3) Что это изменит? Суть проблемы и решения не поменяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:29 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAпропущено... Ну вот и вставь сюда объявление и кусок той процедуры, где у тебя случилась крайняя сложность. 1) Было давно, кода не осталось. 2) Большая часть работы под NDA и нельзя на форумах выкладывать. 3) Что это изменит? Суть проблемы и решения не поменяется.Понятно, слив. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:36 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAgandjustasпропущено... 1) Было давно, кода не осталось. 2) Большая часть работы под NDA и нельзя на форумах выкладывать. 3) Что это изменит? Суть проблемы и решения не поменяется.Понятно, слив. Если тебе от этого легче, можешь так считать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:41 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAпропущено... Понятно, слив. Если тебе от этого легче, можешь так считать.Да мне от этого также. Как я не встречал тех сложностей, о которых ты тут фантазируешь, так и не встречу похоже ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 18:51 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasАлексей ККак? Кроме обёртки над LINQ-провайдером способов не вижу. Кроме обертки и нет способов, но у меня обертка генерируется в AOP и подсовываться вместо IDbSet. То есть в коде приложения вообще никаких изменений.У меня тоже. gandjustasАлексей Кпропущено... В MSSQL есть View и Inline UDF. И? композиции то нет, ты же не можешь написать так: Код: sql 1.
. А в Linq ты это напишешь еще красивее: Код: c# 1. 2. 3. 4.
В SQL это не так красиво, но результат тот же: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 19:05 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Алексей КИ? композиции то нет, ты же не можешь написать так: Код: sql 1.
. А в Linq ты это напишешь еще красивее: Код: c# 1. 2. 3. 4.
В SQL это не так красиво, но результат тот же: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
[/quot] И все равно не то, потому что повторной используемости кусков запросов нет. Тебе все равно надо весь запрос в одном месте выписать. А linq позволяет собирать его по кускам собирать, причем в зависимости от условий. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 19:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAgandjustasпропущено... Если тебе от этого легче, можешь так считать.Да мне от этого также. Как я не встречал тех сложностей, о которых ты тут фантазируешь, так и не встречу похоже Да у тебя и монга надежно работает. Я не сомневаюсь что у тебя сложностей с планами никогда не было и не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 19:50 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasИ все равно не то, потому что повторной используемости кусков запросов нет.Есть: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Тут даже наследование через * можно организовать. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 20:18 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasskyANAпропущено... Да мне от этого также. Как я не встречал тех сложностей, о которых ты тут фантазируешь, так и не встречу похоже Да у тебя и монга надежно работает. Я не сомневаюсь что у тебя сложностей с планами никогда не было и не будет.А какие могут быть сложности с планами? Смотришь план, делаешь выводы, проводишь необходимую оптимизацию, смотришь новый план. Всё вроде просто. Вот только просто не значит тривиально. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 20:18 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasА linq позволяет собирать его по кускам собирать, причем в зависимости от условий .sp_executesql, как было предложено выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 20:20 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Во времена ЮКОСа не было LINQ, обходились вьюхами обычными и материализованными, хранимками и функциями, денормализацией, индексами и прочими "олдскульными" вещами. Когда писали системы онлайн бронирования, то LINQ (IQueryable) тупо не использовался, потому как под каждый сервис стороннего поставщика писать IQueryProvider - это не самое лучшее решение. Ну и обходились по привычке "олдскульными" вещами. А сейчас, сам понимаешь, MongoDB. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 20:25 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAА сейчас, сам понимаешь, MongoDB. Медленный он, только для специфичных весчей. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 21:38 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
hVosttskyANAА сейчас, сам понимаешь, MongoDB. Медленный он, только для специфичных весчей.Гы. И где же он медленный? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 22:06 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAГы. И где же он медленный? На запросы отчёты, например, финансовые делать из монги, лучше пойти и убиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 22:31 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
hVosttskyANAГы. И где же он медленный? На запросы отчёты, например, финансовые делать из монги, лучше пойти и убиться.Ахаха. Финансовые отчёты из монги. Ты мне напомнил ту авторшу статьи, тынц на перевод которой Стасян тут постил. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 22:35 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAАхаха. Финансовые отчёты из монги. Ты мне напомнил ту авторшу статьи, тынц на перевод которой Стасян тут постил. Если не секрет для чего юзаете монгу? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 22:44 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
hVostt, не секрет. Данные CMS там хранятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 22:54 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAhVostt, не секрет. Данные CMS там хранятся. Типа "Деньги до зарплаты, под 12% в неделю?" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:01 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANAhVostt, не секрет. Данные CMS там хранятся. Типа "Деньги до зарплаты, под 12% в неделю?" :)Чего? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:05 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAhVostt, не секрет. Данные CMS там хранятся. че-нить ещё юзаете или только монгу? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:09 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
hVosttskyANAhVostt, не секрет. Данные CMS там хранятся. че-нить ещё юзаете или только монгу?Ну в CMS ещё используется Couchbase в качестве кэша, WebDav. Темы и файлы пользовательские лежат на дисках. А так основное хранилище - это MS SQL Server. elasticsearch перед моим отпуском начали прикручивать. Xamarin юзаем ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:17 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAНу в CMS ещё используется Couchbase в качестве кэша, WebDav. Темы и файлы пользовательские лежат на дисках. А так основное хранилище - это MS SQL Server. elasticsearch перед моим отпуском начали прикручивать. Xamarin юзаем фух, а я уж думал вы от реляционки совсем отказались. а данные CMS, которые имеются в виду, это чисто неструктуированные данные пользователей? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:25 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAXamarin юзаем тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:25 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAhVosttпропущено... че-нить ещё юзаете или только монгу?Ну в CMS ещё используется Couchbase в качестве кэша, WebDav. Темы и файлы пользовательские лежат на дисках. А так основное хранилище - это MS SQL Server. elasticsearch перед моим отпуском начали прикручивать. Xamarin юзаем И что за CMS такая навороченная? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:49 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВИ что за CMS такая навороченная? это не CMS в обычном понимании вряд ли её можно скачать и себе поставить ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2014, 23:54 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
hVosttЕвгенийВИ что за CMS такая навороченная? это не CMS в обычном понимании вряд ли её можно скачать и себе поставить Описание то есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 00:05 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВОписание то есть? "skyANA" --> URL ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 00:23 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttпропущено... это не CMS в обычном понимании вряд ли её можно скачать и себе поставить Описание то есть? Version 5.0 Overview ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 09:43 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
hVosttа данные CMS, которые имеются в виду, это чисто неструктуированные данные пользователей?Это структура страниц (Page) и настройки для каждой страницы и каждого отдельного компонента, структура шаблонов страниц (Page Template), их версии, то как они расположены на сайте (Site Structure), "бекапы" сайта, что делаются при смене темы, ну и данные о транзакциях. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 09:48 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
Посмотрел видео от нашего ганджубаса. Эпический бред для студентов. Особенно порадовало, как он разжевывает, что не нужно тащить все поля в проекции в dto класс ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 11:47 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
codearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 11:52 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAcodearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :) Есть же функция ускоренного просмотра! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 11:58 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANAcodearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :) Есть же функция ускоренного просмотра!Вы тоже посмотрели видео? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 12:03 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANA Вы тоже посмотрели видео? Чукча не читатель, чукча писатель! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 12:12 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
skyANAcodearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :) Ты прав, признаюсь - я слукавил осилил до того момента, когда он начал отжигать про dto. И то с небольшими скипами. Потом, как сказали выше, ускоренно домотал до конца. В сумме на этот мусор потратил минут 10 личной жизни. Уже жалею. Лучше через хороший УВН пожарил бы на 140 объекте, чем просрал это время на какую-то ересь ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2014, 12:21 |
|
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
|
|||
---|---|---|---|
#18+
gandjustasАлексей К, 1) для сортировок надо уже имена полей клеить 2) имена полей надо эскйпить, чтобы избежать инъекций 3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад. нет никакого ада. дело вкуса ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2014, 12:44 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1349706]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 562ms |
0 / 0 |