powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / linq2sql vs хранимые процедуры
119 сообщений из 119, показаны все 5 страниц
linq2sql vs хранимые процедуры
    #37097825
Shakill_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
веб-приложение работает с базой ms sql, которую я сопровождаю. разработчик этого приложения осваивает и активно применяет Linq2Sql. с его слов, это гораздо удобнее при разработке, нежели использование хранимок, последующий разбор датасетов по объектам и прочее. а так как все это дело под веб, то проблем с распространением изменений не возникает

есть ли серьезные основания пытаться убедить разработчика отказаться от использования linq2sql, помимо того что я не могу влиять на оптимальность этих запросов?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37098072
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть !

+ ХП :

безопасность
проще организовать транзакции
Можно одинаково хорошо использовать в разных приложениях
Много специалистов про SQL
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37098178
Shakill_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSVЕсть !
+ ХП : спасибо за комментарий, я в ответ как бы поставлю себя на место разработчика

безопасность можно наглядный пример?
проще организовать транзакциитут будет аргумент, что приложение из разряда отчетности, только читает данные, и посему один запрос - одна транзакция
Можно одинаково хорошо использовать в разных приложениях в основном, запросы получаются довольно специфичными и вероятность использования в других приложениях мала
Много специалистов про SQL imho средний сишарпер скорее владеет линк2скл, чем не владеет. а их сейчас тоже немало
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37098338
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill_безопасность можно наглядный пример?
проще организовать транзакциитут будет аргумент, что приложение из разряда отчетности, только читает данные, и посему один запрос - одна транзакция
Можно одинаково хорошо использовать в разных приложениях в основном, запросы получаются довольно специфичными и вероятность использования в других приложениях мала
Много специалистов про SQL imho средний сишарпер скорее владеет линк2скл, чем не владеет. а их сейчас тоже немало1. Юзер имеет право только на ХП. Ничего другого он не увидит.
2. Это не аргумент. Завтра может появится нужда.
3. Это не аргумент.
4. А я шарпа в глаза не видел. :) А SQL прост и везде почти одинаков и время над ним не властно. Огромный охват специалистов.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37098623
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill_, нет аргументов
все аргументы сводятся к тому, что " это я знаю, а это - не знаю, вот на это могу влиять, а на это - нет "

как пример - LSV - " я шарпа в глаза не видел. "
сомневаюсь, что ковырять код приложения на шарпе пустят человека, который шарпа в глаза не видел
:)

Shakill_ , какая тебе вообще разница, что юзает разработчик?
если ему так удобней и он, в отличие от тебя знает и линк, и хранимки, то ты его никак не убедишь

может просто не можете поделить зоны ответственности?
тогда с этого и начинай ставить вопрос
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37098909
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill_веб-приложение работает с базой ms sql, которую я сопровождаю. разработчик этого приложения осваивает и активно применяет Linq2Sql. с его слов, это гораздо удобнее при разработке, нежели использование хранимок, последующий разбор датасетов по объектам и прочее. а так как все это дело под веб, то проблем с распространением изменений не возникает

есть ли серьезные основания пытаться убедить разработчика отказаться от использования linq2sql, помимо того что я не могу влиять на оптимальность этих запросов?
Процедуры - это один из способов разделения уровней приложения.

Т.е. сервер - это не надёжно хранящийся массив байтов, а именно сервер - система, хранящая данные и отвечающая на запросы на получение и изменение данных от других систем.

СУБД отвечает за их целостность, оптимальность операций над ними и т.п. За неё отвечают отдельные специалисты. И интерфейс к СУБД - как раз процедуры. Больше на роль интерфейсов между уравнями ничего и нет.

Так же есть какой то сервер бизнес-логики, есть клиент - это всё отдельные компоненты. Хотя ведь можно сказать, что они тоже не нужны - приложение может и рисовать, и хранить данные, и содержать логику, и всё это на каком то мышкорисовательном средстве разработки.

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

В некоторых системах типа САП-а обычные процедуры не используются, но процедуры там всё равно есть, просто для этого сделан свой язык, среда выполнения и все необходимые инструменты.

Разработчик Linq2Sql, конечно, не может правильно оценить такие вещи, тут нужен архитектор, способный взглянуть на всё это шире, не как программист.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37099206
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg...тут нужен архитектор, способный взглянуть на всё это шире, не как программист.+1
добавлю, и не как админ БД
вопрос в том, как приложение разделено по слоям
если бизнес-логика сидит на клиенте, то переносить ее на ХП - изврат чреватый многими неприятностями
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37099262
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все зависит от того - что это за приложение
хп можно генерировать из пиложения, впрочем как и само приложение из другого
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37099284
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopalexeyvg...тут нужен архитектор, способный взглянуть на всё это шире, не как программист.+1
добавлю, и не как админ БД
вопрос в том, как приложение разделено по слоям
если бизнес-логика сидит на клиенте, то переносить ее на ХП - изврат чреватый многими неприятностямиЭто идеология разовых и маленьких программ. Конечно, если мы говорим про программы, работающие с базами данных.

Не разовые программы работают со многими БД, и много приложений работают с одной БД. Конечно, программисту клиента приятнее, что у него всё под контролем, но это всего лишь точка зрения программиста.

Просто не бывает чего то приличного без разделения на уровни. Не получится.

А выделение уровня в виде СУБД - это вполне доступный и нормальный путь.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37099287
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill_веб-приложение работает с базой ms sql, которую я сопровождаю. разработчик этого приложения осваивает и активно применяет Linq2Sql. с его слов, это гораздо удобнее при разработке, нежели использование хранимок,

Shakill_,

угостите этого вэбера вот этим топиком
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37099988
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgChopесли бизнес-логика сидит на клиенте, то переносить ее на ХП - изврат чреватый многими неприятностямиЭто идеология разовых и маленьких программ. Конечно, если мы говорим про программы, работающие с базами данных.гы...
1С тогда - разовая и маленькая программа?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37100156
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChopalexeyvgЭто идеология разовых и маленьких программ. Конечно, если мы говорим про программы, работающие с базами данных.гы...
1С тогда - разовая и маленькая программа? 1С как раз разделяет уровни. Вы наверное с ней не работали?

Там ведь бизнес-логика и работа с данными не пишется на том языке, на котором программируется клиент. Не смешивается всё в кучу.

Клиент и сервер приложений написан на С++, но при этом разработан свой внутренний язык, и никто этот код на С++ даже не видит. Работа с данными и прикладная логика пишется на внутреннем языке.

Отсутствие уровней - это если бы всё реализовавалось прямо на том языке, на котором разработан клиент (или сервер приложений), то есть на С++.

Так что 1С, как и любая приличная платформа, использует деление на уровне как по архитектуре, так и по программированию.

При этом в 1С не стали использовать СУБД как отделного уровня в системе.
Ну так и это добавляет гемороя - трудно поручить СУБД специалистам (ДБА или Database developers) решить проблемы с производтельностью и т.п. Идёт поток запросов и разбирайся как хочешь - для полноценной работы DBA должен обязательно быть хорошим специалистом в 1С
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37100912
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgТам ведь бизнес-логика и работа с данными не пишется на том языке, на котором программируется клиент. Не смешивается всё в кучу.

Клиент и сервер приложений написан на С++, но при этом разработан свой внутренний язык, и никто этот код на С++ даже не видит. Работа с данными и прикладная логика пишется на внутреннем языке.

ну и что? чем это Хорошо? если DSL полностью описывает DS, то вопросов нет. А что в 1С DS? и где DSL?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37101096
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosalexeyvgТам ведь бизнес-логика и работа с данными не пишется на том языке, на котором программируется клиент. Не смешивается всё в кучу.

Клиент и сервер приложений написан на С++, но при этом разработан свой внутренний язык, и никто этот код на С++ даже не видит. Работа с данными и прикладная логика пишется на внутреннем языке.

ну и что? чем это Хорошо? если DSL полностью описывает DS, то вопросов нет. А что в 1С DS? и где DSL?Не знаю, где в 1С DS.

Это хорошо тем, что прикладному программисту легче разбираться в этом внутреннем языке. Даже если он не полностью описывает DS и если даже непонятно, что такое DS для 1С

Просто на С++ прикладные программисты ничего бы не писали и прикладных применений у 1С не было бы.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37101394
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg1С как раз разделяет уровни. Вы наверное с ней не работали?работал, работал...
твою логику понял и готов согласиться
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103334
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgПроцедуры - это один из способов разделения уровней приложения.

Т.е. сервер - это не надёжно хранящийся массив байтов, а именно сервер - система, хранящая данные и отвечающая на запросы на получение и изменение данных от других систем.

СУБД отвечает за их целостность, оптимальность операций над ними и т.п. За неё отвечают отдельные специалисты. И интерфейс к СУБД - как раз процедуры. Больше на роль интерфейсов между уравнями ничего и нет.

Так же есть какой то сервер бизнес-логики, есть клиент - это всё отдельные компоненты. Хотя ведь можно сказать, что они тоже не нужны - приложение может и рисовать, и хранить данные, и содержать логику, и всё это на каком то мышкорисовательном средстве разработки.

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

В некоторых системах типа САП-а обычные процедуры не используются, но процедуры там всё равно есть, просто для этого сделан свой язык, среда выполнения и все необходимые инструменты.

Разработчик Linq2Sql, конечно, не может правильно оценить такие вещи, тут нужен архитектор, способный взглянуть на всё это шире, не как программист.

хранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103351
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS,

а какие пробемы?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103419
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа какие пробемы?
граф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку?
Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103704
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSхранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Заменить архитектора. Всего-то делов... :)
Расшифруйте, что значит с ООП подходом и чем это противоречит работе через ХП ? Все современные приложения написаны с ООП. И ?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103799
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVРасшифруйте, что значит с ООП подходом и чем это противоречит работе через ХП ?
ничем не противоречит. Да вы не стесняйтесь, ответьте для начала на вопрос про графы
LSVВсе современные приложения написаны с ООП.

lol
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103834
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSПолучение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно?Неверно. Зачем для этого отдельная ХП ? Достаточно одной с набором параметров-фильтров.
Гибкость этих фильтров конечно не очень высока, но в большинстве случаев вполне достаточна.

У нас подобным образом выполнена система отчетов. У отчетов может быть более 20 параметров, в т.ч. необязательных. Исключительно ХП.
Для добавления новых параметров правим только СКЛ-скрипт. Приложение само их увидит.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37103980
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не не, я не про отчетность. Это вообще тема отдельного разговора. Но раз уж про них заговорили, покажите-ка заодно как там у вас этот необязательный параметр реализован. Т.е. есть параметр Name, если он null, то не учавствует в фильтре, если не null, то учавствует.

Я говорю именно про граф объектов .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Street
  Property int ID...
  Property string Name...
  Property List Houses...

class House
  Property int ID...
  Property string Number...
  Property List Flats...

class Flat
  Property int ID...
  Property int Number...
  Property Person Owner...

Итак, покажите как вы собрались реализовывать материализацию этих классов из БД использую интерфейс ХП.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37104411
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSViPRosа какие пробемы?
граф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку?
Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно?
обе варианта присутствует
в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу
в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37104462
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS,

если Именно фильтрация , то можно явно задвать IsNull и т.д.
если имеется ввиду оптимизм, то настройки свойств типа для включения в результирующий запрос(если режим динамический скл)/хп(если режим статический скл)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37104465
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХП генерируются автоматически если включен режим - статический скл)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37104540
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSalexeyvgПроцедуры - это один из способов разделения уровней приложения.


хранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП?

Это новое слово в теории! :-)

Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105616
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosобе варианта присутствует
в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу
в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает)
вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы.

Кстати расскажите заодно, как-там это переключение между режимами работает. Я устанавливаю это как параметр всей сессии, или каким-то образом могу пометить любой узел графа что-бы он грузился полностью или навигационно?

ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д.

я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105619
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgхранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП?

Это новое слово в теории! :-)

Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо.[/quot]
к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем"
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105622
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо

к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем"
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105811
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSalexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо

к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем"
Вы про этот вопрос?
StalkerSграф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку?
Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно?
Да, для нужных бизнес-действий будут нужны соответствующие интерфейсы.

У вас-же код не получается сам по себе, его же пишут?

Просто вы к написанию ХП относитесь со страхом - как это, НАПИСАТЬ ХП???

Да, будут разные ХП для работы получением данных из структуры Streets -> Houses -> Flats, они будут возвращать разные наборы атрибутов и иметь разные параметры, в зависимости от назначения.

По любому нужно писать весь этот код. Ведь каждое получение данных делается не изолированно - это свой интерфейс, своё отображение, своя логика взаимодействия с пользователем.

В каких то случаях использование ORM будет упрощать программирование получения данных, но в ущерб скорости, и упрощение общей работы очень маленькое, потому как получение данных - не самая трудоёмкая для программиста часть работы.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105837
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д.

я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?Вы просто не задумывались, как можно структурировать и вообще организовывать код на стороне СУБД.

У нас, например, были процедуры для отображения данных (они только выводили нужные данные, не делая фимльтрацию), а фильтрацию данных делали другие процедуры, передавая потом то, что нужно отобразить, первым процедурам.
В процедуре фильтрации есть параметры типа сортировки, простраинчного вывода и т.п, которые просто напрямую передаются в процедуру обработки.
Соответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата).

Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте.

То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106044
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgСоответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата).

Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте.

То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных.
о как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет?
Можете привести схематично что это за процедуры ? А то честно говоря из того что вы написали я слобо представляю как данные из БД с помощью ваших процедур окажутся в моем графе.
Юзер-кейсы, которые я приводил это поиск 9-ти этажных домов по всем улицам, можно добавить обновление статуса квартиры если задолженность там превысила порог, или удаление чего-нибудь
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106079
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :)

А теперь поведайте нам про безопасность системы, работающей прямыми запросами.
Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106282
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVиз того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :)

А теперь поведайте нам про безопасность системы, работающей прямыми запросами.
Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения.
это вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил.
Или вы за сутки так и не придумали ответ?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106580
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSо как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет? А сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ.

Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности.

У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие.

Зато он есть, интерфейс.

Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций.

Хотя это в общем то неважно - всё равно простых добавлений удалений и т.д обычно не бывает - обычно есть бизнес-действия, которые надо программировать, и в этих бизнес-действиях обычно много чего есть кроме вставки одной записи в одну таблицу.

Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106617
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSэто вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил.
Или вы за сутки так и не придумали ответ? Мне, честно говоря, нечего сказать.

Я не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106618
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSViPRosобе варианта присутствует
в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу
в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает)
вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы.

Кстати расскажите заодно, как-там это переключение между режимами работает. Я устанавливаю это как параметр всей сессии, или каким-то образом могу пометить любой узел графа что-бы он грузился полностью или навигационно?

ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д.

я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?
Ты лучше не гадай , а поспрашивай. :) Никаких пулеметов и очередей. Есть навигационный граф, и есть помеченнные подграфы (макротипы).
Вот часть графа, и макротип.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106619
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106634
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106654
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

а вот автоматически сгенерированная форма для макротипа
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106691
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Навигационный режим - для визуального анализа данных и построения отчетности, и еще очень хорош время проектирования.
Режим макротипов - основной режим работы спректированного (сгенерированного из метеданных + нелинейные методы) приложения.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106712
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

в навигацинном режиме граф грузится принудитльно, по мере телодвижений клиента, в режиме макротипов граф грузится строго по макротипам (целостно, макротип неделимый транзакционый элемент системы), даже простые типы имеют дефольтное макротипное представление, при этом типы структруирующие разные макротипы могут быть из одного и того же множества типов, что не мешает целостному опрерированию макротипами.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107008
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :)

Напоминает задачу Х=1+2 на С++ на три листа.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107038
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSValexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :)


Подозреваю, что человек говорить не о явных вызовах "чтение-запись" разной грануляности по усмотрению прогера, а о какой то встроенной семантике.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107135
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgА сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ.

Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности.

У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие.

Зато он есть, интерфейс.

Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций.

Хотя это в общем то неважно - всё равно простых добавлений удалений и т.д обычно не бывает - обычно есть бизнес-действия, которые надо программировать, и в этих бизнес-действиях обычно много чего есть кроме вставки одной записи в одну таблицу.

Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык.
имхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше.

Повторю начальные условия:
Есть три класса доменной модели -
Код: plaintext
1.
2.
class Street...
class House...
class Flat...

Есть три таблицы в БД:
Код: plaintext
1.
2.
table Streets...
table Houses...
table Flats...
Задача - данные из таблиц материализовать в классы модели и обратно.
Один из возможных юзеркейсов - получить коллекцию 9-ти этажных домов со всех улиц. Или проапдейтить статут квартир у которых задолженность выше пороговой.

Для примера, на linq2sql для этого было-бы написано что-то типа:

Код: plaintext
1.
2.
3.
var query =
from s in streets.Street
from h in streets.House
where s.ID == h.HouseID and h.Floors = 9
Был-бы автоматически сгенерирован запрос с джойном между улицами и домами. Резалтсет был-бы затем превращен в классы доменной модели.

Вопрос: покажите, как это будет реализовано у вас, в случае когда таблицы закрыты забором из ХП. Интересует как работает цепочка tables -> ... -> domain class.
Желательно показать кодом (схематично).

ViPRosЕсть навигационный граф, и есть помеченнные подграфы (макротипы).

ну так и покажи на моем простеньком примере как все будет работать вместо вываливания кучи картинок. Задача описана выше.
Какие ХП будут учавствовать, как и кто будет выбирать нужные ХП, как все это превратиться в доменные классы и затем сохраниться обратно. Смелее.
Пока-что из твоих картинок я не вижу ничего нового - загружается подграф целиком вместо только нужных частей. Недостаток этого я указывал выше - на клиента идет масса данных, которые ему не нужна.

ViPRosи если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл.

это сейчас о чем? ;) Про необязательные параметры? При чем тут nullable поля?

Код: plaintext
1.
2.
3.
4.
5.
create procedure Test
@name varchar( 100 ),
@surname varchar( 100 )
as

select * from People where Name = @name ...
допиши эту процедуру, что-бы в случае когда @surname is null поиск происходил только по имени, а когда не null - по имени и фамилии
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107389
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помимо безопасности, разделения кода на слои, не стоит забывать о том, что ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это. Да при программисту , пишущему клиента, иногда вообще не стоит знать структуру данных в БД.
В MSSQL даже придумали такие модные вещи, как instead-триггеры. Вешаешь его на модифицирующую вьюху(вот тебе и сущность), в триггере редактируешь данные, а из каких таблиц во вьюху данные попатают, тебе и знать незачем...

StalkerS , что вы со своими графами так привязались... Вам уже 10 раз написали: на каждую сущность будет несколько процедур: читающая, читающая с фильтром, модицирующая(инсерт, апдейт), удаляющая. В процедурах модификации так же можно настроить проверку корректности изменения и удаления.
+ ХП - это предварительно скомпилированный код, и он работает немного быстрее , чем прямой sql-код.
+ для систем(веба, например) со слабым каналом связи по интернету это ведет к уменьшению запроса, т.к. на сервер передается только вызов ХП, а не текст запроса, который может быть большим.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107397
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS

Код: plaintext
1.
2.
3.
4.
5.
create procedure Test
@name varchar( 100 ),
@surname varchar( 100 )
as

select * from People where Name = @name ...
допиши эту процедуру, что-бы в случае когда @surname is null поиск происходил только по имени, а когда не null - по имени и фамилии
Код: plaintext
1.
2.
3.
if @surname is null
select * from People where Name = @name
else
select * from People where Name = @name and surname = @surname 
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107471
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSимхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше.Не увидел я такого изменения темы, по крайней мере в вашем первом посте.

Конечно, если БД - это просто не стирающиеся при выключении питания переменные, интерфейсов нет, то, конечно, использование ХП не имеет смысла. Или в крайнем случае, иожно использовать автоматически генерируемые ХП, но это никак не отличается от прямых обращений к таблицам.

ХП нужны только как интерфейс к СУБД, ни для чего больше.

Это как обсуждение варианта - использовать для обращения у серверу приложений веб-сервисы или открыть его память клиенту и обращаться напрямую.
Если ставится жёсткое условие - клиент будет работать только с внутренними объектами апп-сервера, которые у него в памяти и никогда - с определёнными кем-то интерфейсами, то городить веб-сервисы для обращения к памяти просто глупо.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107486
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS,

ты просто не въехал :)
грузится именно помеченный подграф(макротип, бизнес-объект, агрегатный класс,,. как хошь назови), а не произвольный
процедуру эту дописывает автоматом на случай нулл даже адо.нет :)
к картинкам бы надо было посерьезнее присмотреться
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107495
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я воще то понимаю что тебя мучает -
как грузить нужную проекцию нужного подграфа :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107508
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну что бы не мучился - на вход процедуры подается таблица форинкеев родительской таблицы на всю глубину помеченого подграфа
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107516
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в случае динамической скл подается сам актуальный скл
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107521
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для джойна
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107529
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megabyte... ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это..
предполагается, что ХП пишут исключительно пряморукие программисты
или, что с помощью ХП поломать данные в принципе невозможно?
:)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107976
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChopMegabyte... ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это..
предполагается, что ХП пишут исключительно пряморукие программисты
или, что с помощью ХП поломать данные в принципе невозможно?
:)Имеется в виду, что во первых, защита на нескольких уровнях повышает вероятность её срабатывания. Во вторых, ХП пишут программисты, которые разработчики БД. Они могут неумелыми действиями поломать веб-сервер, но данне - это их родное :-)
Это называется "специализация".

Ну и код в ХП действительно более "прямой".

Обычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида.

А вот для программиста ХП такое представить трудно.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108008
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНе увидел я такого изменения темы, по крайней мере в вашем первом посте.

хм, в моем первом посте я спрашивал что делать, если клиент написан с ООП подходом, и даже приводил примеры классов. По определению, если строиться доменная модель, то вся логика там и находиться (если это не какой-нибудь анемик, но даже в этом случае логика просто выноситься в классы сервисов). Тогда уж скажите, о какой архитектуре вы думали, что есть и ООП и вся логика в БД.

alexeyvgКонечно, если БД - это просто не стирающиеся при выключении питания переменные, интерфейсов нет, то, конечно, использование ХП не имеет смысла.

вот именно. Какая-то часть логики в базе правда в любом случае присутствует в виде ограничений на данные, но не более.
Маппинг на ХП в этом случае приведет к создания CRUD процедур для каждой сущности и крайне неэффективной работе с БД

ViPRosты просто не въехал :)
грузится именно помеченный подграф(макротип, бизнес-объект, агрегатный класс,,. как хошь назови), а не произвольный
процедуру эту дописывает автоматом на случай нулл даже адо.нет :)
к картинкам бы надо было посерьезнее присмотреться

ну так покажи уже код наконец.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108009
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megabyte
Код: plaintext
1.
2.
3.
if @surname is null
select * from People where Name = @name
else
select * from People where Name = @name and surname = @surname 

так. Покажи-ка тогда что делать, когда таких параметров 15 штук :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108016
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS,

это закрытая система
все что тебе надо было, я сказал
садись и делай :)
когда 1 и 15, 15 называется рутиной, а рутину автоматизируют
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108033
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosэто закрытая система

т.е. кода ты даже и не видел
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108035
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgИмеется в виду, что во первых, защита на нескольких уровнях повышает вероятность её срабатывания. Во вторых, ХП пишут программисты, которые разработчики БД. Они могут неумелыми действиями поломать веб-сервер, но данне - это их родное :-)
Это называется "специализация".
"которые разработчики БД" вполне могут быть такие же криворукие, как и любые другие програмисты
родные для них данные или не очень родные...
я сейчас пишу отчет по ... виду страхования
весь отчет - чистый SQL - система другого не предполагает
(будет время - реализую оный и через php, и через .NET)
увы и ах, при моем мнении, что БД - исключительно хранилище данных
приходится вот такое делать
могу сказать, что когда вкапываешься в структуру БД...
слов нет, одни выражения... многоэтажные
разработчики БД не только не знают, что такое внешние ключи, но и о никаких нормальных формах даже не слышали
у них - клипперовская система 20-летней давности с костылями "под винду"... :(
отсутствие документации... это даже не пэстня...

alexeyvgОбычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида.
непрадва
это, может быть, применимо к конфигурастам 1С (и то не ко всем), но любой студент, к-й клепает сайты на php, пусть самые примитивные, но запросы писать умеет

alexeyvgА вот для программиста ХП такое представить трудно.
очень даже лехко
если "фирма" разрабатывает какую-нить систему, то сомневаюсь, что там работают и "гуру", и "студенты" на разработке модулей
не может такого быть - один модуль разрабатывает "гуру", а другой - "студент"
либо все - "гуру", либо все - "студенты"
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108042
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgОбычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида.

Кхм... какие-то уж очень тупые у Вас там программисты. Это же как они бедняги данные обрабатывают даже не имея представления о их структуре? Или у Вас только студенты за миску супа? Ну специализация при работе над крупным проектом идет только на пользу, но чтобы писать программу не зная SQL...
По теме: имхо linq2sql какбэ не зря придумали. Мы обычно тоже через ХП работаем, но писать бизнес логику на linq2sql удобнее (читай: эффективнее). По сути автоматически делается то, что при Вашем подходе требует написания тучи ХП и тучи кода. Материализовать объекты, сделать сложные выборки с массой условий...
Но с другой стороны, конечно, сложнее оптимизировать саму БД....
Вот и гадай, что лучше - туча очень оптимизированных ХП, возвращающих избыточные данные или простые понятные "тупому" программисту средства, делающий запросы, которые возвращают только нужные данные?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108051
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultra_alexВот и гадай, что лучше - туча очень оптимизированных ХП, возвращающих избыточные данные или простые понятные "тупому" программисту средства, делающий запросы, которые возвращают только нужные данные?
зависит от типа приложения.. Если датацентрик - то вся логика обычно отправляется на сервер в ХП. Если сложная ветвистая логика - то доменная модель удобнее. Хотя по большей части будет зависеть от скиллов, которыми обладают разработчики..
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108053
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StalkerSзависит от типа приложения..
Вот! В том то и дело, что вместо упертых попыток доказать абсолютную истинность своей точки зрения можно просто определить область применения той или иной технологии.

Если приложение использует БД только как хранилище данных, то технически без разницы как делать запросы: через ХП или из кода. Но зато ХП проще поддерживать.

Если в приложении есть сложная бизнес-логика, то уже вопрос как оно спроектировано. Если все сделано "красиво" и все сущности материализуются в объекты, то ИМХО правильнее использовать linq2sql. А если бизнес-логика тупо гоняет данные туда-сюда, то проще через ХП.

Ну а если есть желание написать ВСЮ бизнес-логику в БД... Ну вот изменились условия задачи (заказчик сказал, что теперь мы вот это рассчитываем не так, а эдак), тогда переделываем мы N ХП и... В 90% случаев код тоже нужно менять. А если код все равно менять, то проще сразу все делать через код.

Или я в чем-то не прав?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108055
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS. Если чессно, я не сталкивался с ситуацией, когда за БД отвечают одни люди, а за программный код другие. У нас небольшая команда и каждый умеет и то и другое. Вот надо мне реализовать такой-то функционал, беру пишу какой мне надо код, какие мне надо ХП и все!
Знающие люди, подскажите, как работает команда, когда программер не лазит в БД? Я просто не представляю! Получается я должен пойти к БД-девелоперу и объяснить, что мне нужно, чтобы БД вернула мне такие-то данные. А он через 15 минут говорит: "ок, Саня, можешь юзать sp_Get_bla_bla_bla". Так что-ли?
Так может мне быстрее самому написать чем кому-то объяснять? Или в чем тогда выигрыш?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108061
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultra_alexНу а если есть желание написать ВСЮ бизнес-логику в БД... Ну вот изменились условия задачи (заказчик сказал, что теперь мы вот это рассчитываем не так, а эдак), тогда переделываем мы N ХП и... В 90% случаев код тоже нужно менять. А если код все равно менять, то проще сразу все делать через код.

когда клиент тонкий и только дергает ХП с сервера, то при изменении бизнес-логики как-раз таки клиента менять часто не приходиться, a только тогда когда меняется сигнатура методов
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108063
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я так и написал:

Если приложение использует БД только как хранилище данных, то технически без разницы как делать запросы: через ХП или из кода. Но зато ХП проще поддерживать.
Если в приложении есть сложная бизнес-логика...
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108435
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgОбычно программисты, разрабатывающие клиента, не представляют, какие запросы выполняются на сервере в результате выполнения их кода. Ну, может быть, один из 20 представляет, обычно это кто-то повыше тимлида.
Chopнепрадва
это, может быть, применимо к конфигурастам 1С (и то не ко всем), но любой студент, к-й клепает сайты на php, пусть самые примитивные, но запросы писать умеет

ultra_alexКхм... какие-то уж очень тупые у Вас там программисты. Это же как они бедняги данные обрабатывают даже не имея представления о их структуре? Или у Вас только студенты за миску супа? Ну специализация при работе над крупным проектом идет только на пользу, но чтобы писать программу не зная SQL...Ну не знаю...

Тот, кто клепает сайты на php, конечно, представляет - он же сам пишет запросы.

Я про тех, кто использует ОРМ, linq2sql...

Тогда некоторые ещё могут с трудом приблизительно представить , что будет делать сервер в ответ на конкретное выражение от linq2sql.

Но в целом, сказать, что будет происходить на сервере при рефреше страницы уже не могут...

Смотришь иногда на трейс - там бред. А в ответ программисты говорят - это не мы, это linq2sql :-)

ultra_alexПо теме: имхо linq2sql какбэ не зря придумали. Мы обычно тоже через ХП работаем, но писать бизнес логику на linq2sql удобнее (читай: эффективнее). По сути автоматически делается то, что при Вашем подходе требует написания тучи ХП и тучи кода. Материализовать объекты, сделать сложные выборки с массой условий...Ну я же не говорю, что linq2sql зря придумали :-)

Просто при увеличении сложности систем ХП становятся удобным способом деления на уровни.

Рассматривать БД как часть прикладной программы можно только в простейших случаях. Т.е. сайтик и одноразовая БД для управления контентом этого сайта - тут нормально, а если программа пишется для уже существующей БД?

Если БД существует долго, то такой подход просто не сработает. Программ для этой БД будет написано много, они будут на разных языках (понятное дело - ведь век языка недолог), мапировать всё будет сложно...
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108604
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultra_alexPS. Если чессно, я не сталкивался с ситуацией, когда за БД отвечают одни люди, а за программный код другие. У нас небольшая команда и каждый умеет и то и другое. Вот надо мне реализовать такой-то функционал, беру пишу какой мне надо код, какие мне надо ХП и все!
Знающие люди, подскажите, как работает команда, когда программер не лазит в БД? Я просто не представляю! Получается я должен пойти к БД-девелоперу и объяснить, что мне нужно, чтобы БД вернула мне такие-то данные. А он через 15 минут говорит: "ок, Саня, можешь юзать sp_Get_bla_bla_bla". Так что-ли?
Так может мне быстрее самому написать чем кому-то объяснять? Или в чем тогда выигрыш?

Off.
Нормально работает. В большинстве своем программисты не БД части даже не подозревают, что происходит в системе. БД разработчики подготавливают все необходимые интерфейсы для работы с данными, после чего программисты Клинета/Сервера апп пользуются этими интерфейсами. 99% необходимости лезть в БД нет у остальной команды. На 1% можно и задачу создать.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37108789
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читаю я эти холивары, читаю...
так и не убедился, что к БД надо относиться, как к чему-то большему, чем простое хранилище данных,
способное на что-то большее, чем следить за ссылочной целостностью
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37109301
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopчитаю я эти холивары, читаю...
так и не убедился, что к БД надо относиться, как к чему-то большему, чем простое хранилище данных,
способное на что-то большее, чем следить за ссылочной целостностью

а как тогда обрабатывать большие объемы данных - т.е. когда в правилах БЛ надо обновить/расчитать десятки тысяч значений? или как быть, когда идет связанная обработка? руцями, итерационно?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37110299
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Chopтак и не убедился, что к БД надо относиться, как к чему-то большему, чем простое хранилище данных
Ну тут уж как посмотреть. Если смотреть на БД как на "набор табличек с данными" и делать запросы из кода, то - ДА!
Но потом приходит понимание, что запросы реализуют значительную часть логики и поэтому удобнее вынести ее в БД (по средствам ХП). Это создает целостность данных и методов работы с ними
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37110484
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultra_alexЭто создает целостность данных и методов работы с ними
и размазывает бизнес-логику по разным слоям
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37110986
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopultra_alexЭто создает целостность данных и методов работы с ними
и размазывает бизнес-логику по разным слоям1. Ничего страшного. Обычное дело
2. Слой клиента обычно некритичный: скрыть/деактивировать контрол на форме или что-то в этом роде.
С бизнес-логикой сама СУБД справляется как правило лучше и эффективнее, чем приложение.
Единственный реальный минус - непортируемость на другую СУБД, но далеко не всегда критично.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111227
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVChopи размазывает бизнес-логику по разным слоям1. Ничего страшного. Обычное дело
2. Слой клиента обычно некритичный: скрыть/деактивировать контрол на форме или что-то в этом роде.
С бизнес-логикой сама СУБД справляется как правило лучше и эффективнее, чем приложение.
Единственный реальный минус - непортируемость на другую СУБД, но далеко не всегда критично.
1. спорно: обычное дело - прог приложения лучше знает предметную область, чем прог БД, переносить бизнес-логику в БД - добавлять лишнее звено
2. спорно: приведи пример для 1С да и слой клиента зачастую состоит не только из этого, а в случае толстого клиента так и ваще
спорно: бизнес-логика состоит не только из работы с данными
спорно: минус не единственный, например серьезный минус - вместо одного прога надо два, вместо того чтобы поддерживать один модуль - приходится поддерживать два со всеми вытекающими
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111279
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. спорно: приведи пример для 1С да и слой клиента зачастую состоит не только из этого, а в случае толстого клиента так и ваще
спорно: бизнес-логика состоит не только из работы с даннымиДа уж 1С просто образец высокой производительности и оптимальности. Ога.
Сделано это в т.ч. для портируемости. Один код для любой СУБД. А сама СУБД в данном случае - свалка таблиц.
Аналогично кстати в большинстве западных ERP систем.
переносить бизнес-логику в БД - добавлять лишнее звеноТак и запишем - ХП и триггеры придумали дураки. :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111319
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVДа уж 1С просто образец высокой производительности и оптимальности. Ога.уж какой есть :)
по распространнести может конкурировать очень со многими
эффективность решения в целом состоит не только из быстрой отработки запросов
но и из скорости и простоты разработки и сопровождения
если ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю...
пусть даже не настолько оптимально с точки зрения БД
какое решение будет более эффективно? :)
LSVСделано это в т.ч. для портируемости. Один код для любой СУБД. А сама СУБД в данном случае - свалка таблиц.
Аналогично кстати в большинстве западных ERP систем.
видать были аргУменты для принятия такой архитектуры... :)
LSVпереносить бизнес-логику в БД - добавлять лишнее звеноТак и запишем - ХП и триггеры придумали дураки. :)
да записывай как угодно, я этого не говорил
но чем больше длина цепочки - тем более высока вероятность искажения сигнала, тем более высока стоимость передачи
от этого никуда не денешся
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111389
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopесли ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю...
пусть даже не настолько оптимально с точки зрения БД
какое решение будет более эффективно? :)

то, что востребованно. Не даром 1С используется как вариант "из коробки" и для не больших контор.
Серьезные вынуждены разрабатывать свои системы учета, которые будут оптимизированы под конкретные задачи. Почему-то еще не встречал серьезных бизнес решений с высокими требованиями по производительности которая бы использовала БД как свалку таблиц

Chopда записывай как угодно, я этого не говорил
но чем больше длина цепочки - тем более высока вероятность искажения сигнала, тем более высока стоимость передачи
от этого никуда не денешся

ничего подобного, звенья цепочки теже самые.
PS:
Если человек считает, что БД - груда хлама из данных - то я не вижу смысла таким использовать клиент-сервеные БД - юзайте файловые, что в лоб, что полбу

PPS
Если человек не знает, как это реализовать, то это не значит, что это такой подход не правильный.

Chop а как на счет производительности обработки массивов данных? десятки и сотни тысяч строк? тоже клиет будет делать?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111502
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю.
Аналогично и наоборот: запрос из 10 строк с группировками, сложным суммированием, подзапросами(пишем за 5-7мин) может быть аналогичен нескольким сотням строк плохочитаемого кода приложения, кот. пишутся за 2-3 дня.
Про производительность и бешенный Ethernet-трафик (иногда очень важно) - отдельная тема.
Ваяние же SQL-кода внутри приложения ничем не отличается от ваяния ХП. С той лишь разницей, что ХП проще хранить в VSS/ST/CVS.
десятки и сотни тысяч строк? тоже клиет будет делать? Ща начнется холивар про 3-звенки

У нас все строго на ХП. Используется работа по неширокому VPN (менее 2Мб/с). 1С наверно бы умерла не своей смертью. :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111553
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortНе даром 1С используется как вариант "из коробки" и для не больших контор.
Серьезные вынуждены разрабатывать свои системы учета, которые будут оптимизированы под конкретные задачи. Почему-то еще не встречал серьезных бизнес решений с высокими требованиями по производительности которая бы использовала БД как свалку таблиця встречал "серьезные бизнес-решения для больших контор" на 1с (правда на 8-ке, 7-ка тяжело тянула...), не из коробки, которые разрабатывались и оптимизировались под конкретные задачи
зы. правда и 1с не относится к БД как к свалке таблиц, и я БД свалкой таблиц не считаю :)

зыы. тут еще вопрос, что считать серьезным решением, и что считать большой конторой...
Евросеть, насколько знаю, 8-ку юзала, это большая контора? :)
Voland_de_mortничего подобного, звенья цепочки теже самые.ничего подобного - не те же
в нашем примере добавляется "прог БД" (либо же "слой БД", куда мы пихаем бизнес-логику)
Voland_de_mortЕсли человек считает, что БД - груда хлама из данных - то я не вижу смысла таким использовать клиент-сервеные БД - юзайте файловые, что в лоб, что полбунаоборот, таким как раз и надо юзать сервера БД, которые сделают работу, ни о чем и никого не спрашивая :)
Voland_de_mortЕсли человек не знает, как это реализовать, то это не значит, что это такой подход не правильный.согласен
Voland_de_mortChop а как на счет производительности обработки массивов данных? десятки и сотни тысяч строк? тоже клиет будет делать?смотря какая и чего обработка
смотря на чем написан клиент
смотря какие политики безопасности

в общем случае, учитывая предыдущий опыт и с-но привычки, я бы, скорее всего, пихал SQL-запрос
и из под 1с, вероятно, тоже прямой SQL-запрос, если критична производительность
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111587
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в нашем примере добавляется "прог БД" (либо же "слой БД", куда мы пихаем бизнес-логику)А ну да... Большинство 1С-ников даже никогда не слышали слово SQL.
Не даром же появилось мнение, что 1С-ник - не программист. Конфиг.. дальше сами знаете

Кстати массивные обработки для 1С (например супермаркеты) часто делают именно на SQL. Извне. Много всяких обработок.
Не знаете почему ?...
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111612
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVавторесли ты 1с пишешь конфигурацию за два часа, и она делает то же самое, что и ХП, которые пишутся неделю.Аналогично и наоборот: запрос из 10 строк с группировками, сложным суммированием, подзапросами(пишем за 5-7мин) может быть аналогичен нескольким сотням строк плохочитаемого кода приложения, кот. пишутся за 2-3 дня.
трудно такое представить...
в общем случае программирование на каком-либо языке программирования гибче, чем на чистом SQL
читабельность кода сюда тоже никаким боком, все дело в плечах - на плечах должна быть голова, и из них должны расти руки

тем более, если ты приводишь в пример 1С, которая работает с метаданными и в которой документ "договор", так и называется Документ.Договор, а не "таблица dc000035 с полем priznak=586" :)
как минимум пропадает необходимость документировать, что такое dc000035 и что такое priznak=586

рискуем скатиться в религиозный холивар и тогда вы меня потеряете :)
суть же в том, что ты согласился - это не является доказательством ни одной точки зрения, ни другой :)
LSVПро производительность и бешенный Ethernet-трафик (иногда очень важно) - отдельная тема.
да, трафик можно сделать любой, как в первом случае, так и во втором
LSVВаяние же SQL-кода внутри приложения ничем не отличается от ваяния ХП. С той лишь разницей, что ХП проще хранить в VSS/ST/CVS.
я изначально писал "размазывание бизнес-логики по слоям"
с этой точки зрения - отличается
и, может дело привычки, но мне удобней логически связанные блоки хранить в одном месте
в БД код приложения не запихаешь, а вот SQL-код в код приложения - лехко
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111631
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVА ну да... Большинство 1С-ников даже никогда не слышали слово SQL.
те которые решают задачки, которые ты задаешь, очень даже слышали :)
LSVНе даром же появилось мнение, что 1С-ник - не программист. Конфиг.. дальше сами знаете
я так подозреваю, что ты меня причисляешь к славному племени конфигурастов?
могу сообщить - с 1с не работаю уже скоко лет, как-то так сложилось
как раз сейчас занимаюсь SQL-запросам с редкими вставками xBase-а
хотя сделать то же самое на 1с (пусть даже с использованием прямых запросов) было существенно проще и быстрее, но увы и ах - у нас 1с-а нет даже для бухии :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111664
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopи, может дело привычки, но мне удобней логически связанные блоки хранить в одном месте
в БД код приложения не запихаешь, а вот SQL-код в код приложения - лехко

мы уже давно ушли в религиозный спор
1. что касается проще хранить:
в БД хранится не только сама ХП, но и ее план выполнения. В случае SQL запроса извне - план оптимизатор будет делать при каждом вызове
2. для того, что бы получить сумму товаротранспортной накладной ( сотсоящей из 100 накладных, в которых по 100 наименований.) после переоценки товара - будете все тащить на клиент и там считать?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111698
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем случае, учитывая предыдущий опыт и с-но привычки, я бы, скорее всего, пихал SQL-запрос
и из под 1с, вероятно, тоже прямой SQL-запросИ ..для этого нанимаем отдельного "БД-прогера" ? Да ? :)
Разве это не встраивание того самого "лишнего слоя", но внутрь приложения ?
Причем еще и ущербное встраивание:
* Проверка будет только при работе приложения.
* Одинаковый SQL-код нужно будет дублировать со всем вытекающими. А использование функций и ХП это уже вообще будет полный отказ от вожделенной "работы только в одном слое".
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111742
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mort1. что касается проще хранить:
в БД хранится не только сама ХП, но и ее план выполнения. В случае SQL запроса извне - план оптимизатор будет делать при каждом вызовене все БД занимаются оптимизацией запросов...
а сопровождать?
считать надо, стоит ли оно того...
в каждом конкретном случае
Voland_de_mort2. для того, что бы получить сумму товаротранспортной накладной ( сотсоящей из 100 накладных, в которых по 100 наименований.) после переоценки товара - будете все тащить на клиент и там считать?в 1с, пока не припечет, даже не буду задумываться что и куда она тянет :)
не в 1с, ес-но, сумму я запихаю в простенький запрос и потяну одно число :)

зы. кстати, не понял, зачем пересчитывать накладную после переоценки товара...
зыы. сумма по 100 докам по 100 наименований - фигня вопрос, никакой оптимизации не надо, ИМХО
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111779
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopне в 1с, ес-но, сумму я запихаю в простенький запрос и потяну одно число :)

зы. кстати, не понял, зачем пересчитывать накладную после переоценки товара...
зыы. сумма по 100 докам по 100 наименований - фигня вопрос , никакой оптимизации не надо, ИМХО1. В смысле не Вы, а "дополнительный БД-прог" (с) ? Запрос к БД как никак....

2. А если по 50 магазинам по 50тыс. товаров (обычное дело) ? Тут без SQL никак не обойтись. Вводим лишний слой ????
Выходит, что решение задач получается то 1 слой, то 2 в зависимости от задачи ? Низачот !
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111787
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVИ ..для этого нанимаем отдельного "БД-прогера" ? Да ? :)ес-но нет :)
LSVРазве это не встраивание того самого "лишнего слоя", но внутрь приложения ?похоже у нас разное понимание термина "слой" :)
"людоеды они как лук, у них есть слои .." (с) Шрек
код приложения тоже может и зачастую должен делиться на слои :)
но мне больше нравится иметь дело с одной луковицей, чем с несколькими :)
LSV* Проверка будет только при работе приложения.ты о юнит-тестах? или о чем?
о том, что его нельзя выполнить при неработающем приложении?
зачастую можно
зачастую не нужно
LSV* Одинаковый SQL-код нужно будет дублировать со всем вытекающими.не нужно
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111837
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopне все БД занимаются оптимизацией запросов...
а сопровождать?
считать надо, стоит ли оно того...
в каждом конкретном случае

В студию те БД, которые не занимаются оптимизацией запросов

Chopв 1с, пока не припечет, даже не буду задумываться что и куда она тянет :)
не в 1с, ес-но, сумму я запихаю в простенький запрос и потяну одно число :)

зы. кстати, не понял, зачем пересчитывать накладную после переоценки товара...
зыы. сумма по 100 докам по 100 наименований - фигня вопрос , никакой оптимизации не надо, ИМХО
не такой то уж и простенький)
надо взять последнюю переоценку по последнему нужному региону(то же документ)
переоценка 1-2 раза в месяц. в переоценке 30-60 тыс наименований
АП (асортиментный перечень) = 50тыс

в таблицах, отвечающих за тело документа общее кол-во строк свыше 4млрд
бд за 10 лет

так как теперь для "фигня вопроса" буде SQL писать?)) но дело даже не в этом.. как будете оптимизировать? как планы хранить?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111860
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV1. В смысле не Вы, а "дополнительный БД-прог" (с) ? Запрос к БД как никак....в смысле - я
я же тебе написал, SQL знают даже конфигурасты, которые решают предложенные тобой задачи
а уж тру-прогам по жизни положено :)
LSV2. А если по 50 магазинам по 50тыс. товаров (обычное дело) ?что "по 50 магазинам по 50 тыс.товаров в каждом"?
сумму выручки посчитать за год посчитать?
так даже 1с при всей своей неоптимальности не будет считывать 50х50000х(?) записей...
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111873
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortВ студию те БД, которые не занимаются оптимизацией запросов
(с) не мойя всегда, где можно стараюсь делать джоины
во всяком случае на майкрософте он работает на порядок быстрее
под фиребёрдом - подзапросы вообще п...[цезоред]
он всегда подзапросы честно выполняет, вообще без никаких оптимизаций
мы с ... офигели
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111880
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortВ студию те БД, которые не занимаются оптимизацией запросов
Advantage Database Server - может и делает, но в доке я пока этого нигде не увидел
и по скромному субъективному мнению - на практике не увидел никакой оптимизации
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111889
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortне такой то уж и простенький)
надо взять последнюю переоценку по последнему нужному региону(то же документ)
переоценка 1-2 раза в месяц. в переоценке 30-60 тыс наименований
АП (асортиментный перечень) = 50тыс

в таблицах, отвечающих за тело документа общее кол-во строк свыше 4млрд
бд за 10 лет

так как теперь для "фигня вопроса" буде SQL писать?)) но дело даже не в этом.. как будете оптимизировать? как планы хранить?
задачу не понял
я говорил о сумме накладной
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111920
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 наше все?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111924
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChopVoland_de_mortне такой то уж и простенький)
надо взять последнюю переоценку по последнему нужному региону(то же документ)
переоценка 1-2 раза в месяц. в переоценке 30-60 тыс наименований
АП (асортиментный перечень) = 50тыс

в таблицах, отвечающих за тело документа общее кол-во строк свыше 4млрд
бд за 10 лет

так как теперь для "фигня вопроса" буде SQL писать?)) но дело даже не в этом.. как будете оптимизировать? как планы хранить?
задачу не понял
я говорил о сумме накладной

а задача не менялась - все та же сумма накладной.
только тут надо не меньше 10 join-ов
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111957
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortУ Sybase есть оптимизатор, и довольно не плохой.
сцилку в студию было бы неплохо :)
можешь ткнуть пальцем, где об этом написано в доке? тынц

Voland_de_mortа задача не менялась - все та же сумма накладной.
только тут надо не меньше 10 join-ов
давай структуру БД
зачем там может понадобиться 10 джоинов?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37111990
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112002
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв смысле - я
я же тебе написал, SQL знают даже конфигурасты, которые решают предложенные тобой задачи
а уж тру-прогам по жизни положено :)Хм...
Разве парой страниц назад не шла речь о "лишнем слое", для которого нужен "дополнительный БД-прог" ?
Кажется это был основной аргумент против SQL-кодирования. Не ?

Выходит как ни крути, но в подавляющем большинстве случаев "лишний слой" все таки используется.
Тогда зачем его избегать ?

А сравнение с 1С неудачное. Там отдельная специфическая среда разработки с высоким уровнем абстракции от реалий СУБД.
Подобных систем немного (обычно это западные ERP).

Избежать "лишнего слоя" в общем случае невозможно для прочих сред. Тогда о чем спор ???

зы: Ни в одной отрасли человеческой деятельности нет универсального инструмента. Даже у дворника. :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112020
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mort тынц принял
т.е. оптимизация проводится и без хранения запроса в БД,
а и при отправлении оного из пехапы :)

Voland_de_mortструктура примерно следующая.не до конца понятно, чем накладная отличается от ТТН...
не до конца понятно, зачем в содержании накладной хранить price, если его все-равно приходится пересчитывать (тоже не до конца понятно зачем)
ну джоины...
в чем сложность и крутизна запроса?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112070
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopпринял
т.е. оптимизация проводится и без хранения запроса в БД,
а и при отправлении оного из пехапы :)

мы говорили про то что хранмится план запроса на сервере для хп
я не отрицал работу оптимизатора для всех выполняемых запросов, просто для ХП он будет единоразов, а для пыхпы - для каждого препаре/или запроса

Chopне до конца понятно, чем накладная отличается от ТТН...
не до конца понятно, зачем в содержании накладной хранить price, если его все-равно приходится пересчитывать (тоже не до конца понятно зачем)
ну джоины...
в чем сложность и крутизна запроса?
всего лишь в объемах данных, которые обрабатываются и в размерах таблиц. (от 500мб до 30Гб на таблицу)
и тут без оптимизации и хп не обойтись
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112073
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVРазве парой страниц назад не шла речь о "лишнем слое", для которого нужен "дополнительный БД-прог" ?
Кажется это был основной аргумент против SQL-кодирования. Не ?
так, стоп...

дополнительный прог БД у нас появился в контексте того, что прог.приложений - криворукий :)
и раз уж он появился, то должен чем-то занимацца? :)

речь шла не о лишнем слое, а о переносе бизнес-логики в "слой БД"
в коей я смысла особого не вижу
вижу дополнительные неудобства
LSVВыходит как ни крути, но в подавляющем большинстве случаев "лишний слой" все таки используется.
Тогда зачем его избегать ?
Избежать "лишнего слоя" в общем случае невозможно для прочих сред. Тогда о чем спор ???
я же написал...
не избегать и не "лишний слой", а хранить логически связанные блоки функционала в одном месте
мне так удобней
редкие случаи, когда требуется чрезвычайно высокая производительность, на то и редкие случаи, зачем из-за них менять все?
LSVА сравнение с 1С неудачное. Там отдельная специфическая среда разработки с высоким уровнем абстракции от реалий СУБД.
Подобных систем немного (обычно это западные ERP).
почему неудачное?
тот же линк позволяет писать подобные системы "с высоким уровнем абстракции от реалий СУБД"

кстати, с этого тема и началась :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112371
Voland_de_mort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopтот же линк позволяет писать подобные системы "с высоким уровнем абстракции от реалий СУБД"

кстати, с этого тема и началась :)

как на счет оптимизации, отладки таких запросов?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112383
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortChopтот же линк позволяет писать подобные системы "с высоким уровнем абстракции от реалий СУБД"

кстати, с этого тема и началась :)как на счет оптимизации, отладки таких запросов?
мои знания линка ограничиваются прочтением двух глав в учебнике :)
если же вспомнить опыт работы с 1С, то:
ИМХО, в тех редких случаях, где критична чрезвычайная производительность, никто не мешает тебе писать прямой запрос и производить отладку/оптимизацию штатными средствами сервера БД
после чего вставить в код
в остальных случаях это не критично и некоторая возможная неоптимальнось сгенеренного системой запроса с лихвой перекрывается скоростью/удобством разработки
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112406
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voland_de_mortкак на счет оптимизации, отладки таких запросов?вот примерчик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = " 
|Сотр = Справочник.Сотрудники.ТекущийЭлемент;
|КодДолж = Справочник.Сотрудники.Должность.Код;
|Группировка Сотр упорядочить по Сотр.Наименование; 
|Условие (КодДолж = 7); 
|"; 
Запрос.Выполнить(ТекстЗапроса);

http://www.mista.ru/tutor_1c/zapros.htm честно говоря, не знаю, что в этом запросе "робот" может напартачить при генерации SQL-а...
если бы 1с работала с Advantage...
я столкнулся с тем, что Advantage подзапрос выполняет существенно быстрее, чем джоин (не ожидал...)
с-но можно было бы переписать SQL
но зачем?
Advantage привел, как астрактный пример, у MS SQL наверняка есть своим "приколы",
да и 1с сейчас работает чуть ли не с любой БД и у каждой приколы свои
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112555
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgУ нас, например, были процедуры для отображения данных (они только выводили нужные данные, не делая фимльтрацию), а фильтрацию данных делали другие процедуры, передавая потом то, что нужно отобразить, первым процедурам.
В процедуре фильтрации есть параметры типа сортировки, простраинчного вывода и т.п, которые просто напрямую передаются в процедуру обработки.
Соответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата).
Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте.

То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных

жесть конечно. Хотя встречается, видел и не такое.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112569
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm,

не жесть, а кайф
никакого интеллекта у приложении нету, а бедный пользватель должен знать назубок перечень процедур :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112614
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosiscrafm,

не жесть, а кайф
никакого интеллекта у приложении нету, а бедный пользватель должен знать назубок перечень процедур :)
Может и кайф, но список антипатернов пополняется. Хороший пример того, как не нужно делать.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112662
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажись опосля пифа я сформулировал пару-тройку мыслишек...

в давно забытые времена, когда я был молодым и здоровым...

я программировал на паскале с ассемблерными вставками
потому что на 386-м даже с сопроцессором это было пусть не критичное, но существенное увеличение производительности
также приходилось перед началом эксперимента архивировать 3.11-ю винду (со всеим приложениями), потому что места на винте не хватало, а переписывать на 5-тидюймовые дискеты... ни такого количества дискет не было, ни никаких гарантий, что оно перепишется назад , с-но копий надо больше, а дискет нет,
да и время на копирование тудым-сюдым... мы и без этого раньше 2-х часов ночи с факультета не выходили :)
также столкнулись с ограничением паскаля на количество строк - что-то около 30 000,
какие там десятки-сотни тысяч записей, с которыми еще надо проводить какие-то нетривиальные действия?!
простая запись, добавление новых,
приходилось разбивать эксперимент на серию измерений в разных диапазонах
столкнулись с тем, что наша самопальная АЦП-ЦАП иногда "теряет сигнал" - пришлось параллельно пускать синусоиду с осциллографа (благо плата была восьмиканальная) и значения в "потерянных диапазонах" интерполировать

многа было всего интересного, славные были денечки в конце двадцатого века... :)

/*************
ключевые слова - "абстрагирование", "увеличение вычислительной мощности", "утолщение канала" итд итп

/*************
по факту, те же всякоразные ассемблеры были каким-то уровнем абстрагирования от ноликов/единичек и состояния полупроводниковых (ламповых?) триггеров

наверняка, если чел при достаточном уровне подготовке будет сам решать в какой сектор винта записать 0/1, то сделает он это лучше, оптимальней, чем операционка
как в общем случае, так и, тем более, в случае, если он знает конкретику, какие данные он использует чаще, какие реже итп.

"традиционные" языки программирования - еще один уровень еще бОльшего абстрагирования

SQL - еще один уровень абстрагирования

чем дальше, тем больше рутинные операции возлагаются "на железяку/компутер"
пусть железяка не самым оптимальным образом решает поставленную задачу, но она ее решает
человек в такой ситуации может и не решить, просто утонет в объемах данных/условий
если удариться в абсолютное утрирование, то когда прогу ставится задача "о беспечить автоматическую проводку документа по такому-то счету" , а он начинает ее с решения вопроса " куда на винте писать 0/1 ", то задачу он не решит

давайте посмотрим на монстров и законодателей моды...
1с предлагает свою модель метаданных и свой язык программирования для работы с этими метаданными - программист работает с объектами типа Документ, Справочник итд не вникая, как его код преобразуется в SQL, ( и тем более не задумываясь, какими ноликами/единичками это все выглядит на винте, в памяти, в триггерах проца )
мелкомягкие предлагают линк, который позволяет создать свою модель метаданных и определить "язык программирования" для этой модели
"команда php" в составе Zend-a предлагает набор классов, который тоже позволяет абстрагироваться от конкретной БД

ИМХО, явно заметен тренд от "0/1" к объектам реального мира
как сейчас никто даже не задумывается об том, что "если вставить ассемблерный код - программа будет работать быстрее", так вполне вероятно, к этому идет, через некоторое время никто не будет думать о том, чтобы вставить SQL-код в программу

сейчас же (пока что) "ассемблерные вставки" дают некоторый, иногда незаменимый эффект
сколько это продлится сказать трудно, но при возникновении такого вопроса сразу всплывает фраза "вычислительная мощность увеличивается... в стоко-то раз за каждый отчетный период" :)

зы. при этом ес-но, задачи "размещение ноликов/единичек" и "создание SQL-запросов" - никто не отменял, и операционки кто-то пишет, и движки БД :)
вот только это знание/программирование чем дальше, тем дальше от задач, которые решает прог-прикладник :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112665
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chop...пришлось параллельно пускать синусоиду с осциллографа....
пардонте, очепятался...
не с осциллографа,а с генератора, ес-но, который в том числе позволял генерировать и синусоидальный сигнал
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112674
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chop,

пару раз перечитал, но смысл посылки не совсем понял. О чем она, в двух словах?

смотрю "Письма с Иводзимы", может это какой-то отпечаток накладывает?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112683
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmChop, пару раз перечитал, но смысл посылки не совсем понял. О чем она, в двух словах?

:)

цитата:
как сейчас никто даже не задумывается об том, что "если вставить ассемблерный код - программа будет работать быстрее", так вполне вероятно, к этому идет, через некоторое время никто не будет думать о том, чтобы вставить SQL-код в программу

сейчас же (пока что) "ассемблерные вставки" дают некоторый, иногда незаменимый эффект
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112685
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chop,

спасибо, мысль понятна. Меньше букв и все однозначно.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112687
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за счет "железа" многое достигается. Скоро выпустят "SQL-процессоры" и об этом все забудут. Причем быстро...
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112704
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmменьше букв и все однозначно.
я два часа пифо пил пока сформулировал
а ты хтишь в двух словах и без восспоминаний о временах, когда деревья были большими?
:)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112710
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chop,

ладно, перенесем типа серьезные темы. Успехов :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112714
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmладно, перенесем типа серьезные темы. Успехов :)
и вам - на добранич
у нас уже час ночи почти, пора спать :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112715
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF: Chop, какое пиво в Киеве предпочитаешь?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112718
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chopу нас уже час ночи почти, пора спать :)
я сейчас в Киеве, и у нас почти 12. Но никак не час
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112724
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmя сейчас в Киеве, и у нас почти 12. Но никак не час
таки да, уже увидел, глюк винды - постоянно часы сбиваются в компе, не могу понять почему :)
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37112749
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Chopiscrafmя сейчас в Киеве, и у нас почти 12. Но никак не час
таки да, уже увидел, глюк винды - постоянно часы сбиваются в компе, не могу понять почему :)
часовой пояс стоит "масковский", наверна
и "сихронизация с сервером времени Интернета" включена

зы
Zver ?
...
Рейтинг: 0 / 0
119 сообщений из 119, показаны все 5 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / linq2sql vs хранимые процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]