|
|
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
веб-приложение работает с базой ms sql, которую я сопровождаю. разработчик этого приложения осваивает и активно применяет Linq2Sql. с его слов, это гораздо удобнее при разработке, нежели использование хранимок, последующий разбор датасетов по объектам и прочее. а так как все это дело под веб, то проблем с распространением изменений не возникает есть ли серьезные основания пытаться убедить разработчика отказаться от использования linq2sql, помимо того что я не могу влиять на оптимальность этих запросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2011, 13:52 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Есть ! + ХП : безопасность проще организовать транзакции Можно одинаково хорошо использовать в разных приложениях Много специалистов про SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2011, 15:01 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVЕсть ! + ХП : спасибо за комментарий, я в ответ как бы поставлю себя на место разработчика безопасность можно наглядный пример? проще организовать транзакциитут будет аргумент, что приложение из разряда отчетности, только читает данные, и посему один запрос - одна транзакция Можно одинаково хорошо использовать в разных приложениях в основном, запросы получаются довольно специфичными и вероятность использования в других приложениях мала Много специалистов про SQL imho средний сишарпер скорее владеет линк2скл, чем не владеет. а их сейчас тоже немало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2011, 15:42 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Shakill_безопасность можно наглядный пример? проще организовать транзакциитут будет аргумент, что приложение из разряда отчетности, только читает данные, и посему один запрос - одна транзакция Можно одинаково хорошо использовать в разных приложениях в основном, запросы получаются довольно специфичными и вероятность использования в других приложениях мала Много специалистов про SQL imho средний сишарпер скорее владеет линк2скл, чем не владеет. а их сейчас тоже немало1. Юзер имеет право только на ХП. Ничего другого он не увидит. 2. Это не аргумент. Завтра может появится нужда. 3. Это не аргумент. 4. А я шарпа в глаза не видел. :) А SQL прост и везде почти одинаков и время над ним не властно. Огромный охват специалистов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2011, 16:37 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Shakill_, нет аргументов все аргументы сводятся к тому, что " это я знаю, а это - не знаю, вот на это могу влиять, а на это - нет " как пример - LSV - " я шарпа в глаза не видел. " сомневаюсь, что ковырять код приложения на шарпе пустят человека, который шарпа в глаза не видел :) Shakill_ , какая тебе вообще разница, что юзает разработчик? если ему так удобней и он, в отличие от тебя знает и линк, и хранимки, то ты его никак не убедишь может просто не можете поделить зоны ответственности? тогда с этого и начинай ставить вопрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2011, 19:09 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Shakill_веб-приложение работает с базой ms sql, которую я сопровождаю. разработчик этого приложения осваивает и активно применяет Linq2Sql. с его слов, это гораздо удобнее при разработке, нежели использование хранимок, последующий разбор датасетов по объектам и прочее. а так как все это дело под веб, то проблем с распространением изменений не возникает есть ли серьезные основания пытаться убедить разработчика отказаться от использования linq2sql, помимо того что я не могу влиять на оптимальность этих запросов? Процедуры - это один из способов разделения уровней приложения. Т.е. сервер - это не надёжно хранящийся массив байтов, а именно сервер - система, хранящая данные и отвечающая на запросы на получение и изменение данных от других систем. СУБД отвечает за их целостность, оптимальность операций над ними и т.п. За неё отвечают отдельные специалисты. И интерфейс к СУБД - как раз процедуры. Больше на роль интерфейсов между уравнями ничего и нет. Так же есть какой то сервер бизнес-логики, есть клиент - это всё отдельные компоненты. Хотя ведь можно сказать, что они тоже не нужны - приложение может и рисовать, и хранить данные, и содержать логику, и всё это на каком то мышкорисовательном средстве разработки. Отрицать необходимость процедур то же самое, что вообще отрицать необходимость какого то разделения приложений на слои. Такое допустимо только для простых и короткоживущих приложений. В противном случае скоро наступает клинч - приложение нельзя будет безболезненно изменить. В некоторых системах типа САП-а обычные процедуры не используются, но процедуры там всё равно есть, просто для этого сделан свой язык, среда выполнения и все необходимые инструменты. Разработчик Linq2Sql, конечно, не может правильно оценить такие вещи, тут нужен архитектор, способный взглянуть на всё это шире, не как программист. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2011, 23:42 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvg...тут нужен архитектор, способный взглянуть на всё это шире, не как программист.+1 добавлю, и не как админ БД вопрос в том, как приложение разделено по слоям если бизнес-логика сидит на клиенте, то переносить ее на ХП - изврат чреватый многими неприятностями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2011, 12:31 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
все зависит от того - что это за приложение хп можно генерировать из пиложения, впрочем как и само приложение из другого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2011, 13:21 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopalexeyvg...тут нужен архитектор, способный взглянуть на всё это шире, не как программист.+1 добавлю, и не как админ БД вопрос в том, как приложение разделено по слоям если бизнес-логика сидит на клиенте, то переносить ее на ХП - изврат чреватый многими неприятностямиЭто идеология разовых и маленьких программ. Конечно, если мы говорим про программы, работающие с базами данных. Не разовые программы работают со многими БД, и много приложений работают с одной БД. Конечно, программисту клиента приятнее, что у него всё под контролем, но это всего лишь точка зрения программиста. Просто не бывает чего то приличного без разделения на уровни. Не получится. А выделение уровня в виде СУБД - это вполне доступный и нормальный путь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2011, 13:37 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Shakill_веб-приложение работает с базой ms sql, которую я сопровождаю. разработчик этого приложения осваивает и активно применяет Linq2Sql. с его слов, это гораздо удобнее при разработке, нежели использование хранимок, Shakill_, угостите этого вэбера вот этим топиком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2011, 13:38 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgChopесли бизнес-логика сидит на клиенте, то переносить ее на ХП - изврат чреватый многими неприятностямиЭто идеология разовых и маленьких программ. Конечно, если мы говорим про программы, работающие с базами данных.гы... 1С тогда - разовая и маленькая программа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2011, 00:57 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ChopalexeyvgЭто идеология разовых и маленьких программ. Конечно, если мы говорим про программы, работающие с базами данных.гы... 1С тогда - разовая и маленькая программа? 1С как раз разделяет уровни. Вы наверное с ней не работали? Там ведь бизнес-логика и работа с данными не пишется на том языке, на котором программируется клиент. Не смешивается всё в кучу. Клиент и сервер приложений написан на С++, но при этом разработан свой внутренний язык, и никто этот код на С++ даже не видит. Работа с данными и прикладная логика пишется на внутреннем языке. Отсутствие уровней - это если бы всё реализовавалось прямо на том языке, на котором разработан клиент (или сервер приложений), то есть на С++. Так что 1С, как и любая приличная платформа, использует деление на уровне как по архитектуре, так и по программированию. При этом в 1С не стали использовать СУБД как отделного уровня в системе. Ну так и это добавляет гемороя - трудно поручить СУБД специалистам (ДБА или Database developers) решить проблемы с производтельностью и т.п. Идёт поток запросов и разбирайся как хочешь - для полноценной работы DBA должен обязательно быть хорошим специалистом в 1С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2011, 10:37 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgТам ведь бизнес-логика и работа с данными не пишется на том языке, на котором программируется клиент. Не смешивается всё в кучу. Клиент и сервер приложений написан на С++, но при этом разработан свой внутренний язык, и никто этот код на С++ даже не видит. Работа с данными и прикладная логика пишется на внутреннем языке. ну и что? чем это Хорошо? если DSL полностью описывает DS, то вопросов нет. А что в 1С DS? и где DSL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2011, 20:59 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRosalexeyvgТам ведь бизнес-логика и работа с данными не пишется на том языке, на котором программируется клиент. Не смешивается всё в кучу. Клиент и сервер приложений написан на С++, но при этом разработан свой внутренний язык, и никто этот код на С++ даже не видит. Работа с данными и прикладная логика пишется на внутреннем языке. ну и что? чем это Хорошо? если DSL полностью описывает DS, то вопросов нет. А что в 1С DS? и где DSL?Не знаю, где в 1С DS. Это хорошо тем, что прикладному программисту легче разбираться в этом внутреннем языке. Даже если он не полностью описывает DS и если даже непонятно, что такое DS для 1С Просто на С++ прикладные программисты ничего бы не писали и прикладных применений у 1С не было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2011, 23:07 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvg1С как раз разделяет уровни. Вы наверное с ней не работали?работал, работал... твою логику понял и готов согласиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 08:48 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgПроцедуры - это один из способов разделения уровней приложения. Т.е. сервер - это не надёжно хранящийся массив байтов, а именно сервер - система, хранящая данные и отвечающая на запросы на получение и изменение данных от других систем. СУБД отвечает за их целостность, оптимальность операций над ними и т.п. За неё отвечают отдельные специалисты. И интерфейс к СУБД - как раз процедуры. Больше на роль интерфейсов между уравнями ничего и нет. Так же есть какой то сервер бизнес-логики, есть клиент - это всё отдельные компоненты. Хотя ведь можно сказать, что они тоже не нужны - приложение может и рисовать, и хранить данные, и содержать логику, и всё это на каком то мышкорисовательном средстве разработки. Отрицать необходимость процедур то же самое, что вообще отрицать необходимость какого то разделения приложений на слои. Такое допустимо только для простых и короткоживущих приложений. В противном случае скоро наступает клинч - приложение нельзя будет безболезненно изменить. В некоторых системах типа САП-а обычные процедуры не используются, но процедуры там всё равно есть, просто для этого сделан свой язык, среда выполнения и все необходимые инструменты. Разработчик Linq2Sql, конечно, не может правильно оценить такие вещи, тут нужен архитектор, способный взглянуть на всё это шире, не как программист. хранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 03:08 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS, а какие пробемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 05:32 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRosа какие пробемы? граф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку? Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 08:31 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSхранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Заменить архитектора. Всего-то делов... :) Расшифруйте, что значит с ООП подходом и чем это противоречит работе через ХП ? Все современные приложения написаны с ООП. И ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 10:54 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVРасшифруйте, что значит с ООП подходом и чем это противоречит работе через ХП ? ничем не противоречит. Да вы не стесняйтесь, ответьте для начала на вопрос про графы LSVВсе современные приложения написаны с ООП. lol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 11:31 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSПолучение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно?Неверно. Зачем для этого отдельная ХП ? Достаточно одной с набором параметров-фильтров. Гибкость этих фильтров конечно не очень высока, но в большинстве случаев вполне достаточна. У нас подобным образом выполнена система отчетов. У отчетов может быть более 20 параметров, в т.ч. необязательных. Исключительно ХП. Для добавления новых параметров правим только СКЛ-скрипт. Приложение само их увидит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 11:44 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
не не, я не про отчетность. Это вообще тема отдельного разговора. Но раз уж про них заговорили, покажите-ка заодно как там у вас этот необязательный параметр реализован. Т.е. есть параметр Name, если он null, то не учавствует в фильтре, если не null, то учавствует. Я говорю именно про граф объектов . Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Итак, покажите как вы собрались реализовывать материализацию этих классов из БД использую интерфейс ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 12:34 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSViPRosа какие пробемы? граф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку? Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно? обе варианта присутствует в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 15:04 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS, если Именно фильтрация , то можно явно задвать IsNull и т.д. если имеется ввиду оптимизм, то настройки свойств типа для включения в результирующий запрос(если режим динамический скл)/хп(если режим статический скл) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 15:20 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ХП генерируются автоматически если включен режим - статический скл) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 15:21 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSalexeyvgПроцедуры - это один из способов разделения уровней приложения. хранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП? Это новое слово в теории! :-) Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 15:45 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRosобе варианта присутствует в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает) вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы. Кстати расскажите заодно, как-там это переключение между режимами работает. Я устанавливаю это как параметр всей сессии, или каким-то образом могу пометить любой узел графа что-бы он грузился полностью или навигационно? ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д. я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:25 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgхранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП? Это новое слово в теории! :-) Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо.[/quot] к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:29 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSalexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем" Вы про этот вопрос? StalkerSграф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку? Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно? Да, для нужных бизнес-действий будут нужны соответствующие интерфейсы. У вас-же код не получается сам по себе, его же пишут? Просто вы к написанию ХП относитесь со страхом - как это, НАПИСАТЬ ХП??? Да, будут разные ХП для работы получением данных из структуры Streets -> Houses -> Flats, они будут возвращать разные наборы атрибутов и иметь разные параметры, в зависимости от назначения. По любому нужно писать весь этот код. Ведь каждое получение данных делается не изолированно - это свой интерфейс, своё отображение, своя логика взаимодействия с пользователем. В каких то случаях использование ORM будет упрощать программирование получения данных, но в ущерб скорости, и упрощение общей работы очень маленькое, потому как получение данных - не самая трудоёмкая для программиста часть работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 09:13 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д. я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?Вы просто не задумывались, как можно структурировать и вообще организовывать код на стороне СУБД. У нас, например, были процедуры для отображения данных (они только выводили нужные данные, не делая фимльтрацию), а фильтрацию данных делали другие процедуры, передавая потом то, что нужно отобразить, первым процедурам. В процедуре фильтрации есть параметры типа сортировки, простраинчного вывода и т.п, которые просто напрямую передаются в процедуру обработки. Соответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата). Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте. То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 09:25 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgСоответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата). Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте. То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных. о как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет? Можете привести схематично что это за процедуры ? А то честно говоря из того что вы написали я слобо представляю как данные из БД с помощью ваших процедур окажутся в моем графе. Юзер-кейсы, которые я приводил это поиск 9-ти этажных домов по всем улицам, можно добавить обновление статуса квартиры если задолженность там превысила порог, или удаление чего-нибудь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 10:50 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
из того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :) А теперь поведайте нам про безопасность системы, работающей прямыми запросами. Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 11:03 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVиз того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :) А теперь поведайте нам про безопасность системы, работающей прямыми запросами. Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения. это вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил. Или вы за сутки так и не придумали ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 12:04 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSо как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет? А сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ. Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности. У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие. Зато он есть, интерфейс. Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций. Хотя это в общем то неважно - всё равно простых добавлений удалений и т.д обычно не бывает - обычно есть бизнес-действия, которые надо программировать, и в этих бизнес-действиях обычно много чего есть кроме вставки одной записи в одну таблицу. Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:30 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSэто вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил. Или вы за сутки так и не придумали ответ? Мне, честно говоря, нечего сказать. Я не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:39 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSViPRosобе варианта присутствует в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает) вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы. Кстати расскажите заодно, как-там это переключение между режимами работает. Я устанавливаю это как параметр всей сессии, или каким-то образом могу пометить любой узел графа что-бы он грузился полностью или навигационно? ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д. я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы? Ты лучше не гадай , а поспрашивай. :) Никаких пулеметов и очередей. Есть навигационный граф, и есть помеченнные подграфы (макротипы). Вот часть графа, и макротип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:39 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:40 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
и если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:42 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, а вот автоматически сгенерированная форма для макротипа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:48 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, Навигационный режим - для визуального анализа данных и построения отчетности, и еще очень хорош время проектирования. Режим макротипов - основной режим работы спректированного (сгенерированного из метеданных + нелинейные методы) приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 14:01 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, в навигацинном режиме граф грузится принудитльно, по мере телодвижений клиента, в режиме макротипов граф грузится строго по макротипам (целостно, макротип неделимый транзакционый элемент системы), даже простые типы имеют дефольтное макротипное представление, при этом типы структруирующие разные макротипы могут быть из одного и того же множества типов, что не мешает целостному опрерированию макротипами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 14:07 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :) Напоминает задачу Х=1+2 на С++ на три листа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:19 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSValexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :) Подозреваю, что человек говорить не о явных вызовах "чтение-запись" разной грануляности по усмотрению прогера, а о какой то встроенной семантике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgА сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ. Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности. У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие. Зато он есть, интерфейс. Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций. Хотя это в общем то неважно - всё равно простых добавлений удалений и т.д обычно не бывает - обычно есть бизнес-действия, которые надо программировать, и в этих бизнес-действиях обычно много чего есть кроме вставки одной записи в одну таблицу. Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык. имхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше. Повторю начальные условия: Есть три класса доменной модели - Код: plaintext 1. 2. Есть три таблицы в БД: Код: plaintext 1. 2. Один из возможных юзеркейсов - получить коллекцию 9-ти этажных домов со всех улиц. Или проапдейтить статут квартир у которых задолженность выше пороговой. Для примера, на linq2sql для этого было-бы написано что-то типа: Код: plaintext 1. 2. 3. Вопрос: покажите, как это будет реализовано у вас, в случае когда таблицы закрыты забором из ХП. Интересует как работает цепочка tables -> ... -> domain class. Желательно показать кодом (схематично). ViPRosЕсть навигационный граф, и есть помеченнные подграфы (макротипы). ну так и покажи на моем простеньком примере как все будет работать вместо вываливания кучи картинок. Задача описана выше. Какие ХП будут учавствовать, как и кто будет выбирать нужные ХП, как все это превратиться в доменные классы и затем сохраниться обратно. Смелее. Пока-что из твоих картинок я не вижу ничего нового - загружается подграф целиком вместо только нужных частей. Недостаток этого я указывал выше - на клиента идет масса данных, которые ему не нужна. ViPRosи если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл. это сейчас о чем? ;) Про необязательные параметры? При чем тут nullable поля? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:54 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Помимо безопасности, разделения кода на слои, не стоит забывать о том, что ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это. Да при программисту , пишущему клиента, иногда вообще не стоит знать структуру данных в БД. В MSSQL даже придумали такие модные вещи, как instead-триггеры. Вешаешь его на модифицирующую вьюху(вот тебе и сущность), в триггере редактируешь данные, а из каких таблиц во вьюху данные попатают, тебе и знать незачем... StalkerS , что вы со своими графами так привязались... Вам уже 10 раз написали: на каждую сущность будет несколько процедур: читающая, читающая с фильтром, модицирующая(инсерт, апдейт), удаляющая. В процедурах модификации так же можно настроить проверку корректности изменения и удаления. + ХП - это предварительно скомпилированный код, и он работает немного быстрее , чем прямой sql-код. + для систем(веба, например) со слабым каналом связи по интернету это ведет к уменьшению запроса, т.к. на сервер передается только вызов ХП, а не текст запроса, который может быть большим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:24 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSимхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше.Не увидел я такого изменения темы, по крайней мере в вашем первом посте. Конечно, если БД - это просто не стирающиеся при выключении питания переменные, интерфейсов нет, то, конечно, использование ХП не имеет смысла. Или в крайнем случае, иожно использовать автоматически генерируемые ХП, но это никак не отличается от прямых обращений к таблицам. ХП нужны только как интерфейс к СУБД, ни для чего больше. Это как обсуждение варианта - использовать для обращения у серверу приложений веб-сервисы или открыть его память клиенту и обращаться напрямую. Если ставится жёсткое условие - клиент будет работать только с внутренними объектами апп-сервера, которые у него в памяти и никогда - с определёнными кем-то интерфейсами, то городить веб-сервисы для обращения к памяти просто глупо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:53 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS, ты просто не въехал :) грузится именно помеченный подграф(макротип, бизнес-объект, агрегатный класс,,. как хошь назови), а не произвольный процедуру эту дописывает автоматом на случай нулл даже адо.нет :) к картинкам бы надо было посерьезнее присмотреться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:58 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
я воще то понимаю что тебя мучает - как грузить нужную проекцию нужного подграфа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 18:01 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ну что бы не мучился - на вход процедуры подается таблица форинкеев родительской таблицы на всю глубину помеченого подграфа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 18:06 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
а в случае динамической скл подается сам актуальный скл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 18:09 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
для джойна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 18:11 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Megabyte... ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это.. предполагается, что ХП пишут исключительно пряморукие программисты или, что с помощью ХП поломать данные в принципе невозможно? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 18:17 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ChopMegabyte... ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это.. предполагается, что ХП пишут исключительно пряморукие программисты или, что с помощью ХП поломать данные в принципе невозможно? :)Имеется в виду, что во первых, защита на нескольких уровнях повышает вероятность её срабатывания. Во вторых, ХП пишут программисты, которые разработчики БД. Они могут неумелыми действиями поломать веб-сервер, но данне - это их родное :-) Это называется "специализация". Ну и код в ХП действительно более "прямой". Обычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида. А вот для программиста ХП такое представить трудно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 00:05 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgНе увидел я такого изменения темы, по крайней мере в вашем первом посте. хм, в моем первом посте я спрашивал что делать, если клиент написан с ООП подходом, и даже приводил примеры классов. По определению, если строиться доменная модель, то вся логика там и находиться (если это не какой-нибудь анемик, но даже в этом случае логика просто выноситься в классы сервисов). Тогда уж скажите, о какой архитектуре вы думали, что есть и ООП и вся логика в БД. alexeyvgКонечно, если БД - это просто не стирающиеся при выключении питания переменные, интерфейсов нет, то, конечно, использование ХП не имеет смысла. вот именно. Какая-то часть логики в базе правда в любом случае присутствует в виде ограничений на данные, но не более. Маппинг на ХП в этом случае приведет к создания CRUD процедур для каждой сущности и крайне неэффективной работе с БД ViPRosты просто не въехал :) грузится именно помеченный подграф(макротип, бизнес-объект, агрегатный класс,,. как хошь назови), а не произвольный процедуру эту дописывает автоматом на случай нулл даже адо.нет :) к картинкам бы надо было посерьезнее присмотреться ну так покажи уже код наконец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 01:01 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Megabyte Код: plaintext 1. 2. 3. так. Покажи-ка тогда что делать, когда таких параметров 15 штук :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 01:03 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS, это закрытая система все что тебе надо было, я сказал садись и делай :) когда 1 и 15, 15 называется рутиной, а рутину автоматизируют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 01:30 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRosэто закрытая система т.е. кода ты даже и не видел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 02:15 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgИмеется в виду, что во первых, защита на нескольких уровнях повышает вероятность её срабатывания. Во вторых, ХП пишут программисты, которые разработчики БД. Они могут неумелыми действиями поломать веб-сервер, но данне - это их родное :-) Это называется "специализация". "которые разработчики БД" вполне могут быть такие же криворукие, как и любые другие програмисты родные для них данные или не очень родные... я сейчас пишу отчет по ... виду страхования весь отчет - чистый SQL - система другого не предполагает (будет время - реализую оный и через php, и через .NET) увы и ах, при моем мнении, что БД - исключительно хранилище данных приходится вот такое делать могу сказать, что когда вкапываешься в структуру БД... слов нет, одни выражения... многоэтажные разработчики БД не только не знают, что такое внешние ключи, но и о никаких нормальных формах даже не слышали у них - клипперовская система 20-летней давности с костылями "под винду"... :( отсутствие документации... это даже не пэстня... alexeyvgОбычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида. непрадва это, может быть, применимо к конфигурастам 1С (и то не ко всем), но любой студент, к-й клепает сайты на php, пусть самые примитивные, но запросы писать умеет alexeyvgА вот для программиста ХП такое представить трудно. очень даже лехко если "фирма" разрабатывает какую-нить систему, то сомневаюсь, что там работают и "гуру", и "студенты" на разработке модулей не может такого быть - один модуль разрабатывает "гуру", а другой - "студент" либо все - "гуру", либо все - "студенты" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 02:19 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgОбычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида. Кхм... какие-то уж очень тупые у Вас там программисты. Это же как они бедняги данные обрабатывают даже не имея представления о их структуре? Или у Вас только студенты за миску супа? Ну специализация при работе над крупным проектом идет только на пользу, но чтобы писать программу не зная SQL... По теме: имхо linq2sql какбэ не зря придумали. Мы обычно тоже через ХП работаем, но писать бизнес логику на linq2sql удобнее (читай: эффективнее). По сути автоматически делается то, что при Вашем подходе требует написания тучи ХП и тучи кода. Материализовать объекты, сделать сложные выборки с массой условий... Но с другой стороны, конечно, сложнее оптимизировать саму БД.... Вот и гадай, что лучше - туча очень оптимизированных ХП, возвращающих избыточные данные или простые понятные "тупому" программисту средства, делающий запросы, которые возвращают только нужные данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 02:31 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ultra_alexВот и гадай, что лучше - туча очень оптимизированных ХП, возвращающих избыточные данные или простые понятные "тупому" программисту средства, делающий запросы, которые возвращают только нужные данные? зависит от типа приложения.. Если датацентрик - то вся логика обычно отправляется на сервер в ХП. Если сложная ветвистая логика - то доменная модель удобнее. Хотя по большей части будет зависеть от скиллов, которыми обладают разработчики.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 02:41 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSзависит от типа приложения.. Вот! В том то и дело, что вместо упертых попыток доказать абсолютную истинность своей точки зрения можно просто определить область применения той или иной технологии. Если приложение использует БД только как хранилище данных, то технически без разницы как делать запросы: через ХП или из кода. Но зато ХП проще поддерживать. Если в приложении есть сложная бизнес-логика, то уже вопрос как оно спроектировано. Если все сделано "красиво" и все сущности материализуются в объекты, то ИМХО правильнее использовать linq2sql. А если бизнес-логика тупо гоняет данные туда-сюда, то проще через ХП. Ну а если есть желание написать ВСЮ бизнес-логику в БД... Ну вот изменились условия задачи (заказчик сказал, что теперь мы вот это рассчитываем не так, а эдак), тогда переделываем мы N ХП и... В 90% случаев код тоже нужно менять. А если код все равно менять, то проще сразу все делать через код. Или я в чем-то не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 03:07 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
PS. Если чессно, я не сталкивался с ситуацией, когда за БД отвечают одни люди, а за программный код другие. У нас небольшая команда и каждый умеет и то и другое. Вот надо мне реализовать такой-то функционал, беру пишу какой мне надо код, какие мне надо ХП и все! Знающие люди, подскажите, как работает команда, когда программер не лазит в БД? Я просто не представляю! Получается я должен пойти к БД-девелоперу и объяснить, что мне нужно, чтобы БД вернула мне такие-то данные. А он через 15 минут говорит: "ок, Саня, можешь юзать sp_Get_bla_bla_bla". Так что-ли? Так может мне быстрее самому написать чем кому-то объяснять? Или в чем тогда выигрыш? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 03:14 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ultra_alexНу а если есть желание написать ВСЮ бизнес-логику в БД... Ну вот изменились условия задачи (заказчик сказал, что теперь мы вот это рассчитываем не так, а эдак), тогда переделываем мы N ХП и... В 90% случаев код тоже нужно менять. А если код все равно менять, то проще сразу все делать через код. когда клиент тонкий и только дергает ХП с сервера, то при изменении бизнес-логики как-раз таки клиента менять часто не приходиться, a только тогда когда меняется сигнатура методов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 03:23 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Ну я так и написал: Если приложение использует БД только как хранилище данных, то технически без разницы как делать запросы: через ХП или из кода. Но зато ХП проще поддерживать. Если в приложении есть сложная бизнес-логика... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 03:28 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgОбычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида. Chopнепрадва это, может быть, применимо к конфигурастам 1С (и то не ко всем), но любой студент, к-й клепает сайты на php, пусть самые примитивные, но запросы писать умеет ultra_alexКхм... какие-то уж очень тупые у Вас там программисты. Это же как они бедняги данные обрабатывают даже не имея представления о их структуре? Или у Вас только студенты за миску супа? Ну специализация при работе над крупным проектом идет только на пользу, но чтобы писать программу не зная SQL...Ну не знаю... Тот, кто клепает сайты на php, конечно, представляет - он же сам пишет запросы. Я про тех, кто использует ОРМ, linq2sql... Тогда некоторые ещё могут с трудом приблизительно представить , что будет делать сервер в ответ на конкретное выражение от linq2sql. Но в целом, сказать, что будет происходить на сервере при рефреше страницы уже не могут... Смотришь иногда на трейс - там бред. А в ответ программисты говорят - это не мы, это linq2sql :-) ultra_alexПо теме: имхо linq2sql какбэ не зря придумали. Мы обычно тоже через ХП работаем, но писать бизнес логику на linq2sql удобнее (читай: эффективнее). По сути автоматически делается то, что при Вашем подходе требует написания тучи ХП и тучи кода. Материализовать объекты, сделать сложные выборки с массой условий...Ну я же не говорю, что linq2sql зря придумали :-) Просто при увеличении сложности систем ХП становятся удобным способом деления на уровни. Рассматривать БД как часть прикладной программы можно только в простейших случаях. Т.е. сайтик и одноразовая БД для управления контентом этого сайта - тут нормально, а если программа пишется для уже существующей БД? Если БД существует долго, то такой подход просто не сработает. Программ для этой БД будет написано много, они будут на разных языках (понятное дело - ведь век языка недолог), мапировать всё будет сложно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 10:56 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ultra_alexPS. Если чессно, я не сталкивался с ситуацией, когда за БД отвечают одни люди, а за программный код другие. У нас небольшая команда и каждый умеет и то и другое. Вот надо мне реализовать такой-то функционал, беру пишу какой мне надо код, какие мне надо ХП и все! Знающие люди, подскажите, как работает команда, когда программер не лазит в БД? Я просто не представляю! Получается я должен пойти к БД-девелоперу и объяснить, что мне нужно, чтобы БД вернула мне такие-то данные. А он через 15 минут говорит: "ок, Саня, можешь юзать sp_Get_bla_bla_bla". Так что-ли? Так может мне быстрее самому написать чем кому-то объяснять? Или в чем тогда выигрыш? Off. Нормально работает. В большинстве своем программисты не БД части даже не подозревают, что происходит в системе. БД разработчики подготавливают все необходимые интерфейсы для работы с данными, после чего программисты Клинета/Сервера апп пользуются этими интерфейсами. 99% необходимости лезть в БД нет у остальной команды. На 1% можно и задачу создать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 11:54 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
читаю я эти холивары, читаю... так и не убедился, что к БД надо относиться, как к чему-то большему, чем простое хранилище данных, способное на что-то большее, чем следить за ссылочной целостностью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 12:42 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopчитаю я эти холивары, читаю... так и не убедился, что к БД надо относиться, как к чему-то большему, чем простое хранилище данных, способное на что-то большее, чем следить за ссылочной целостностью а как тогда обрабатывать большие объемы данных - т.е. когда в правилах БЛ надо обновить/расчитать десятки тысяч значений? или как быть, когда идет связанная обработка? руцями, итерационно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 14:57 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopтак и не убедился, что к БД надо относиться, как к чему-то большему, чем простое хранилище данных Ну тут уж как посмотреть. Если смотреть на БД как на "набор табличек с данными" и делать запросы из кода, то - ДА! Но потом приходит понимание, что запросы реализуют значительную часть логики и поэтому удобнее вынести ее в БД (по средствам ХП). Это создает целостность данных и методов работы с ними ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 23:49 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ultra_alexЭто создает целостность данных и методов работы с ними и размазывает бизнес-логику по разным слоям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 07:53 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopultra_alexЭто создает целостность данных и методов работы с ними и размазывает бизнес-логику по разным слоям1. Ничего страшного. Обычное дело 2. Слой клиента обычно некритичный: скрыть/деактивировать контрол на форме или что-то в этом роде. С бизнес-логикой сама СУБД справляется как правило лучше и эффективнее, чем приложение. Единственный реальный минус - непортируемость на другую СУБД, но далеко не всегда критично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 12:16 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVChopи размазывает бизнес-логику по разным слоям1. Ничего страшного. Обычное дело 2. Слой клиента обычно некритичный: скрыть/деактивировать контрол на форме или что-то в этом роде. С бизнес-логикой сама СУБД справляется как правило лучше и эффективнее, чем приложение. Единственный реальный минус - непортируемость на другую СУБД, но далеко не всегда критично. 1. спорно: обычное дело - прог приложения лучше знает предметную область, чем прог БД, переносить бизнес-логику в БД - добавлять лишнее звено 2. спорно: приведи пример для 1С да и слой клиента зачастую состоит не только из этого, а в случае толстого клиента так и ваще спорно: бизнес-логика состоит не только из работы с данными спорно: минус не единственный, например серьезный минус - вместо одного прога надо два, вместо того чтобы поддерживать один модуль - приходится поддерживать два со всеми вытекающими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 13:29 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
2. спорно: приведи пример для 1С да и слой клиента зачастую состоит не только из этого, а в случае толстого клиента так и ваще спорно: бизнес-логика состоит не только из работы с даннымиДа уж 1С просто образец высокой производительности и оптимальности. Ога. Сделано это в т.ч. для портируемости. Один код для любой СУБД. А сама СУБД в данном случае - свалка таблиц. Аналогично кстати в большинстве западных ERP систем. переносить бизнес-логику в БД - добавлять лишнее звеноТак и запишем - ХП и триггеры придумали дураки. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 13:49 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVДа уж 1С просто образец высокой производительности и оптимальности. Ога.уж какой есть :) по распространнести может конкурировать очень со многими эффективность решения в целом состоит не только из быстрой отработки запросов но и из скорости и простоты разработки и сопровождения если ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю... пусть даже не настолько оптимально с точки зрения БД какое решение будет более эффективно? :) LSVСделано это в т.ч. для портируемости. Один код для любой СУБД. А сама СУБД в данном случае - свалка таблиц. Аналогично кстати в большинстве западных ERP систем. видать были аргУменты для принятия такой архитектуры... :) LSVпереносить бизнес-логику в БД - добавлять лишнее звеноТак и запишем - ХП и триггеры придумали дураки. :) да записывай как угодно, я этого не говорил но чем больше длина цепочки - тем более высока вероятность искажения сигнала, тем более высока стоимость передачи от этого никуда не денешся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 14:00 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopесли ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю... пусть даже не настолько оптимально с точки зрения БД какое решение будет более эффективно? :) то, что востребованно. Не даром 1С используется как вариант "из коробки" и для не больших контор. Серьезные вынуждены разрабатывать свои системы учета, которые будут оптимизированы под конкретные задачи. Почему-то еще не встречал серьезных бизнес решений с высокими требованиями по производительности которая бы использовала БД как свалку таблиц Chopда записывай как угодно, я этого не говорил но чем больше длина цепочки - тем более высока вероятность искажения сигнала, тем более высока стоимость передачи от этого никуда не денешся ничего подобного, звенья цепочки теже самые. PS: Если человек считает, что БД - груда хлама из данных - то я не вижу смысла таким использовать клиент-сервеные БД - юзайте файловые, что в лоб, что полбу PPS Если человек не знает, как это реализовать, то это не значит, что это такой подход не правильный. Chop а как на счет производительности обработки массивов данных? десятки и сотни тысяч строк? тоже клиет будет делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 14:16 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
авторесли ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю. Аналогично и наоборот: запрос из 10 строк с группировками, сложным суммированием, подзапросами(пишем за 5-7мин) может быть аналогичен нескольким сотням строк плохочитаемого кода приложения, кот. пишутся за 2-3 дня. Про производительность и бешенный Ethernet-трафик (иногда очень важно) - отдельная тема. Ваяние же SQL-кода внутри приложения ничем не отличается от ваяния ХП. С той лишь разницей, что ХП проще хранить в VSS/ST/CVS. десятки и сотни тысяч строк? тоже клиет будет делать? Ща начнется холивар про 3-звенки У нас все строго на ХП. Используется работа по неширокому VPN (менее 2Мб/с). 1С наверно бы умерла не своей смертью. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 14:40 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortНе даром 1С используется как вариант "из коробки" и для не больших контор. Серьезные вынуждены разрабатывать свои системы учета, которые будут оптимизированы под конкретные задачи. Почему-то еще не встречал серьезных бизнес решений с высокими требованиями по производительности которая бы использовала БД как свалку таблиця встречал "серьезные бизнес-решения для больших контор" на 1с (правда на 8-ке, 7-ка тяжело тянула...), не из коробки, которые разрабатывались и оптимизировались под конкретные задачи зы. правда и 1с не относится к БД как к свалке таблиц, и я БД свалкой таблиц не считаю :) зыы. тут еще вопрос, что считать серьезным решением, и что считать большой конторой... Евросеть, насколько знаю, 8-ку юзала, это большая контора? :) Voland_de_mortничего подобного, звенья цепочки теже самые.ничего подобного - не те же в нашем примере добавляется "прог БД" (либо же "слой БД", куда мы пихаем бизнес-логику) Voland_de_mortЕсли человек считает, что БД - груда хлама из данных - то я не вижу смысла таким использовать клиент-сервеные БД - юзайте файловые, что в лоб, что полбунаоборот, таким как раз и надо юзать сервера БД, которые сделают работу, ни о чем и никого не спрашивая :) Voland_de_mortЕсли человек не знает, как это реализовать, то это не значит, что это такой подход не правильный.согласен Voland_de_mortChop а как на счет производительности обработки массивов данных? десятки и сотни тысяч строк? тоже клиет будет делать?смотря какая и чего обработка смотря на чем написан клиент смотря какие политики безопасности в общем случае, учитывая предыдущий опыт и с-но привычки, я бы, скорее всего, пихал SQL-запрос и из под 1с, вероятно, тоже прямой SQL-запрос, если критична производительность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 14:53 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
в нашем примере добавляется "прог БД" (либо же "слой БД", куда мы пихаем бизнес-логику)А ну да... Большинство 1С-ников даже никогда не слышали слово SQL. Не даром же появилось мнение, что 1С-ник - не программист. Конфиг.. дальше сами знаете Кстати массивные обработки для 1С (например супермаркеты) часто делают именно на SQL. Извне. Много всяких обработок. Не знаете почему ?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:03 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVавторесли ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю.Аналогично и наоборот: запрос из 10 строк с группировками, сложным суммированием, подзапросами(пишем за 5-7мин) может быть аналогичен нескольким сотням строк плохочитаемого кода приложения, кот. пишутся за 2-3 дня. трудно такое представить... в общем случае программирование на каком-либо языке программирования гибче, чем на чистом SQL читабельность кода сюда тоже никаким боком, все дело в плечах - на плечах должна быть голова, и из них должны расти руки тем более, если ты приводишь в пример 1С, которая работает с метаданными и в которой документ "договор", так и называется Документ.Договор, а не "таблица dc000035 с полем priznak=586" :) как минимум пропадает необходимость документировать, что такое dc000035 и что такое priznak=586 рискуем скатиться в религиозный холивар и тогда вы меня потеряете :) суть же в том, что ты согласился - это не является доказательством ни одной точки зрения, ни другой :) LSVПро производительность и бешенный Ethernet-трафик (иногда очень важно) - отдельная тема. да, трафик можно сделать любой, как в первом случае, так и во втором LSVВаяние же SQL-кода внутри приложения ничем не отличается от ваяния ХП. С той лишь разницей, что ХП проще хранить в VSS/ST/CVS. я изначально писал "размазывание бизнес-логики по слоям" с этой точки зрения - отличается и, может дело привычки, но мне удобней логически связанные блоки хранить в одном месте в БД код приложения не запихаешь, а вот SQL-код в код приложения - лехко ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:11 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVА ну да... Большинство 1С-ников даже никогда не слышали слово SQL. те которые решают задачки, которые ты задаешь, очень даже слышали :) LSVНе даром же появилось мнение, что 1С-ник - не программист. Конфиг.. дальше сами знаете я так подозреваю, что ты меня причисляешь к славному племени конфигурастов? могу сообщить - с 1с не работаю уже скоко лет, как-то так сложилось как раз сейчас занимаюсь SQL-запросам с редкими вставками xBase-а хотя сделать то же самое на 1с (пусть даже с использованием прямых запросов) было существенно проще и быстрее, но увы и ах - у нас 1с-а нет даже для бухии :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:16 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopи, может дело привычки, но мне удобней логически связанные блоки хранить в одном месте в БД код приложения не запихаешь, а вот SQL-код в код приложения - лехко мы уже давно ушли в религиозный спор 1. что касается проще хранить: в БД хранится не только сама ХП, но и ее план выполнения. В случае SQL запроса извне - план оптимизатор будет делать при каждом вызове 2. для того, что бы получить сумму товаротранспортной накладной ( сотсоящей из 100 накладных, в которых по 100 наименований.) после переоценки товара - будете все тащить на клиент и там считать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:25 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
в общем случае, учитывая предыдущий опыт и с-но привычки, я бы, скорее всего, пихал SQL-запрос и из под 1с, вероятно, тоже прямой SQL-запросИ ..для этого нанимаем отдельного "БД-прогера" ? Да ? :) Разве это не встраивание того самого "лишнего слоя", но внутрь приложения ? Причем еще и ущербное встраивание: * Проверка будет только при работе приложения. * Одинаковый SQL-код нужно будет дублировать со всем вытекающими. А использование функций и ХП это уже вообще будет полный отказ от вожделенной "работы только в одном слое". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:34 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mort1. что касается проще хранить: в БД хранится не только сама ХП, но и ее план выполнения. В случае SQL запроса извне - план оптимизатор будет делать при каждом вызовене все БД занимаются оптимизацией запросов... а сопровождать? считать надо, стоит ли оно того... в каждом конкретном случае Voland_de_mort2. для того, что бы получить сумму товаротранспортной накладной ( сотсоящей из 100 накладных, в которых по 100 наименований.) после переоценки товара - будете все тащить на клиент и там считать?в 1с, пока не припечет, даже не буду задумываться что и куда она тянет :) не в 1с, ес-но, сумму я запихаю в простенький запрос и потяну одно число :) зы. кстати, не понял, зачем пересчитывать накладную после переоценки товара... зыы. сумма по 100 докам по 100 наименований - фигня вопрос, никакой оптимизации не надо, ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:43 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopне в 1с, ес-но, сумму я запихаю в простенький запрос и потяну одно число :) зы. кстати, не понял, зачем пересчитывать накладную после переоценки товара... зыы. сумма по 100 докам по 100 наименований - фигня вопрос , никакой оптимизации не надо, ИМХО1. В смысле не Вы, а "дополнительный БД-прог" (с) ? Запрос к БД как никак.... 2. А если по 50 магазинам по 50тыс. товаров (обычное дело) ? Тут без SQL никак не обойтись. Вводим лишний слой ???? Выходит, что решение задач получается то 1 слой, то 2 в зависимости от задачи ? Низачот ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:51 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVИ ..для этого нанимаем отдельного "БД-прогера" ? Да ? :)ес-но нет :) LSVРазве это не встраивание того самого "лишнего слоя", но внутрь приложения ?похоже у нас разное понимание термина "слой" :) "людоеды они как лук, у них есть слои .." (с) Шрек код приложения тоже может и зачастую должен делиться на слои :) но мне больше нравится иметь дело с одной луковицей, чем с несколькими :) LSV* Проверка будет только при работе приложения.ты о юнит-тестах? или о чем? о том, что его нельзя выполнить при неработающем приложении? зачастую можно зачастую не нужно LSV* Одинаковый SQL-код нужно будет дублировать со всем вытекающими.не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 15:53 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopне все БД занимаются оптимизацией запросов... а сопровождать? считать надо, стоит ли оно того... в каждом конкретном случае В студию те БД, которые не занимаются оптимизацией запросов Chopв 1с, пока не припечет, даже не буду задумываться что и куда она тянет :) не в 1с, ес-но, сумму я запихаю в простенький запрос и потяну одно число :) зы. кстати, не понял, зачем пересчитывать накладную после переоценки товара... зыы. сумма по 100 докам по 100 наименований - фигня вопрос , никакой оптимизации не надо, ИМХО не такой то уж и простенький) надо взять последнюю переоценку по последнему нужному региону(то же документ) переоценка 1-2 раза в месяц. в переоценке 30-60 тыс наименований АП (асортиментный перечень) = 50тыс в таблицах, отвечающих за тело документа общее кол-во строк свыше 4млрд бд за 10 лет так как теперь для "фигня вопроса" буде SQL писать?)) но дело даже не в этом.. как будете оптимизировать? как планы хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:07 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSV1. В смысле не Вы, а "дополнительный БД-прог" (с) ? Запрос к БД как никак....в смысле - я я же тебе написал, SQL знают даже конфигурасты, которые решают предложенные тобой задачи а уж тру-прогам по жизни положено :) LSV2. А если по 50 магазинам по 50тыс. товаров (обычное дело) ?что "по 50 магазинам по 50 тыс.товаров в каждом"? сумму выручки посчитать за год посчитать? так даже 1с при всей своей неоптимальности не будет считывать 50х50000х(?) записей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:13 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortВ студию те БД, которые не занимаются оптимизацией запросов (с) не мойя всегда, где можно стараюсь делать джоины во всяком случае на майкрософте он работает на порядок быстрее под фиребёрдом - подзапросы вообще п...[цезоред] он всегда подзапросы честно выполняет, вообще без никаких оптимизаций мы с ... офигели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:16 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortВ студию те БД, которые не занимаются оптимизацией запросов Advantage Database Server - может и делает, но в доке я пока этого нигде не увидел и по скромному субъективному мнению - на практике не увидел никакой оптимизации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:20 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortне такой то уж и простенький) надо взять последнюю переоценку по последнему нужному региону(то же документ) переоценка 1-2 раза в месяц. в переоценке 30-60 тыс наименований АП (асортиментный перечень) = 50тыс в таблицах, отвечающих за тело документа общее кол-во строк свыше 4млрд бд за 10 лет так как теперь для "фигня вопроса" буде SQL писать?)) но дело даже не в этом.. как будете оптимизировать? как планы хранить? задачу не понял я говорил о сумме накладной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:23 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ChopVoland_de_mortВ студию те БД, которые не занимаются оптимизацией запросов Advantage Database Server - может и делает, но в доке я пока этого нигде не увидел и по скромному субъективному мнению - на практике не увидел никакой оптимизации У Sybase есть оптимизатор, и довольно не плохой. То, что запросы плохо выполняются - это кривой код) про отсутствие оптимизации Table(id int not null, name varchar(255) not null, type_id int not null) PK id unique index name index type_id, name какой из них будет использован при запросе select * from table where id = 1 и select * from table where name = "name" и select * from table where type_id = 1 and name = "name" кому прикажете решать, если нет оптимизатора? fullscan наше все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:31 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ChopVoland_de_mortне такой то уж и простенький) надо взять последнюю переоценку по последнему нужному региону(то же документ) переоценка 1-2 раза в месяц. в переоценке 30-60 тыс наименований АП (асортиментный перечень) = 50тыс в таблицах, отвечающих за тело документа общее кол-во строк свыше 4млрд бд за 10 лет так как теперь для "фигня вопроса" буде SQL писать?)) но дело даже не в этом.. как будете оптимизировать? как планы хранить? задачу не понял я говорил о сумме накладной а задача не менялась - все та же сумма накладной. только тут надо не меньше 10 join-ов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:33 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortУ Sybase есть оптимизатор, и довольно не плохой. сцилку в студию было бы неплохо :) можешь ткнуть пальцем, где об этом написано в доке? тынц Voland_de_mortа задача не менялась - все та же сумма накладной. только тут надо не меньше 10 join-ов давай структуру БД зачем там может понадобиться 10 джоинов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:40 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopсцилку в студию было бы неплохо :) можешь ткнуть пальцем, где об этом написано в доке? тынц тынц надеюсь объяснять суть prepared не надо Voland_de_mortа задача не менялась - все та же сумма накладной. только тут надо не меньше 10 join-ов давай структуру БД зачем там может понадобиться 10 джоинов? структура примерно следующая. нет времени долго расписывать: таблица документов (заголовки) (id, date) таблица заголовка накладной (id, pecep_id, doc_type_id) таблица содержания накладной (id, id_doc, tov_id, price) таблица заголовков переоценок (id_doc, doc_type_id) таблица переоценок (id, id_doc, tov_id, price) таблица заголовков ТТН(id_doc, doc_type_id) таблица содержания ТТН(id, id_doc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:51 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
авторв смысле - я я же тебе написал, SQL знают даже конфигурасты, которые решают предложенные тобой задачи а уж тру-прогам по жизни положено :)Хм... Разве парой страниц назад не шла речь о "лишнем слое", для которого нужен "дополнительный БД-прог" ? Кажется это был основной аргумент против SQL-кодирования. Не ? Выходит как ни крути, но в подавляющем большинстве случаев "лишний слой" все таки используется. Тогда зачем его избегать ? А сравнение с 1С неудачное. Там отдельная специфическая среда разработки с высоким уровнем абстракции от реалий СУБД. Подобных систем немного (обычно это западные ERP). Избежать "лишнего слоя" в общем случае невозможно для прочих сред. Тогда о чем спор ??? зы: Ни в одной отрасли человеческой деятельности нет универсального инструмента. Даже у дворника. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 16:57 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mort тынц принял т.е. оптимизация проводится и без хранения запроса в БД, а и при отправлении оного из пехапы :) Voland_de_mortструктура примерно следующая.не до конца понятно, чем накладная отличается от ТТН... не до конца понятно, зачем в содержании накладной хранить price, если его все-равно приходится пересчитывать (тоже не до конца понятно зачем) ну джоины... в чем сложность и крутизна запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 17:03 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopпринял т.е. оптимизация проводится и без хранения запроса в БД, а и при отправлении оного из пехапы :) мы говорили про то что хранмится план запроса на сервере для хп я не отрицал работу оптимизатора для всех выполняемых запросов, просто для ХП он будет единоразов, а для пыхпы - для каждого препаре/или запроса Chopне до конца понятно, чем накладная отличается от ТТН... не до конца понятно, зачем в содержании накладной хранить price, если его все-равно приходится пересчитывать (тоже не до конца понятно зачем) ну джоины... в чем сложность и крутизна запроса? всего лишь в объемах данных, которые обрабатываются и в размерах таблиц. (от 500мб до 30Гб на таблицу) и тут без оптимизации и хп не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 17:16 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVРазве парой страниц назад не шла речь о "лишнем слое", для которого нужен "дополнительный БД-прог" ? Кажется это был основной аргумент против SQL-кодирования. Не ? так, стоп... дополнительный прог БД у нас появился в контексте того, что прог.приложений - криворукий :) и раз уж он появился, то должен чем-то занимацца? :) речь шла не о лишнем слое, а о переносе бизнес-логики в "слой БД" в коей я смысла особого не вижу вижу дополнительные неудобства LSVВыходит как ни крути, но в подавляющем большинстве случаев "лишний слой" все таки используется. Тогда зачем его избегать ? Избежать "лишнего слоя" в общем случае невозможно для прочих сред. Тогда о чем спор ??? я же написал... не избегать и не "лишний слой", а хранить логически связанные блоки функционала в одном месте мне так удобней редкие случаи, когда требуется чрезвычайно высокая производительность, на то и редкие случаи, зачем из-за них менять все? LSVА сравнение с 1С неудачное. Там отдельная специфическая среда разработки с высоким уровнем абстракции от реалий СУБД. Подобных систем немного (обычно это западные ERP). почему неудачное? тот же линк позволяет писать подобные системы "с высоким уровнем абстракции от реалий СУБД" кстати, с этого тема и началась :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 17:17 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopтот же линк позволяет писать подобные системы "с высоким уровнем абстракции от реалий СУБД" кстати, с этого тема и началась :) как на счет оптимизации, отладки таких запросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 19:46 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortChopтот же линк позволяет писать подобные системы "с высоким уровнем абстракции от реалий СУБД" кстати, с этого тема и началась :)как на счет оптимизации, отладки таких запросов? мои знания линка ограничиваются прочтением двух глав в учебнике :) если же вспомнить опыт работы с 1С, то: ИМХО, в тех редких случаях, где критична чрезвычайная производительность, никто не мешает тебе писать прямой запрос и производить отладку/оптимизацию штатными средствами сервера БД после чего вставить в код в остальных случаях это не критично и некоторая возможная неоптимальнось сгенеренного системой запроса с лихвой перекрывается скоростью/удобством разработки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 19:57 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Voland_de_mortкак на счет оптимизации, отладки таких запросов?вот примерчик: 1С Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. http://www.mista.ru/tutor_1c/zapros.htm честно говоря, не знаю, что в этом запросе "робот" может напартачить при генерации SQL-а... если бы 1с работала с Advantage... я столкнулся с тем, что Advantage подзапрос выполняет существенно быстрее, чем джоин (не ожидал...) с-но можно было бы переписать SQL но зачем? Advantage привел, как астрактный пример, у MS SQL наверняка есть своим "приколы", да и 1с сейчас работает чуть ли не с любой БД и у каждой приколы свои ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 20:14 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgУ нас, например, были процедуры для отображения данных (они только выводили нужные данные, не делая фимльтрацию), а фильтрацию данных делали другие процедуры, передавая потом то, что нужно отобразить, первым процедурам. В процедуре фильтрации есть параметры типа сортировки, простраинчного вывода и т.п, которые просто напрямую передаются в процедуру обработки. Соответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата). Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте. То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных жесть конечно. Хотя встречается, видел и не такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 21:48 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
iscrafm, не жесть, а кайф никакого интеллекта у приложении нету, а бедный пользватель должен знать назубок перечень процедур :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 21:57 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRosiscrafm, не жесть, а кайф никакого интеллекта у приложении нету, а бедный пользватель должен знать назубок перечень процедур :) Может и кайф, но список антипатернов пополняется. Хороший пример того, как не нужно делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 22:30 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
кажись опосля пифа я сформулировал пару-тройку мыслишек... в давно забытые времена, когда я был молодым и здоровым... я программировал на паскале с ассемблерными вставками потому что на 386-м даже с сопроцессором это было пусть не критичное, но существенное увеличение производительности также приходилось перед началом эксперимента архивировать 3.11-ю винду (со всеим приложениями), потому что места на винте не хватало, а переписывать на 5-тидюймовые дискеты... ни такого количества дискет не было, ни никаких гарантий, что оно перепишется назад , с-но копий надо больше, а дискет нет, да и время на копирование тудым-сюдым... мы и без этого раньше 2-х часов ночи с факультета не выходили :) также столкнулись с ограничением паскаля на количество строк - что-то около 30 000, какие там десятки-сотни тысяч записей, с которыми еще надо проводить какие-то нетривиальные действия?! простая запись, добавление новых, приходилось разбивать эксперимент на серию измерений в разных диапазонах столкнулись с тем, что наша самопальная АЦП-ЦАП иногда "теряет сигнал" - пришлось параллельно пускать синусоиду с осциллографа (благо плата была восьмиканальная) и значения в "потерянных диапазонах" интерполировать многа было всего интересного, славные были денечки в конце двадцатого века... :) /************* ключевые слова - "абстрагирование", "увеличение вычислительной мощности", "утолщение канала" итд итп /************* по факту, те же всякоразные ассемблеры были каким-то уровнем абстрагирования от ноликов/единичек и состояния полупроводниковых (ламповых?) триггеров наверняка, если чел при достаточном уровне подготовке будет сам решать в какой сектор винта записать 0/1, то сделает он это лучше, оптимальней, чем операционка как в общем случае, так и, тем более, в случае, если он знает конкретику, какие данные он использует чаще, какие реже итп. "традиционные" языки программирования - еще один уровень еще бОльшего абстрагирования SQL - еще один уровень абстрагирования чем дальше, тем больше рутинные операции возлагаются "на железяку/компутер" пусть железяка не самым оптимальным образом решает поставленную задачу, но она ее решает человек в такой ситуации может и не решить, просто утонет в объемах данных/условий если удариться в абсолютное утрирование, то когда прогу ставится задача "о беспечить автоматическую проводку документа по такому-то счету" , а он начинает ее с решения вопроса " куда на винте писать 0/1 ", то задачу он не решит давайте посмотрим на монстров и законодателей моды... 1с предлагает свою модель метаданных и свой язык программирования для работы с этими метаданными - программист работает с объектами типа Документ, Справочник итд не вникая, как его код преобразуется в SQL, ( и тем более не задумываясь, какими ноликами/единичками это все выглядит на винте, в памяти, в триггерах проца ) мелкомягкие предлагают линк, который позволяет создать свою модель метаданных и определить "язык программирования" для этой модели "команда php" в составе Zend-a предлагает набор классов, который тоже позволяет абстрагироваться от конкретной БД ИМХО, явно заметен тренд от "0/1" к объектам реального мира как сейчас никто даже не задумывается об том, что "если вставить ассемблерный код - программа будет работать быстрее", так вполне вероятно, к этому идет, через некоторое время никто не будет думать о том, чтобы вставить SQL-код в программу сейчас же (пока что) "ассемблерные вставки" дают некоторый, иногда незаменимый эффект сколько это продлится сказать трудно, но при возникновении такого вопроса сразу всплывает фраза "вычислительная мощность увеличивается... в стоко-то раз за каждый отчетный период" :) зы. при этом ес-но, задачи "размещение ноликов/единичек" и "создание SQL-запросов" - никто не отменял, и операционки кто-то пишет, и движки БД :) вот только это знание/программирование чем дальше, тем дальше от задач, которые решает прог-прикладник :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 23:45 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chop...пришлось параллельно пускать синусоиду с осциллографа.... пардонте, очепятался... не с осциллографа,а с генератора, ес-но, который в том числе позволял генерировать и синусоидальный сигнал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 23:50 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chop, пару раз перечитал, но смысл посылки не совсем понял. О чем она, в двух словах? смотрю "Письма с Иводзимы", может это какой-то отпечаток накладывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:06 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
iscrafmChop, пару раз перечитал, но смысл посылки не совсем понял. О чем она, в двух словах? :) цитата: как сейчас никто даже не задумывается об том, что "если вставить ассемблерный код - программа будет работать быстрее", так вполне вероятно, к этому идет, через некоторое время никто не будет думать о том, чтобы вставить SQL-код в программу сейчас же (пока что) "ассемблерные вставки" дают некоторый, иногда незаменимый эффект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:24 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chop, спасибо, мысль понятна. Меньше букв и все однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
за счет "железа" многое достигается. Скоро выпустят "SQL-процессоры" и об этом все забудут. Причем быстро... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:29 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
iscrafmменьше букв и все однозначно. я два часа пифо пил пока сформулировал а ты хтишь в двух словах и без восспоминаний о временах, когда деревья были большими? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:41 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chop, ладно, перенесем типа серьезные темы. Успехов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:45 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
iscrafmладно, перенесем типа серьезные темы. Успехов :) и вам - на добранич у нас уже час ночи почти, пора спать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:47 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
OFF: Chop, какое пиво в Киеве предпочитаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:48 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopу нас уже час ночи почти, пора спать :) я сейчас в Киеве, и у нас почти 12. Но никак не час ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:49 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
iscrafmя сейчас в Киеве, и у нас почти 12. Но никак не час таки да, уже увидел, глюк винды - постоянно часы сбиваются в компе, не могу понять почему :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 00:55 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Chopiscrafmя сейчас в Киеве, и у нас почти 12. Но никак не час таки да, уже увидел, глюк винды - постоянно часы сбиваются в компе, не могу понять почему :) часовой пояс стоит "масковский", наверна и "сихронизация с сервером времени Интернета" включена зы Zver ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2011, 01:40 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1542319]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
114ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 572ms |

| 0 / 0 |
