|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Здравствуйте. Подскажите как лучше организовать запросы клиента (на C#) к бд (postgresql): написать хранимые процедуры и вызывать их из клиента или зашивать sql запросы в сам клиент(этого делать не хочется) или есть ещё какие-то способы? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 13:02 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Использовать ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 13:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
А производительность сильно падает по сравнению с хп? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 18:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
KorbanzА производительность сильно падает по сравнению с хп? Очень сильно падает производительность. ХП выполняются по 1 сек., а уже через ORM время увеличивается до 10 сек. Ну подумаешь, в 10 раз медленнее. Ничего страшного, зато тренд. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 19:16 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Не все можно сделать с клиента хорошо. Например, транзакции. Хранимые процедуры всегда будут чуть быстрее, так как они уже откомпилированы и для них обязательно создан план запроса. С хранимыми процедурами проще сделать разграничение прав пользователей ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 00:00 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Не все можно сделать с клиента хорошо. Например, транзакции."Волков бояться - в лес не ходить" (с) Cat2Хранимые процедуры всегда будут чуть быстрее, так как они уже откомпилированы и для них обязательно создан план запроса.Планы динамических запросов больше не кэшируются? На свалку такую СУБД... Cat2С хранимыми процедурами проще сделать разграничение прав пользователейС веб-сервисами проще сделать разграничение прав пользователей? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 07:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУИспользовать ORM.LINQ2SQL! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 07:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К"Волков бояться - в лес не ходить" (с) Но все желательно иметь при себе ружье. Других аргументов нет? Алексей КПланы динамических запросов больше не кэшируются? На свалку такую СУБД... Кэшируются, но гарантии нет Алексей КС веб-сервисами проще сделать разграничение прав пользователей? На веб-сервисах свет клином сошелся? Да и с ними проще. Даются права на одну хранимую процедуру, а не на 10 таблиц в соединении. Гарантия, что клиент может сделать только то, что разрешено для пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 07:59 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУИспользовать ORM.LINQ2SQL! Чем это отличается от написания текстов запросов в теле программы? На сервер все равно уходит текст запроса, а не сама конструкция. Еще и время тратится на преобразование LINQ2SQL в текст ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 08:01 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Korbanz, wcf + хранимые процедуры. почему wcf: 1. Можешь прикрутить SSL для клиент/серверного обмена 2. Можно разворачивать на IIS и юзать кэширование для сложных/долгих запросов. 3. Не нужно никого клиента баз данных на самом клиенте. 3. Ну и стандартные плюсы трехзвенки. почему хранимые процедуры: 1. В опу запуск SQL с клиента рассадник sql-инъекций. 2. Статичный SQL запрос проще/лучше оптимизировать. 3. При обновлении структуры базы ты сразу же обновляешь запросы, а не выискиваешь эти запросы в коде клиента - причём некоторые запросы вылазят не сразу, а со временем. 4. Проще разграничивать права доступа - дал права на процедуры/пакеты, а не на таблицы/вьюхи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 08:03 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Алексей Кпропущено... LINQ2SQL! Чем это отличается от написания текстов запросов в теле программы?Строгая типизация + LINQ удобнее чем SQL. Например: 1. Ассоциации удобнее join-ов. 2. let удобнее вложенных запросов. Cat2На сервер все равно уходит текст запроса, а не сама конструкция.Да. Cat2Еще и время тратится на преобразование LINQ2SQL в текстВ нормальном LINQ-провайдере должно быть кэширование. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 08:10 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Алексей К"Волков бояться - в лес не ходить" (с) Но все желательно иметь при себе ружье. Других аргументов нет?Есть. Удобство TransactionScope (или самописного аналога, если боимся распределённых транзакций). Cat2Алексей КПланы динамических запросов больше не кэшируются? На свалку такую СУБД... Кэшируются, но гарантии нетКаких гарантий нет? Cat2Алексей КС веб-сервисами проще сделать разграничение прав пользователей? На веб-сервисах свет клином сошелся?Да. Cat2Да и с ними проще. Даются права на одну хранимую процедуру, а не на 10 таблиц в соединении. Гарантия, что клиент может сделать только то, что разрешено для пользователей.Даются права на метод сервиса, "а не на 10 таблиц в соединении"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 08:19 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычwcf + хранимые процедуры. ... 4. Проще разграничивать права доступа - дал права на процедуры/пакеты, а не на таблицы/вьюхи.Вроде как 3-х звенка и использование системы безопасности СУБД - вещи взаимоисключающие. В противном случае придётся пожертвовать пулом соединений. Если конечно СУБД не умеет переключать контекст безопасности... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 08:25 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КВроде как 3-х звенка и использование системы безопасности СУБД - вещи взаимоисключающие. В противном случае придётся пожертвовать пулом соединений. Если конечно СУБД не умеет переключать контекст безопасности... среднее звено оно к базе ходит под пользователем - и именно безопасность от и для данного пользователя я имел ввиду. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 09:55 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычАлексей КВроде как 3-х звенка и использование системы безопасности СУБД - вещи взаимоисключающие. В противном случае придётся пожертвовать пулом соединений. Если конечно СУБД не умеет переключать контекст безопасности...среднее звено оно к базе ходит под пользователем - и именно безопасность от и для данного пользователя я имел ввиду.Ну я понимаю. Тем самым приносится в жертву общий пул соединений к БД для разных пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 10:05 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, нет - пул есть, просто все пользователи работают под одним пользователем БД - не требуется создавать каждого нового пользователя как пользователя в БД, назначать ему права и прочее, однако требуется создание внутренней организации доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 10:33 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычАлексей К, нет - пул есть, просто все пользователи работают под одним пользователем БД - не требуется создавать каждого нового пользователя как пользователя в БД, назначать ему права и прочее, однако требуется создание внутренней организации доступа.Как-то это противоречит предыдущему высказыванию. :-) фиганыч4. Проще разграничивать права доступа - дал права на процедуры/пакеты, а не на таблицы/вьюхи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 10:40 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, я, в первую очередь, рассматриваю защиту БД от клиентов, а здесь проще как раз вот так - один пользователь для разработчика/ов с ограниченными правами, другой для пользователей с ещё больше ограниченными правами - т.е. в идеале права на запуск процедур. Вместо создания пользователя БД для каждого пользователя системы и назначением ему соответствующих прав. Это накладывает некоторые усложнения для организации внутренней системы доступа, однако надёжно отгораживает системы друг от друга, к тому же собственную систему доступа так или иначе рисует каждый разработчик, да и в некоторых БД лицензирование идёт по количеству пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:37 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Самая вменяемая масштабируемая архитектура безопасности - роли с правами хранятся в таблицах. Пользователи - либо так же табличные, либо виндовые. Виндовые - проще, они уже есть в AD, остается прицепить к ним роли с правами. Как частный вариант - роли выражаются в группах AD, но имеем головную боль в виде сисадминов, прибитых к конкретному апп, а это не совсем правильно. Мухи отдельно, котлеты отдельно. Сисадмины отдельно, апп админы отдельно. Все потуги реализовать апп секурити средствами конкретной БД - дикое немасштабируемое зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУИспользовать ORM.LINQ2SQL! Та я не против и энтити с хибом (платный дизайнер), главное шоп не ублюдочный кодефирст. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:47 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычАлексей К, я, в первую очередь, рассматриваю защиту БД от клиентов, а здесь проще как раз вот так - один пользователь для разработчика/ов с ограниченными правами, другой для пользователей с ещё больше ограниченными правами - т.е. в идеале права на запуск процедур.В идеале сервер БД нужно отделить от пользователей файрволом, а не давать им там права на какие-то процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:50 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... LINQ2SQL! Та я не против и энтити с хибом (платный дизайнер), главное шоп не ублюдочный кодефирст.Нука тиха там! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:51 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КВ идеале сервер БД нужно отделить от пользователей файрволом, а не давать им там права на какие-то процедуры. В идеале пользователи системы вообще не должны знать ничего о БД - тем более где она находится - они максимум должны знать о определённом порте на среднем звене, к которому ходят с виндовой аутентификацией и через SSL ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:53 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Та я не против и энтити с хибом (платный дизайнер), главное шоп не ублюдочный кодефирст.Нука тиха там! Вот только не нужно опять зудеть про чистый контролируемый гавнокод :) Все занимаются своими делами - архитектор спланировал хранилище с конкретной схемой, дб девелопер наклепал табличек с вьюхами и хп (если сильно надо), кодирующая шарповая monkey подтянула схему в контекст и команда начала пилить морду с логикой. Всё епта. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычАлексей КВ идеале сервер БД нужно отделить от пользователей файрволом, а не давать им там права на какие-то процедуры. В идеале пользователи системы вообще не должны знать ничего о БД - тем более где она находится - они максимум должны знать о определённом порте на среднем звене, к которому ходят с виндовой аутентификацией и через SSL Правильно, только так и никак иначе. Вырисовываются явные плюсы веба - он по дефолту трехзвенен. А толстый юай трехзвенить дорого и долго. Но надо, если на то пошло. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:58 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУПравильно, только так и никак иначе. Вырисовываются явные плюсы веба - он по дефолту трехзвенен. А толстый юай трехзвенить дорого и долго. Но надо, если на то пошло. С WCF не долго и не дорого - считай тот же веб (если во внутря смотреть), и для monkey считай ничего не меняется - для получения данных не нужно дёргать всякие sql-connection, query и прочая - а просто дёргаешь процедуру - получаешь дата-сет - чистишь кожуру и жуешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 12:02 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычАлексей К, нет - пул есть, просто все пользователи работают под одним пользователем БД - не требуется создавать каждого нового пользователя как пользователя в БД, назначать ему права и прочее, однако требуется создание внутренней организации доступа. Внутренняя организация доступа - мембершип. Всё уже придумано за нас. Берем его любую модификацию в зависимости от провайдера и юзаем на здоровье. Таблички нативные автогенеренные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 12:03 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычМСУПравильно, только так и никак иначе. Вырисовываются явные плюсы веба - он по дефолту трехзвенен. А толстый юай трехзвенить дорого и долго. Но надо, если на то пошло. С WCF не долго и не дорого - считай тот же веб (если во внутря смотреть), и для monkey считай ничего не меняется - для получения данных не нужно дёргать всякие sql-connection, query и прочая - а просто дёргаешь процедуру - получаешь дата-сет - чистишь кожуру и жуешь. С вцф всё намного проще - шикарные возможности для аутентификации с авторизацией, веб-сервисы asmx курят в сторонке. Но так или иначе - лишний кодируемый слой, который нужно поддерживать. Веб напрямую через тот же дал обращается к базе, без лишних трудозатрат на транспорт. И тупо отдает отрендеренный гуй через html. Проще, быстрее, универсальнее - любой клиент, от мобилы и планшета. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 12:09 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычАлексей КВ идеале сервер БД нужно отделить от пользователей файрволом, а не давать им там права на какие-то процедуры. В идеале пользователи системы вообще не должны знать ничего о БД - тем более где она находится - они максимум должны знать о определённом порте на среднем звене, к которому ходят с виндовой аутентификацией и через SSLНу а я о чём?! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 12:30 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Нука тиха там! Вот только не нужно опять зудеть про чистый контролируемый гавнокод :) Все занимаются своими делами - архитектор спланировал хранилище с конкретной схемой, дб девелопер наклепал табличек с вьюхами и хп (если сильно надо), кодирующая шарповая monkey подтянула схему в контекст и команда начала пилить морду с логикой. Всё епта.Я никогда не предлагал генерировать БД по code-first-классам. Я как раз за наоборот. :-) Просто мне XML-ные маппинги не нравятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 12:32 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КПросто мне XML-ные маппинги не нравятся. Они плохо пахнут? :) Чем твой говнокод на t4 лучше нативного генератора, в котором - ни строчки кода, всё работает из коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 13:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычпросто дёргаешь процедуру - получаешь дата-сет - чистишь кожуру и жуешь. Батенька, за трансфер датасетов через SOA - яйца под нож! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 13:46 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУВырисовываются явные плюсы веба - он по дефолту трехзвенен Это его главный минус - трехзвенка. МСУ. Если опять не начнешь матом ругаться на оппонентов и оскорблять их другими способами, то эта дискуссия не будет закрыта раньше времени и будет плодотворна. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:27 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганыч3. Ну и стандартные плюсы трехзвенки. И стандартные минусы ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КВ нормальном LINQ-провайдере должно быть кэширование. Зуб даете, что оно есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:32 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КСтрогая типизация + LINQ удобнее чем SQL. Поскольку типизация не объемлет все возможные запросы, например, сборку текста запроса внутри хранимой процедуры, то ее нельзя использовать везде ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:37 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Это его главный минус - трехзвенка Масштабируемость, изолированность, высокая безопасность и надёжность - это главный минус? Cat2МСУ. Если опять не начнешь матом ругаться на оппонентов и оскорблять их другими способами, то эта дискуссия не будет закрыта раньше времени и будет плодотворна. Покажешь хоть одну ссылку на то, где я оппонентов матом крыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:42 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КЕсть. Удобство TransactionScope (или самописного аналога, если боимся распределённых транзакций). При чем тут распределенные? Или Вы не поняли, или Вы не знаете. Транзакцию можно запустит с сервера, а можно и с клиента. При запуске транзакции с клиента в том редком, но бывающем случае, когда клиент отвалился посредине транзакции и не может подать сигнал о том, что транзакция подтверждена, сервер ждет некоторое разумное время (какое - не знаю, секрет разработчиков), а потом откатывает ее. Нормальное решение, однако если в транзакции есть блокировки, то они так и останутся, пока сервер не ее не завершит. Критично ли это для Вашей базы - решать в каждом конкретном случае. Для однопользовательской - точно пофиг ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Алексей КСтрогая типизация + LINQ удобнее чем SQL. Поскольку типизация не объемлет все возможные запросы, например, сборку текста запроса внутри хранимой процедуры, то ее нельзя использовать везде Особенные запросы (CTE и пр. замороченные лохмотья), с которыми ORM не умеет работать (либо работает хуже) - пиши на хранимых процедурах, которые точно так же обвязываются через тизированный контекст. Все остальные 99% - на чистом ORM. Какие сложности? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУСамая вменяемая масштабируемая архитектура безопасности - роли с правами хранятся в таблицах Как и делается по умолчанию в СУБД. "Все данные о базе хранятся в таблицах самой базы". Правило Коддта. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:47 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2МСУСамая вменяемая масштабируемая архитектура безопасности - роли с правами хранятся в таблицах Как и делается по умолчанию в СУБД. "Все данные о базе хранятся в таблицах самой базы". Правило Коддта. Ты не понял. Я о том, что реализовывать секурность средствами сиквельных пользователей и ролей, либо еще хуже - через сиквельную виндовую аутентификацию с теми же сиквельными ролями - зло. То же самое относится и к остальным СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 15:51 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУМасштабируемость, изолированность, высокая безопасность и надёжность - это главный минус? Масштабируемость? Чем она выше, чем в двузвенке? Она зависит от от возможностей СУБД, а не от способа доступа. И среднее звено ее может только понизить. Высокая безопаснеость? В чем она выше, чем при двузвенке? Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. Ну, матом не крыл, но "идиотами" или неким подобным обзывал Это же просьба относится ка Алексею К. Бывалоча начнется дискуссия, я бы еще чего мог сказть - ан нет. МСУ и Алексей поцапались и тему закрыли. В связи с этим просьба к модераторам. Чистите оскорбления, а не закрывайте топик ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 16:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУЯ о том, что реализовывать секурность средствами сиквельных пользователей и ролей, либо еще хуже - через сиквельную виндовую аутентификацию с теми же сиквельными ролями - зло. То же самое относится и к остальным СУБД. Поясни конкретнее, почему это с твоей точки зрения зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 16:47 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУВсе остальные 99% - на чистом ORM. Какие сложности? В том, что таких запросов 99%. Какой смысл использовать ОРМ для одного процента? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 16:52 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2МСУВсе остальные 99% - на чистом ORM. Какие сложности? В том, что таких запросов 99%. Какой смысл использовать ОРМ для одного процента?Я правильно понимаю, что запросов с динамическим SQL у Вас 99%? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 17:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Масштабируемость? Чем она выше, чем в двузвенке? Да, масштабируемость. Вот чем выше: Руководство MICROSOFT по проектированию архитектуры приложенийХарактеристиками N-уровневой архитектуры приложения являются функциональная декомпозиция приложения, сервисные компоненты и их распределенное развертывание, что обеспечивает повышенную масштабируемость, доступность, управляемость и эффективность использования ресурсов. Каждый уровень абсолютно независим от всех остальных, кроме тех, с которыми он непосредственно соседствует. N-ному уровню требуется лишь знать, как обрабатывать запрос от n+1 уровня, как передавать этот запрос на n-1 уровень (если таковой имеется), и как обрабатывать результаты запроса. Для обеспечения лучшей масштабируемости связь между уровнями обычно асинхронная. ...N-уровневая архитектура обычно имеет не менее трех отдельных логических частей, каждая из которых физически размещается на разных серверах. Каждая часть отвечает за определенную функциональность. При использовании многослойного подхода слой развертывается на уровне, если предоставляемая этим слоем функциональность используется более чем одним сервисом или приложением уровня. Cat2Она зависит от от возможностей СУБД, а не от способа доступа. И среднее звено ее может только понизить. Она не зависит от возможностей СУБД, не говори глупости. Возможности СУБД идут лесом, т.к. вменяемые архитекторы в БД видят только тупое хранилище данных, не более того. Главный вопрос опять же в масштабируемости - отмасштабировать приложение на порядки проще, если оно не прибито гвоздями к конкретной СУБД. Cat2Высокая безопаснеость? В чем она выше, чем при двузвенке? Да, высокая безопасность. Вот чем: Руководство MICROSOFT по проектированию архитектуры приложенийПримером N-уровневого/3-уровневого архитектурного стиля может служить типовое финансовое Веб-приложение с высокими требованиями к безопасности. Бизнес-слой в этом случае должен быть развернут за межсетевым экраном, из-за чего приходится развертывать слой представления на отдельном сервере в пограничной сети. Другой пример – типовой насыщенный клиент, в котором слой представления развернут на клиентских компьютерах, а бизнес-слой и слой доступа к данным развернуты на одном или более серверных уровнях. Cat2Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. Руководство MICROSOFT по проектированию архитектуры приложенийОсновными преимуществами N-уровневого/3-уровневого архитектурного стиля являются: Удобство поддержки. Уровни не зависят друг от друга, что позволяет выполнять обновления или изменения, не оказывая влияния на приложение в целом. Масштабируемость. Уровни организовываются на основании развертывания слоев, поэтому масштабировать приложение довольно просто. Гибкость. Управление и масштабирование каждого уровня может выполняться независимо, что обеспечивает повышение гибкости. Доступность. Приложения могут использовать модульную архитектуру, которая позволяет использовать в системе легко масштабируемые компоненты, что повышает доступность. Руководство MICROSOFT по проектированию архитектуры приложенийРассмотрите возможность применения N-уровневой или 3-уровневой архитектуры, если требования по обработке уровней приложения отличаются настолько сильно, что может возникнуть перекос в распределении ресурсов, или существенно разнятся требования по безопасности уровней. Например, конфиденциальные данные не должны храниться на уровне представления, но могут размещаться на бизнес-уровне или уровне данных. N-уровневая или 3-уровневая архитектура также подойдет в случае, если требуется обеспечить возможность совместного использования бизнес-логики разными приложениями и имеется достаточное количество оборудования для выделения необходимого числа серверов для каждого уровня. Руководство MICROSOFT по проектированию архитектуры приложенийИспользуйте только три уровня, если создаете приложение для внутренней сети организации, где все серверы будут располагаться в закрытой сети; или Интернет-приложение, требования по безопасности которого не запрещают развертывание бизнес-логики на Веб-сервере или сервере приложений. Рассмотрите возможность применения более трех уровней, если соответственно требованиям по безопасности бизнес-логика не может быть развернута в пограничной сети, или если приложение интенсивно использует ресурсы, и для разгрузки сервера необходимо перенести эту функциональность на другой сервер. Cat2Ну, матом не крыл, но "идиотами" или неким подобным обзывал Это же просьба относится ка Алексею К. Ты чё-то гонишь, Кот. У меня с Лёней самые теплые отношения. Cat2Бывалоча начнется дискуссия, я бы еще чего мог сказть - ан нет. МСУ и Алексей поцапались и тему закрыли. Кот, ты чего куришь? Алексей - зубр форума, коих единицы. Чтобы я с ним где-то поцапался, ты должен стать балериной. Опять ты не в кассу постишь - то матом я крою, то с Лёней цапаюсь. Пестец какой-то :) Cat2В связи с этим просьба к модераторам. Чистите оскорбления, а не закрывайте топик Хватит сцать раньше времени. И не зуди, надоел. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 21:09 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2МСУЯ о том, что реализовывать секурность средствами сиквельных пользователей и ролей, либо еще хуже - через сиквельную виндовую аутентификацию с теми же сиквельными ролями - зло. То же самое относится и к остальным СУБД. Поясни конкретнее, почему это с твоей точки зрения зло. Выше объяснил про масштабируемость, модульную архитектуру (доступность) и гибкость. Это очень важные компоненты архитектуры. Cat2МСУВсе остальные 99% - на чистом ORM. Какие сложности? В том, что таких запросов 99%. Какой смысл использовать ОРМ для одного процента? Выбрось свою организацию хранилища на помойку и уволь архитектора схемы. Поможет, уверяю. Работа с БД должна быть как можно прозрачна. Актуальные боевые данные - отдельно, BI - в кубах через ETL отдельно. Никаких сложностей. То о чем ты пишешь - не поддается здравому осмыслению. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 21:14 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычк которому ходят с виндовой аутентификацией а это схера ли? разве что от безысходности ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 22:04 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. На пальцах еще раз: в двухзвенной архитектуре пользователь ПО может безпрепятственно получить строку соединения к БД (пусть даже если ты строишь ПО с помощью виндовой аутентификации в БД). Ты считаешь нормальной практикой, если юзеры (пусть даже особо продвинутые или не очень) начнут хаотично юзать БД через сторонние клиенты (Excel, Access, Management Studio и пр.), делать большие выборки, ковыряться во внутрях БД и искать узкие места? Уже сам факт возможности попадания пользователя в БД, тем более сторонними средствами - вопиющ и опасен. Я уже не говорю про двухзвенки, в которых строка соединения к БД идет от sa либо от достаточно привилегированной сиквельной учетной записи - за такое вообще расстрел на месте. Cat2, что не понятно по безопасности? Вопросы, комментарии, замечания приветствуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:14 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, а зачем юзеру дать такие права? юзер гость и все ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:17 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosМСУ, а зачем юзеру дать такие права? А какие надо? ViPRosюзер гость и все Что такое гость в твоем понимании? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:19 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, никаких прав ему не надо давать гость тот кто просто может логиниться но не может делать ничего кроме этого ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:23 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosМСУ, никаких прав ему не надо давать гость тот кто просто может логиниться но не может делать ничего кроме этого А как пользователи будут работать с программой, если они ничего делать не смогут? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:26 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, я этого не говорил ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosМСУ, я этого не говорил Как не говорил? «никаких прав ему не надо давать» (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Где деньги - там и правда. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:30 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ну да ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 00:34 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУфиганычпросто дёргаешь процедуру - получаешь дата-сет - чистишь кожуру и жуешь. Батенька, за трансфер датасетов через SOA - яйца под нож! Чем вам трансфер датасета не угодил? в наше время гигабитных сетей и безлимитных интернетов? к тому же коллекции всё равно придётся тягать, так почему бы и не привычный monkey датасет? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:13 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Алексей КВ нормальном LINQ-провайдере должно быть кэширование. Зуб даете, что оно есть?В EF оно есть. Опять же, речь идёт о кэшировании Expression Tree => SQL, чтобы не было путаницы. :-) Cat2Алексей КСтрогая типизация + LINQ удобнее чем SQL. Поскольку типизация не объемлет все возможные запросы, например, сборку текста запроса внутри хранимой процедуры, то ее нельзя использовать вездеПредположим, что хранимых процедур нет (минимум). Вызов хранимой процедуры прекрасно обёртывается кодогенерацией. Проблема непонятна. Cat2Алексей КЕсть. Удобство TransactionScope (или самописного аналога, если боимся распределённых транзакций). При чем тут распределенные?Я лиш упомянул недостаток TransactionScope, не обращайте внимания. Cat2Или Вы не поняли, или Вы не знаете. Транзакцию можно запустит с сервера, а можно и с клиента.Я в курсе. Cat2При запуске транзакции с клиента в том редком, но бывающем случае, когда клиент отвалился посредине транзакции и не может подать сигнал о том, что транзакция подтверждена, сервер ждет некоторое разумное время (какое - не знаю, секрет разработчиков), а потом откатывает ее.Если работать с MSSQL в disconnected-режиме такие случаи практически исключены. Если держать постоянно открытое соединение - тогда да. Но это не наш метод. Опять же при наличии сервера приложений как правило есть возможность организовать от него к БД нормальный канал связи. Так что проблема надумана. Cat2Нормальное решение, однако если в транзакции есть блокировки, то они так и останутся, пока сервер не ее не завершит. Критично ли это для Вашей базы - решать в каждом конкретном случае.Конечно. Cat2Для однопользовательской - точно пофигЭтот случай нас не интересует. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей КПросто мне XML-ные маппинги не нравятся. Они плохо пахнут? :) Они бесят. МСУЧем твой говнокод на t4 лучше нативного генератора, в котором - ни строчки кода, всё работает из коробки.Полученным результатом? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:21 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Ну, матом не крыл, но "идиотами" или неким подобным обзывал Это же просьба относится ка Алексею К. Бывалоча начнется дискуссия, я бы еще чего мог сказть - ан нет. МСУ и Алексей поцапались и тему закрыли.Вы что-то путаете. Мы с МСУ никогда не ругались. Все наши с ним дискуссии всегда были в рамках приличия. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:24 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУCat2Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. На пальцах еще раз: в двухзвенной архитектуре пользователь ПО может безпрепятственно получить строку соединения к БД (пусть даже если ты строишь ПО с помощью виндовой аутентификации в БД). Ты считаешь нормальной практикой, если юзеры (пусть даже особо продвинутые или не очень) начнут хаотично юзать БД через сторонние клиенты (Excel, Access, Management Studio и пр.), делать большие выборки, ковыряться во внутрях БД и искать узкие места? Уже сам факт возможности попадания пользователя в БД, тем более сторонними средствами - вопиющ и опасен. Я уже не говорю про двухзвенки, в которых строка соединения к БД идет от sa либо от достаточно привилегированной сиквельной учетной записи - за такое вообще расстрел на месте. Cat2, что не понятно по безопасности? Вопросы, комментарии, замечания приветствуются.Вдогонку... Вроде как управление транзакциями с клиента не управляется системой безопасности. Ничто не мешает пользователю через Management Studio начать транзакцию, что-то изменить, на что он имеет права, транзакцию не завершать, соединение оставить открытым, уйти домой... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:30 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ИзопропилГде деньги - там и правда.С этим надо бороться. Должно быть наоборот: "Где правда - там и деньги". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:32 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычМСУпропущено... Батенька, за трансфер датасетов через SOA - яйца под нож! Чем вам трансфер датасета не угодил? в наше время гигабитных сетей и безлимитных интернетов? к тому же коллекции всё равно придётся тягать, так почему бы и не привычный monkey датасет?Если клиент к Вашему сервису написан не на дотнете? На Java? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 06:34 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУCat2Масштабируемость? Чем она выше, чем в двузвенке? Да, масштабируемость. Вот чем выше: Руководство MICROSOFT по проектированию архитектуры приложенийХарактеристиками N-уровневой архитектуры приложения являются функциональная декомпозиция приложения, сервисные компоненты и их распределенное развертывание, что обеспечивает повышенную масштабируемость, доступность, управляемость и эффективность использования ресурсов. Каждый уровень абсолютно независим от всех остальных, кроме тех, с которыми он непосредственно соседствует. N-ному уровню требуется лишь знать, как обрабатывать запрос от n+1 уровня, как передавать этот запрос на n-1 уровень (если таковой имеется), и как обрабатывать результаты запроса. Для обеспечения лучшей масштабируемости связь между уровнями обычно асинхронная. ...N-уровневая архитектура обычно имеет не менее трех отдельных логических частей, каждая из которых физически размещается на разных серверах. Каждая часть отвечает за определенную функциональность. При использовании многослойного подхода слой развертывается на уровне, если предоставляемая этим слоем функциональность используется более чем одним сервисом или приложением уровня. Cat2Она зависит от от возможностей СУБД, а не от способа доступа. И среднее звено ее может только понизить. Она не зависит от возможностей СУБД, не говори глупости. Возможности СУБД идут лесом, т.к. вменяемые архитекторы в БД видят только тупое хранилище данных, не более того. Главный вопрос опять же в масштабируемости - отмасштабировать приложение на порядки проще, если оно не прибито гвоздями к конкретной СУБД. Cat2Высокая безопаснеость? В чем она выше, чем при двузвенке? Да, высокая безопасность. Вот чем: Руководство MICROSOFT по проектированию архитектуры приложенийПримером N-уровневого/3-уровневого архитектурного стиля может служить типовое финансовое Веб-приложение с высокими требованиями к безопасности. Бизнес-слой в этом случае должен быть развернут за межсетевым экраном, из-за чего приходится развертывать слой представления на отдельном сервере в пограничной сети. Другой пример – типовой насыщенный клиент, в котором слой представления развернут на клиентских компьютерах, а бизнес-слой и слой доступа к данным развернуты на одном или более серверных уровнях. Cat2Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. Руководство MICROSOFT по проектированию архитектуры приложенийОсновными преимуществами N-уровневого/3-уровневого архитектурного стиля являются: Удобство поддержки. Уровни не зависят друг от друга, что позволяет выполнять обновления или изменения, не оказывая влияния на приложение в целом. Масштабируемость. Уровни организовываются на основании развертывания слоев, поэтому масштабировать приложение довольно просто. Гибкость. Управление и масштабирование каждого уровня может выполняться независимо, что обеспечивает повышение гибкости. Доступность. Приложения могут использовать модульную архитектуру, которая позволяет использовать в системе легко масштабируемые компоненты, что повышает доступность. Руководство MICROSOFT по проектированию архитектуры приложенийРассмотрите возможность применения N-уровневой или 3-уровневой архитектуры, если требования по обработке уровней приложения отличаются настолько сильно, что может возникнуть перекос в распределении ресурсов, или существенно разнятся требования по безопасности уровней. Например, конфиденциальные данные не должны храниться на уровне представления, но могут размещаться на бизнес-уровне или уровне данных. N-уровневая или 3-уровневая архитектура также подойдет в случае, если требуется обеспечить возможность совместного использования бизнес-логики разными приложениями и имеется достаточное количество оборудования для выделения необходимого числа серверов для каждого уровня. Руководство MICROSOFT по проектированию архитектуры приложенийИспользуйте только три уровня, если создаете приложение для внутренней сети организации, где все серверы будут располагаться в закрытой сети; или Интернет-приложение, требования по безопасности которого не запрещают развертывание бизнес-логики на Веб-сервере или сервере приложений. Рассмотрите возможность применения более трех уровней, если соответственно требованиям по безопасности бизнес-логика не может быть развернута в пограничной сети, или если приложение интенсивно использует ресурсы, и для разгрузки сервера необходимо перенести эту функциональность на другой сервер. Cat2Ну, матом не крыл, но "идиотами" или неким подобным обзывал Это же просьба относится ка Алексею К. Ты чё-то гонишь, Кот. У меня с Лёней самые теплые отношения. Cat2Бывалоча начнется дискуссия, я бы еще чего мог сказть - ан нет. МСУ и Алексей поцапались и тему закрыли. Кот, ты чего куришь? Алексей - зубр форума, коих единицы. Чтобы я с ним где-то поцапался, ты должен стать балериной. Опять ты не в кассу постишь - то матом я крою, то с Лёней цапаюсь. Пестец какой-то :) Cat2В связи с этим просьба к модераторам. Чистите оскорбления, а не закрывайте топик Хватит сцать раньше времени. И не зуди, надоел. Microsoft сподобилась перевести на русский незамысловатую писульку "Архитектура приложений для чайников" и Муся резко стал архитектором. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 07:39 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУCat2Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. На пальцах еще раз: в двухзвенной архитектуре пользователь ПО может безпрепятственно получить строку соединения к БД (пусть даже если ты строишь ПО с помощью виндовой аутентификации в БД). Ты считаешь нормальной практикой, если юзеры (пусть даже особо продвинутые или не очень) начнут хаотично юзать БД через сторонние клиенты (Excel, Access, Management Studio и пр.), делать большие выборки, ковыряться во внутрях БД и искать узкие места? Уже сам факт возможности попадания пользователя в БД, тем более сторонними средствами - вопиющ и опасен. Я уже не говорю про двухзвенки, в которых строка соединения к БД идет от sa либо от достаточно привилегированной сиквельной учетной записи - за такое вообще расстрел на месте. Cat2, что не понятно по безопасности? Вопросы, комментарии, замечания приветствуются. Юный "архитектор", стандартная практика "юзать" кубы в трезвенке, расскажи, как это можно организовать с помощью твоего говношипа, если разграничения доступа на уровне кубов и отчеты зависят от учетки ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 07:53 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
KorbanzА производительность сильно падает по сравнению с хп? Смотря какой запрос и как написан. На самом деле тут тебе нагонят всякой хрени про ORM, а все на самом деле просто — надо уметь их готовить. Подробности долго объяснять, если нужно, могу конечно. Но в любом случае сам факт применения orm никак не сказывается на производительности запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 09:15 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
фиганычЧем вам трансфер датасета не угодил? в наше время гигабитных сетей и безлимитных интернетов? к тому же коллекции всё равно придётся тягать, так почему бы и не привычный monkey датасет? Речь не о безлимитности, а о убогости датасета. Я о том, что в любом SOA нужно юзать только типизированный подход (классы и коллекции классов) - WSDL чище и понятней. Алексей КОни бесят. Очень мощный объективный аргумент :) Алексей КПолученным результатом? А чем результат лучше? Алексей КНичто не мешает пользователю через Management Studio начать транзакцию, что-то изменить, на что он имеет права, транзакцию не завершать, соединение оставить открытым, уйти домой... +1 SeVaЮный "архитектор", стандартная практика "юзать" кубы в трезвенке, расскажи, как это можно организовать с помощью твоего говношипа, если разграничения доступа на уровне кубов и отчеты зависят от учетки Старый программист не знает про слово "имперсонация"? Срочно учить матчасть. Во-вторых, никто не запрещает манипулировать безопасностью в среднем слое, чтобы фильтровать факты со срезами в разрезе прав пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 09:19 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Korbanz, Лучшее конечно писать процедуры. Но по производительности они лучшее только когда есть более одного запроса, связанных какой-то бизнес логикой. Иначе выигрыш только в удобстве оформления кода, проигрыш в привязке к конкретной субд. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 09:25 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Не все можно сделать с клиента хорошо. Например, транзакции. Ну, это ты не прав. Просто не прав. Может что-то ещё бы привёл в виде примера -- я бы согласился. Но не транзакции. Cat2Хранимые процедуры всегда будут чуть быстрее, так как они уже откомпилированы и для них обязательно создан план запроса. Это сильно зависит от СУБД. Подготовленные запросы также во многих СУБД откомпилированы. Планы некоторые СУБД кэшируют и для простых запросов, а не только для процедур. Cat2С хранимыми процедурами проще сделать разграничение прав пользователей Тут пожалуй соглашусь. Хотя это и зависит от СУБД. p.s. кстати в первый раз вступаю в полемику с Cat2 на профессиональные темы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 09:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Korbanz, В общем, подытоживая, могу предложить следующий "решатель" проблемы. если надо использовать CRUD -запросы (CreateReadUpdateDelete) и у тебя не одна поддерживаемая СУБД, стоит использовать ORM. Если надо писать только аналитические запросы (SELECT-ы ) то ORM применять бесполезно если поддерживается только одна СУБД, стоит писать код в виде хранимых процедур. если поддерживается одна-две СУБД, можно тоже писать код в виде хранимых процедур, несколько раз, для каждой СУБД свой вариант. Естественно, только если процедур немного (10-20). если запросов много, и много поддерживаемых СУБД, (и запросы аналитические, естественно), то лучше подумать о оформлении кода SQL на клиенте напрямую на SQL в виде универсального, стандартного SQL-я, иногда это получаться не будет, тогда надо писать конкретный запрос в N вариантах, для каждой СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 09:40 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivCat2С хранимыми процедурами проще сделать разграничение прав пользователей Тут пожалуй соглашусь. Хотя это и зависит от СУБД. А я не соглашусь :) MasterZivp.s. кстати в первый раз вступаю в полемику с Cat2 на профессиональные темы. Почаще заходи в дотнеты, плас плас вроде как родственен, хотя бы по первой буквачке :) MasterZiv если надо использовать CRUD -запросы (CreateReadUpdateDelete) и у тебя не одна поддерживаемая СУБД, стоит использовать ORM. Если надо писать только аналитические запросы (SELECT-ы ) то ORM применять бесполезно если поддерживается только одна СУБД, стоит писать код в виде хранимых процедур. если поддерживается одна-две СУБД, можно тоже писать код в виде хранимых процедур, несколько раз, для каждой СУБД свой вариант. Естественно, только если процедур немного (10-20). если запросов много, и много поддерживаемых СУБД, (и запросы аналитические, естественно), то лучше подумать о оформлении кода SQL на клиенте напрямую на SQL в виде универсального, стандартного SQL-я, иногда это получаться не будет, тогда надо писать конкретный запрос в N вариантах, для каждой СУБД. +1 0 -1 (хп нужно писать только тогда, когда это обусловлено конкретными возможностями (CTE и т.п.) и/или производительностью запросов) -1 (в таком случае нужно смотреть на распределенный SOA подход - единый шлюз поставки данных для различных информационных систем и различных СУБД, для различных СУБД ORM - то, что доктор прописал) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 09:49 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей КОни бесят. Очень мощный объективный аргумент :)Мне тоже понравилось. МСУАлексей КПолученным результатом? А чем результат лучше?Имею самописный несложный кодогенератор, удобный для дальнейшей поддержки и модификации. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:35 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZiv Если надо писать только аналитические запросы (SELECT-ы ) то ORM применять бесполезно LINQ2SQL весьма удобно применять для аналитических запросов. Это ORM или не-ORM? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:38 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУSeVaЮный "архитектор", стандартная практика "юзать" кубы в трезвенке, расскажи, как это можно организовать с помощью твоего говношипа, если разграничения доступа на уровне кубов и отчеты зависят от учетки Старый программист не знает про слово "имперсонация"? Срочно учить матчасть. Во-вторых, никто не запрещает манипулировать безопасностью в среднем слое, чтобы фильтровать факты со срезами в разрезе прав пользователя.+38 Тут можно ещё вернуться к традиционному сравнению: linked server vs 3х звенка. Но мне показалось, что ещё не было обсуждений на тему LINQ2SQL vs SQL. Мне кажется это интереснее. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:42 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КИмею самописный несложный кодогенератор, удобный для дальнейшей поддержки и модификации. Невероятно, но - имею сложный кодогенератор из коробки. Поддержка и модификация классов - через частичность. Во-вторых, не имею привычки "портить" кодогенерированные классы, юзаю их as is. В-третьих, самое главное, никакого унылого самописного самопала - добрый натив и никаких танцев с бубнами. В чём я накосячил? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:43 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей КИмею самописный несложный кодогенератор, удобный для дальнейшей поддержки и модификации. Невероятно, но - имею сложный кодогенератор из коробки. Поддержка и модификация классов - через частичность. Во-вторых, не имею привычки "портить" кодогенерированные классы, юзаю их as is. В-третьих, самое главное, никакого унылого самописного самопала - добрый натив и никаких танцев с бубнами. В чём я накосячил?Лукавите. :-) Там вокруг дизайнера танцев с бубнами хватает, когда в БД 50+ таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:46 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Старый программист не знает про слово "имперсонация"? Срочно учить матчасть. Во-вторых, никто не запрещает манипулировать безопасностью в среднем слое, чтобы фильтровать факты со срезами в разрезе прав пользователя.+38 Тут можно ещё вернуться к традиционному сравнению: linked server vs 3х звенка. Гы. И еще, кухарки ведь не знают, что есть нативный ActiveDirectoryMembershipProvider , который отлично работает с учетками AD. Можно вообще сделать красивый микс на MembershipProvider + Windows Authentication, где юзеры хранятся в AD, а роли в БД. Можно сделать вообще Use Forms Authentication with Active Directory in ASP.NET 2.0 . Вариантов масса. Алексей КНо мне показалось, что ещё не было обсуждений на тему LINQ2SQL vs SQL. Мне кажется это интереснее. Чем оно отличается от EF vs SQL или NH vs SQL? или ORM vs SQL :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:52 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КЛукавите. :-) Там вокруг дизайнера танцев с бубнами хватает, когда в БД 50+ таблиц. Та фигня это :) Было более двухсот объектов в контексте (таблицы, вьюхи, хранимки, функции) и ничё, полет нормальный. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 10:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
KorbanzЗдравствуйте. Подскажите как лучше организовать запросы клиента (на C#) к бд (postgresql): написать хранимые процедуры и вызывать их из клиента или зашивать sql запросы в сам клиент(этого делать не хочется) или есть ещё какие-то способы? я бы на вашем месте сделал всеми предложенными здесь способами - ОРМ, SQL в коде, хранимые процедуры - и потом уже сравнил для себя. тогда появится некоторая личностная точка отсчета. она в этом вопросе имеет не последнее значение ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 11:00 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... +38 Тут можно ещё вернуться к традиционному сравнению: linked server vs 3х звенка. Гы. И еще, кухарки ведь не знают, что есть нативный ActiveDirectoryMembershipProvider , который отлично работает с учетками AD. Можно вообще сделать красивый микс на MembershipProvider + Windows Authentication, где юзеры хранятся в AD, а роли в БД. Можно сделать вообще Use Forms Authentication with Active Directory in ASP.NET 2.0 . Вариантов масса.++ МСУАлексей КНо мне показалось, что ещё не было обсуждений на тему LINQ2SQL vs SQL. Мне кажется это интереснее. Чем оно отличается от EF vs SQLЧто-то я не помню тут таких обсуждений. МСУили NH vs SQL? или ORM vs SQL :)Мне кажется LINQ-ORM - это несколько иная категория. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:00 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей КЛукавите. :-) Там вокруг дизайнера танцев с бубнами хватает, когда в БД 50+ таблиц. Та фигня это :) Было более двухсот объектов в контексте (таблицы, вьюхи, хранимки, функции) и ничё, полет нормальный.На любителя. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:04 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, вменяемый архитектор никогда не станет рассматривать СУБД только как хранилище. Купим оракл, будем хранить в нем таблички ибо это тупое хранилище. Ну не идиотизм? Поменьше читай маркетинговой дадим и поменьше сертифицируйся, у тебя маркетинг головного мозга. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Korbanz, отвечу по теме тебе интересно на каждый чих писать тривиальные хранимки, а потом поддерживать? юзай орм любой что понравится. все не тривиальные вещи, которые можно оптимально сделать на стороне СУБД, пиши в хранимках. если это корпоративка, то пиши двухзвенку и не морочь себе голову, если клиент во внешке, то wcf. требования к безопасности спроси у заказчика, от них и пляши. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
вопросецМСУ, вменяемый архитектор никогда не станет рассматривать СУБД только как хранилище. Купим оракл, будем хранить в нем таблички ибо это тупое хранилище. Ну не идиотизм? Вменяемому software -архитектору (бывает еще enterprise, но это из другой оперы) монопенисуально, что там купили, оракл или сиквел - он безпроблемно решит поставленную задачу на любой СУБД. И чем сильнее приложение прибито гвоздями к конкретной СУБД, тем жизнь не слаще. вопросецПоменьше читай маркетинговой дадим и поменьше сертифицируйся, у тебя маркетинг головного мозга. У тебя недопонимание жизни, а не сертифицированный маркетинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:33 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
вопросецесли это корпоративка, то пиши двухзвенку и не морочь себе голову -1 P.S. Ты посты читаешь задним местом? Еще раз, только внимательно: 13533695 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:35 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, разработчик софта, которому все равно какая субд внизу - школоло, начитавшееся маркетинговой шелухи о переносимостях, масштабируемостях и т. п.. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
вопросецМСУ, разработчик софта, которому все равно какая субд внизу - школоло, начитавшееся маркетинговой шелухи о переносимостях, масштабируемостях и т. п..Все СУБД работают примерно одинаково. Поиск по бинарному дереву он и в Африке поиск по бинарному дереву... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:49 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, но возможности разные в том числе и для девелоперов, от того цены у СУБД разные, кстати, бывают и другие деревья R-Tree, например, и поиск по ним. ладно, я сюда не тролить кого либо пришел. зашел от скуки в тему... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivp.s. кстати в первый раз вступаю в полемику с Cat2 на профессиональные темы. Почаще заходи в дотнеты, плас плас вроде как родственен, хотя бы по первой буквачке :) Нет уж, лучше вы к нам.... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:57 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
вопросец... Купим оракл, будем хранить в нем таблички ибо это тупое хранилище. Ну не идиотизм? ... а в чем собственно? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 12:57 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КMasterZiv Если надо писать только аналитические запросы (SELECT-ы ) то ORM применять бесполезно LINQ2SQL весьма удобно применять для аналитических запросов. Это ORM или не-ORM? Не представляю даже что это такое. Типа CL-SQL что-то ? Тогда применяй, вообще, если что-то "весьма удобно" для чего-то -- надо применять... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:01 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
вопросецАлексей К, но возможности разные в том числе и для девелоперов, от того цены у СУБД разные, кстати, бывают и другие деревья R-Tree, например, и поиск по ним.И что это меняет? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:07 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivАлексей Кпропущено... LINQ2SQL весьма удобно применять для аналитических запросов. Это ORM или не-ORM? Не представляю даже что это такое. Типа CL-SQL что-то ?Тогда совет не применять Entity Framework (это таки ORM) для аналитических запросов выглядит несколько странным. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:09 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
вопросецМСУ, разработчик софта, которому все равно какая субд внизу - школоло, начитавшееся маркетинговой шелухи о переносимостях, масштабируемостях и т. п.. В твоём пионеротряде умеют готовить только одну СУБД? вопросецно возможности разные в том числе и для девелоперов, от того цены у СУБД разные, кстати, бывают и другие деревья R-Tree, например, и поиск по ним. Еще раз - про цены не в кассу, это чисто политическая стратегия, никоим образом не относящаяся к команде разработки. Тебя сопливого никто и спрашивать не будет о том, сколько, кому и как заплатили за лицензии на СУБД. Твоё дело маленькое - сидеть и гавнокодить. Во-вторых, возможности современных СУБД примерно одинаковые, на это никто не смотрит. На рынке имеются два фаворита - оракуль или сиквел, о каких возможностях ты говоришь? Обе промышленные СУБД с различными редакциями, возможностей - с головой. вопросецладно, я сюда не тролить кого либо пришел. зашел от скуки в тему... Ну сказал бы чего умного, а то сопли какие-то мажешь тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:14 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivНет уж, лучше вы к нам.... Так я ж не бачу :) Алексей КMasterZivпропущено... Не представляю даже что это такое. Типа CL-SQL что-то ?Тогда совет не применять Entity Framework (это таки ORM) для аналитических запросов выглядит несколько странным. :-) Зачёт, Лёня ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:15 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ух нафлудили) Ef 5 рулит. Производительность 4 - 4.4 конечно так себе. Логика в хранимках - только если нужно использовать спец возможности sql для супер-производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanЛогика в хранимках - только если нужно использовать спец возможности sql для супер-производительности.Или для рекурсивных запросов, которых в LINQ нет. Но скорее вьюхи чем хранимки. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:30 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КnetivanЛогика в хранимках - только если нужно использовать спец возможности sql для супер-производительности.Или для рекурсивных запросов, которых в LINQ нет. Но скорее вьюхи чем хранимки. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 13:32 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КMasterZivпропущено... Не представляю даже что это такое. Типа CL-SQL что-то ?Тогда совет не применять Entity Framework (это таки ORM) для аналитических запросов выглядит несколько странным. :-) Я имел в виду применение чего-то типа Hibernate/NHibernate. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 15:20 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, откуда столько экспрессии? что-то зацепило? если тебе полегчает, то в нашем проекте я выбирал субд. у нас кластер. предоставляем сервис. картография... ты наверное в жизни не сталкивался с данными, которые не укладываются в твой стандартный шаблон в голове. я говорю, например, об обработке пространственных данных (у нас такая специфика). такие вещи и все, что с ними связано очень специфичны для каждой субд. и не считаться с этим не правильно. кроме того общаться с субд тоже надо с умом, бо реализации у них весьма разные и не считаться с этим при написании софта... я здесь говорю о различии в реализации блокировок, транзакций и т. п.. кроме того, каждая субд предоставляет очень много фирменных плюшек, использование которых позволит очень эффективно использовать ресурсы сервера. но тебе этого всего не понять. подозреваю, ты обычный клепатель говномордочек к базам типа бухгалтерия и т.п.. там твои подходы со скрипом да и прокатят, тебе хватит стандартного select/insert/update. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 15:23 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivЯ имел в виду применение чего-то типа Hibernate/NHibernate. Ну так есть же NHibernate.Linq, чем не LINQ? :) вопросецМСУ, откуда столько экспрессии? что-то зацепило? Экспрессии нет, ничего не цепляло, обычная шумная дискуссия, коих сотни на форуме. Что опять не так? вопросецесли тебе полегчает Да мне собственно не тяжелело. вопросецто в нашем проекте я выбирал субд. у нас кластер. предоставляем сервис. картография... Выбирать СУБД в твоём картографическом ларьке может даже уборщица. Это отнюдь не означает, что сие есть правильно. вопросецты наверное в жизни не сталкивался с данными, которые не укладываются в твой стандартный шаблон в голове. Ну если твоя голова настолько широка и растянута, милости просим - рви правду матку, мы послушаем. вопросец я говорю, например, об обработке пространственных данных (у нас такая специфика). такие вещи и все, что с ними связано очень специфичны для каждой субд. и не считаться с этим не правильно. Тебе же объяснили 10 раз, никто не запрещает написать врапперы на вьюхах (ну или хп), после чего эти объекты радостно используются в типизированном датаконтексте ORM. В чем проблемы? вопросецкроме того общаться с субд тоже надо с умом, бо реализации у них весьма разные и не считаться с этим при написании софта... Ты не поверишь, но нужно всё делать с умом. С дуру можно и ... сломать. вопросеця здесь говорю о различии в реализации блокировок, транзакций и т. п.. кроме того, каждая субд предоставляет очень много фирменных плюшек, использование которых позволит очень эффективно использовать ресурсы сервера. Всё это можно сделать через ORM, и уровни изоляции, и транзакционность. Ресурсы сервера в надежных руках. вопросецно тебе этого всего не понять. подозреваю, ты обычный клепатель говномордочек к базам типа бухгалтерия и т.п.. там твои подходы со скрипом да и прокатят, тебе хватит стандартного select/insert/update. Поржал. Ты в своём географическом ларьке вообще отупел от хранимых процедур - это ж надо такое придумать, code monkey принимает решение о выборе СУБД. Бугага. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 16:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ну раз ORM может все, то как сделать это? http://www.sql.ru/forum/actualthread.aspx?tid=978484&hl= ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 16:42 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, ну раз ORM может все, то как сделать это? http://www.sql.ru/forum/actualthread.aspx?tid=978484&hl= Стыдно такие вопросы задавать, netivan. Чай не в первом классе. Срочно вбивай буковки "linq join multiple fields" в гугл и радуйся щастью. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 16:51 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ты неправильно понял вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 17:09 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, ты неправильно понял вопрос. А ты неправильно код написал :) Конечно же нельзя - за временные таблицы, да и еще глобальные, нужно руки наизнанку завязывать. Не пиши так. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 17:33 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, вот не надо тут бла бла. решите мне такую задачу, вот есть у вас таблица и в ней есть С1,С2 столбцы, окда. И вам надо из нее вытянуть данные, которые (С1=х1 & С2=х2) ИЛИ (С1=х11 & С2=х21) ... и тд много раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 17:40 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, вот не надо тут бла бла. решите мне такую задачу, вот есть у вас таблица и в ней есть С1,С2 столбцы, окда. И вам надо из нее вытянуть данные, которые (С1=х1 & С2=х2) ИЛИ (С1=х11 & С2=х21) ... и тд много раз. Ты как инопланетянен. Ты можешь внятно сформулировать вопрос? 1. Что такое "окда"? 2. Ты сначала спрашиваешь про временные таблицы, потом про linq join multiple fields. Определись. 3. Еще раз, ты хочешь динанически формировать условие where? Лямбду в помощь - доклеивай в IQueryable новый OR-предикат, в чем сложность? 4. Сложно написать адекватный работающий семпл, демонстрирующий проблему? Тогда не потребуется гадать на кофейной гуще, что там нагенерило твой сознание. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 17:48 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, Код: c# 1.
да нет сложности , благо и библиотеки есть хорошие. Сложность начинается когда это в 10 раз медленнее работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 17:50 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
KorbanzЗдравствуйте. Подскажите как лучше организовать запросы клиента (на C#) к бд (postgresql): написать хранимые процедуры и вызывать их из клиента или зашивать sql запросы в сам клиент(этого делать не хочется) или есть ещё какие-то способы? * надо три слоя - презентации, бизнес-слой, слой доступа к данным * опционально бизнес-слой можно соединить со слоем презентации, если в нем использовать MVP/MVVM паттерн, иначе отдельные бизнес-службы в DI-контейнер * слой доступа к данным в виде абстракции ObjectQuery или Repository, в которых можно конкретно реализовать любой подход для доступа к данным, их тоже в DI-контейнер выбор БД: * для обычного CRUD приложения с небольшими объемами данных лучше использовать MS SQL Express, который бесплатный и лучше дружит с человеком * если есть особенности - то надо изучать их и тогда выбирать БД выбор технологии для слоя доступа к данным: * для обычного CRUD приложения с небольшими объемами данных и MS SQL Express лучше всего подойдет LINQ-to-SQL, там тоже можно написать хранимые процедуры, но это будет означать распределение бизнес-логики по нескольким местам, что увеличивает сложность => больше ошибок можно предположить следующие особенности и проблемы: * большой объем данных: - общепризнанные ORM имеют проблемы с обработкой больших объемов данных, например EF имел утечку памяти при обработке больше 20000 объектов в одной транзакции - некоторые общепризнанные ORM имеют проблемы с операциями над сущностями, когда сначала надо сделать select, а потом update (этим страдает LINQ-to-SQL, в EF в более поздних версиях - оптимизировали это, NHibernate 3 умеет через метод Load) * работа через dto - когда результат запроса является dto, собранным из нескольких таблиц БД, то появляются проблемы дальнейшей пакетной обработки записей, например для 50000 таких записей надо считать некое поле, затем поменять его значение по определенной логике, а после обновить в БД - EF в таких условия сдается, мало того, что у него утечка памяти, так и еще MS SQL ограничивает длину запроса, что делает невозможным достать по Id с использованием конструкции WHERE ... IN ... 50000 записей, танцы с бубном со средствами построения нативных sql запросов решения не дали * бизнес-логика, для которой достаточно данных в БД и возможностей языка SQL: - если бизнес-задача (алгоритм) может быть решена в рамках БД и языка SQL, то тащить данные на клиент, выполнять эту логику и обновлять в БД - работает дольше и сложнее в реализации, чем выполнить это все на стороне БД в хранимых процедурах, плюс если объем данных велик - проблемы умножаются - но при использовании MS SQL есть бонус - подключение C# кода прям в SQL запрос, работате немного медленней, не все гладко с преобразованием типов, но зато все возможности C# * длинные распределенные транзакции, тут надо смотреть откуда они зародились в выше описанных ситуациях - можно рассмотреть использование хранимых процедур другие проблемы: * ORM предполагалась как решения проблемы кросс-платформенности, но в реальности это не всегда так, например различия автоинкрементного поля в Oracle (sequence) и MS SQL 2000-2008 (identity) или ограничение идентификатора в Oracle 10g в 30 символов фиганычKorbanz, wcf + хранимые процедуры. почему wcf: 1. Можешь прикрутить SSL для клиент/серверного обмена 2. Можно разворачивать на IIS и юзать кэширование для сложных/долгих запросов. 3. Не нужно никого клиента баз данных на самом клиенте. 3. Ну и стандартные плюсы трехзвенки. почему хранимые процедуры: 1. В опу запуск SQL с клиента рассадник sql-инъекций. 2. Статичный SQL запрос проще/лучше оптимизировать. 3. При обновлении структуры базы ты сразу же обновляешь запросы, а не выискиваешь эти запросы в коде клиента - причём некоторые запросы вылазят не сразу, а со временем. 4. Проще разграничивать права доступа - дал права на процедуры/пакеты, а не на таблицы/вьюхи. почему wcf: 1. а если не надо? 2. а если не надо? и можно юзать иные способы кэширования, в СУБД тоже есть кэш 3. зато нужен клиент для WCF почему хранимые процедуры: 1. кодирование 2. + 3. в случае использования ORM не требуется править запросы 4. не факт МСУАлексей Кпропущено... LINQ2SQL! главное шоп не ублюдочный кодефирст. как то в итоге с ним быстрее работается: 1. добавил поле в класс, добавил маппинг, нажал развернуть базу => профит 2. добавил поле в БД, пошел в дизайнер, нажал обновить, оно потупило минуты 2-3-5, кинуло в дизайнер кривой класс, пошел править класс, исправил => профит Cat2Масштабируемость? Чем она выше, чем в двузвенке? Она зависит от от возможностей СУБД, а не от способа доступа. И среднее звено ее может только понизить. * во-первых "N-tier" - это физическое разделение (разные сервера), да это замедляет * во-вторых "Layer" (слой) - это логическое разделение, в какой-то меньшей степени это тоже замедляет * но, если добавить слой служб (сервер приложений) - можно поставить 10 БД, тем самым увеличив пропускную способность системы в целом * чтобы достичь того же эффекта на клиент_с_логикой -> сервер_БД - необходимо делать прослойку, которая будет консолидировать данные с нескольких БД -> а это и есть третий слой, который если разместить на отдельном сервере выльется в 3-tier * не для всех систем целесообразно делать слой служб/сервер приложений Cat2Высокая безопаснеость? В чем она выше, чем при двузвенке? Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа. все ерунда, как и через веб-сервер можно поломать все внутри, так и через сервер БД, смотря как настроена безопасность и там и там SeVaрасскажи, как это можно организовать с помощью твоего говношипа, если разграничения доступа на уровне кубов и отчеты зависят от учетки от учетки СУБД? тогда убрать зависимость от нее вопросецвменяемый архитектор никогда не станет рассматривать СУБД только как хранилище да, ее еще можно заставить делить таблицы и старые данные отделять, для ускорения запросов, это будет оттягивать момент создания второй БД-копии netivanEf 5 рулит оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ? зы трехзвенка нужна: - если потребителями является некое третье лицо, которому необходимо программное API - потребителями являются некие другие платформы - для масштабируемости и/или использования в шине данных ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 19:23 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77, новую книжку прочитал? какие проблемы из за чего пробемы) сэтим >оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 19:55 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanда нет сложности , благо и библиотеки есть хорошие. А на кой ляд тогда сабж в адо.нет запостал? Чё-то ты моск мне насилуешь, netivan... netivanСложность начинается когда это в 10 раз медленнее работает. Сначала нужно руки выпрямить, а потом LINQ юзать. Работает это абсолютно так же, как и через обычный SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 19:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77netivanEf 5 рулит оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ? "Оно" и умело раньше, RTFM: MergeOption.NoTracking или AsNoTracking() 17-77зы трехзвенка нужна: - если потребителями является некое третье лицо, которому необходимо программное API - потребителями являются некие другие платформы Чушь на постном масле. 17-77как то в итоге с ним быстрее работается: 1. добавил поле в класс, добавил маппинг, нажал развернуть базу => профит 2. добавил поле в БД, пошел в дизайнер, нажал обновить, оно потупило минуты 2-3-5, кинуло в дизайнер кривой класс, пошел править класс, исправил => профит По первому пункту не торопи коней - а данные куда деваются после разворачивания, ась? Как-то у тебя всё просто - была БД с данными, добавили поле в таблицу и? Подскажу - нужно руками и в двух местах править, а в случае с дизайнером - в одном месте (класс перегенерится автоматом). Делай выводы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 20:06 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ты все это точно говоришь или просто что то подобное ляпаешь? я вот погуглил про это НоТрекинг и понял что в этом случае ЕФ обекты к графу объектов не добавляет, то есть возвращает левую структуру для чего то а 777 вроде чего то там хочет апдейтить какие то списки 50000 и т.д. а то мне кажется что каждый из вас говорит о своем ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 20:24 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosновую книжку прочитал? не понял наезда ViPRosкакие проблемы из за чего пробемы) сэтим >оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ? а если по-русски написать? это вопрос был? МСУ"Оно" и умело раньше, RTFM: MergeOption.NoTracking или AsNoTracking() dto (ака вьюха) и entity разные вещи, пробовал в EF смержить две _разных_ entity ? что пишет? какой exception? МСУЧушь на постном масле. абаснуй МСУПо первому пункту не торопи коней - а данные куда деваются после разворачивания, ась? Как-то у тебя всё просто - была БД с данными, добавили поле в таблицу и? Подскажу - нужно руками и в двух местах править, а в случае с дизайнером - в одном месте (класс перегенерится автоматом). Делай выводы. во-первых - автоматом там ничего не перегенерится - я уже описал процесс с 2-3-5 минутным ожиданием во-вторых - я описывал процесс при разработке, когда нет продакшена, при развертывании на продакшн в случае с database-first так же надо писать/генерить скрипт обновления данных в зависимости от ситуации в-третьих - я разрабатывал database-first модель в EF и code-first модель в NHibernate + Fluent, и вот во втором случае все гораздо быстрее в-четвертых - хотя да, дизайнера нет в NH, отношения сущностей все же лучше видны на ER-диаграмме ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 20:47 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77, угу, был вопрос в чем суть проблемы с 50тыщ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 21:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosМСУ, ты все это точно говоришь или просто что то подобное ляпаешь? Какой-то неадекватный вопрос. ViPRosя вот погуглил про это НоТрекинг и понял что в этом случае ЕФ обекты к графу объектов не добавляет, то есть возвращает левую структуру для чего то Материализованные объекты не отслеживаются в контексте с отключением кеширования, фича чисто для чтения больших массивов данных. О какой "левой структуре" ты вещаешь - одному богу известно. ViPRosа 777 вроде чего то там хочет апдейтить какие то списки 50000 и т.д. а то мне кажется что каждый из вас говорит о своем Про апдейт небыло сказано ни слова, речь шла о OutOfMemoryException , читай внимательнее. Ну а если ты хочешь сделать апдейт нематериализованного объекта, нужен второй конктест. 17-77dto (ака вьюха) и entity разные вещи, пробовал в EF смержить две _разных_ entity ? что пишет? какой exception? Не DTO, а отключение трекинга. Без трекинга ты не сможешь ничего мержить, еще раз - читай документацию. Фича конкретно под нужды. Ты спросил про чтение 50000 и OutOfMemoryException - я дал тебе рецепт. Теперь ты продолжаешь дальше генерить дополнительные условия. Определись. Если интересует конкретная задача - описывай подробно все нюансы, дам решение. А жалом водить из стороны в сторону будешь в детском саду. 17-77абаснуй Обосновал двумя страница ранее со ссылками на MS Application Architecture Guide. 17-77во-первых - автоматом там ничего не перегенерится - я уже описал процесс с 2-3-5 минутным ожиданием Во-первых, автоматом генерится контекст, разумеется, через Run Custom Tool. Если ты не врубился, то речь о том, что не нужно сторонний гавнокод на t4 писать, всё нативно и в коробке. 17-77во-вторых - я описывал процесс при разработке, когда нет продакшена, при развертывании на продакшн в случае с database-first так же надо писать/генерить скрипт обновления данных в зависимости от ситуации Ты нигде ничего не сказал про то, что эти два пункта относились к продакшену. Во-вторых, причем тут продакшен? На продакшене точно так же могут добавиться поля - и что, ты будешь сносить продуктовую базу и создавать с нуля? Тебя посодютъ (с) Так что автоматическое создание базы для корпоративных задач - польза нулевая. 17-77в-третьих - я разрабатывал database-first модель в EF и code-first модель в NHibernate + Fluent, и вот во втором случае все гораздо быстрее Да однохерственно. Что на хибовом флюенте писать маппинги, что на EF. Непонятно, о каких микросекундах выйгрыша ты вещаешь. 17-77в-четвертых - хотя да, дизайнера нет в NH, отношения сущностей все же лучше видны на ER-диаграмме Дизайнер есть для хиба, опять мимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 22:24 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosугу, был вопрос в чем суть проблемы с 50тыщ? там несколько проблем было: 1. в базе, в таблице было порядка 300 тыс записей на тестовом и порядка миллиона на продакшене (они конечно еще были разбиты на группы, но один хрен в группе могло быть 50-100 тыс записей) 2. были функции, например: * достать 50-100 тыс записей, точнее http URL из них (в поле хранилось), и просканировать все, получив ответ http 200/404, обновить статус в таблице в другом поле * достать 50-100 тыс записей с вложенными объектами и сгенерировать для них определенные другие данные, потом сохранить это в БД * вот в таких случаях, при вызове SaveChanges() в EF спустя некоторое время оно падало с OutOfMemoryException, в диспетчере задач было занято 99,99% из 2 Гб ОЗУ 3. был виндовый клиент, в котором был пейджинг и сложный фильтр, чтобы все это дело показывать пользователю, разумеется ему никто не вываливал мешок с миллионом записей, выводился dto, который из нескольких таблиц джоином и в виде .Select(e => new MyDto ...), по факту это работало аналогично родной вьюхе MS SQL 4. из виндовго клиента, после всяких фильтров и выделений записей на сервер приходило: либо условия запроса, либо условия запроса + список ID исключенных из обработки, либо только список обрабатываемых ID 5. соответственно: * условия запроса работали для dto (вьюхи), но не всегда работал для entity, так как имена полей были разные и там были вложенности, была проблема переложения фильтра * надо было исключать некоторые записи из обработки по ID, программно или дополнительным WHERE NOT IN * надо было вытянуть 20 тыс записей по ID, если писать это через WHERE IN - то после 7000 с чем-то MS SQL выдавал, что шибко длинный текст запроса, давайдосвидания * в некоторых случаях надо было для условия запроса / для указанных ID / нативного SQL запроса подгрузить сущности _вместе_ с вложенными объектами (чтобы их обработать), но не методом N+1, а джоином (Include в EF), и насколько я помню для нативного запроса - это не заработало в принципе, Include можно было включить для entity, но нельзя его включить для самописного нативного SQL, который возвращает тот же самый entity ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 23:02 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77* достать 50-100 тыс записей с вложенными объектами и сгенерировать для них определенные другие данные, потом сохранить это в БД * вот в таких случаях, при вызове SaveChanges() в EF спустя некоторое время оно падало с OutOfMemoryException, в диспетчере задач было занято 99,99% из 2 Гб ОЗУ[/quot] И правильно, что падало. Про трекинг я тебе уже поведал - дерзай. 17-773. был виндовый клиент, в котором был пейджинг и сложный фильтр, чтобы все это дело показывать пользователю, разумеется ему никто не вываливал мешок с миллионом записей, выводился dto, который из нескольких таблиц джоином и в виде .Select(e => new MyDto ...), по факту это работало аналогично родной вьюхе MS SQL Ну всё верно, с прямыми руками будет всё нормально работать. Серверный пейджинг рулит. 17-77* условия запроса работали для dto (вьюхи), но не всегда работал для entity, так как имена полей были разные и там были вложенности, была проблема переложения фильтра Ничего не понятно, какой-то туман вместо конкретики. Можешь адекватно сформулировать проблему? 17-77* надо было исключать некоторые записи из обработки по ID, программно или дополнительным WHERE NOT IN Можно решить различными способами 1. PredicateBuilder + Like 2. Udf 3. Where(d => ids.IndexOf(" " + item.ToString() + " ") != -1) 4. И т.д. 17-77* надо было вытянуть 20 тыс записей по ID, если писать это через WHERE IN - то после 7000 с чем-то MS SQL выдавал, что шибко длинный текст запроса, давайдосвидания Выпрямляем руки. Как? Читай выше. 17-77* в некоторых случаях надо было для условия запроса / для указанных ID / нативного SQL запроса подгрузить сущности _вместе_ с вложенными объектами (чтобы их обработать), но не методом N+1, а джоином (Include в EF), и насколько я помню для нативного запроса - это не заработало в принципе, Include можно было включить для entity, но нельзя его включить для самописного нативного SQL, который возвращает тот же самый entity Опять феерический сумбур. Нужен конкретный пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 23:16 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУНе DTO, а отключение трекинга. Без трекинга ты не сможешь ничего мержить, еще раз - читай документацию. Фича конкретно под нужды. Ты спросил про чтение 50000 и OutOfMemoryException - я дал тебе рецепт. Теперь ты продолжаешь дальше генерить дополнительные условия. Определись. Если интересует конкретная задача - описывай подробно все нюансы, дам решение. А жалом водить из стороны в сторону будешь в детском саду. вот тут я уже давно определился, читаем внимательней: 17-77- когда результат запроса является dto, собранным из нескольких таблиц БД, то появляются проблемы дальнейшей пакетной обработки записей, например для 50000 таких записей надо считать некое поле, затем поменять его значение по определенной логике, а после обновить в БД - EF в таких условия сдается, мало того, что у него утечка памяти, так и еще MS SQL ограничивает длину запроса, что делает невозможным достать по Id с использованием конструкции WHERE ... IN ... 50000 записей, танцы с бубном со средствами построения нативных sql запросов решения не дали МСУОбосновал двумя страница ранее со ссылками на MS Application Architecture Guide. книжку прочитал, думать головой разучился 17-77если потребителями является некое третье лицо, которому необходимо программное API расскажи как будешь предоставлять бизнес-логику потребителям, которые сами захотят написать собственный клиент с блекджеком и шлюхами, а не юзать твою веб-/вин-морду? хранимки спасут не всегда, вдруг придется консолидировать информацию с нескольких источников 17-77потребителями являются некие другие платформы протоколы передачи данных и всякие XML идиоты же придумали, правда? упразднишь? как данные передашь на другой континент? ком-объект заюзаешь? xDD МСУВо-первых, автоматом генерится контекст, разумеется, через Run Custom Tool. Если ты не врубился, то речь о том, что не нужно сторонний гавнокод на t4 писать, всё нативно и в коробке. для начала надо в дизайнер добавить сущность, а потом уже запускать run custom tool, а чтобы добавить сущность надо сделать процесс описанный мной в пункте 2, так что да я забыл туда дописать еще "нажать Run Custom Tool" МСУТы нигде ничего не сказал про то, что эти два пункта относились к продакшену. Во-вторых, причем тут продакшен? На продакшене точно так же могут добавиться поля - и что, ты будешь сносить продуктовую базу и создавать с нуля? Тебя посодютъ (с) Так что автоматическое создание базы для корпоративных задач - польза нулевая. я и имел ввиду базу девелопера, это ты тут вспомнил про продуктовую базу и стал спрашивать про обновление данных: МСУа данные куда деваются после разворачивания, ась? так что не переворачивай слова, а тестовые данные на девелоперской базе заливаются с нуля скриптом и это проще и быстрее чем делать скрипт обновления МСУДа однохерственно. Что на хибовом флюенте писать маппинги, что на EF. Непонятно, о каких микросекундах выйгрыша ты вещаешь. кто-то тут говорил что code-first плоха штука, таки засеки сколько времени ты будешь через дизайнер добавлять сущности, в xml-объявлениях EF можно моск сломать, одно и тоже по два или три раза МСУДизайнер есть для хиба, опять мимо. не заливай, в самом NH дизайнера нет, про сторонние средства я в курсе ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 23:37 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77, а ты пробуй Join c пользовательским типом вместо In ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 23:49 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
а так спс. значит еф как был гвоном так и остался хорошо что не изучил ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2012, 23:50 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosа ты пробуй Join c пользовательским типом вместо In ну если будет еще проект с EF, попробую, сейчас я все как-то на NH ViPRosа так спс. значит еф как был гвоном так и остался хорошо что не изучил да незачто, но думаю с NH проблем не меньше будет, там я с другими сталкивался, например * пейджинг + джоин для загрузки вложенных объектов, stackoverflow пестрит этой проблемой и нашли решение только через QueryOver с вложенным запросом и Distinct Transformer * в одном уникальном случае, на довольно запутанной структуре БД NH.Linq падал, он не мог транслировать запрос в SQL, но там как бы и так видно, что надо переработать структуру БД * еще меня волнует момент, когда в MS SQL можно было переносить условие WHERE в JOIN или простая группировка/агрегатные функции, обернутые в алиас таблицы, запросы ускорялись в разы - собственно можно ли такое в современных ORM замутить или нет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 00:05 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77, а мне интересно как раз как они апдейт делают, скопом или по каждому объекту в цикле ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 00:15 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77вот тут я уже давно определился, читаем внимательней Я ж тебе сказал, если у тебя DTO или что-то еще - все обновления через новый контекст. Что непонятно? ORM не будут работать с левыми классами. 17-77EF в таких условия сдается, мало того, что у него утечка памяти Откуда информация по утечкам? Где факты, а не сопли на голом сене? 17-77MS SQL ограничивает длину запроса, что делает невозможным достать по Id с использованием конструкции WHERE ... IN ... 50000 записей, танцы с бубном со средствами построения нативных sql запросов решения не дали А причем тут EF? Во-вторых, длина запроса называется батчем. В-третьих, выше я тебе пальцем ткнул на 3 варианта, как сделать, чтобы непересвопить батч, мало? 17-77книжку прочитал, думать головой разучился Книжку не читал, думать головой и не умел? 17-77расскажи как будешь предоставлять бизнес-логику потребителям, которые сами захотят написать собственный клиент с блекджеком и шлюхами, а не юзать твою веб-/вин-морду? хранимки спасут не всегда, вдруг придется консолидировать информацию с нескольких источников Даже двоешники знают чудесные 3 буквы - SOA. Не сылхал? Срочно открывай букварь и начинай штудировать WCF и ASMX, а то так бездарем и помрешь. 17-77протоколы передачи данных и всякие XML идиоты же придумали, правда? упразднишь? как данные передашь на другой континент? ком-объект заюзаешь? xDD Причем тут протоколы с XML и ORM? Ты не вписываешься в повороты, заносит то влево то вправо. 17-77для начала надо в дизайнер добавить сущность, а потом уже запускать run custom tool, а чтобы добавить сущность надо сделать процесс описанный мной в пункте 2, так что да я забыл туда дописать еще "нажать Run Custom Tool" Нужно отрефрешить контекст, и чё дальше-то? Код я не пишу. Про несколько минут ты гонишь, разумеется. 17-77я и имел ввиду базу девелопера, это ты тут вспомнил про продуктовую базу и стал спрашивать про обновление данных Да какая в жопу разница, чья эта база. На девелоперских стендах также присутствуют данные, которые важны для отладки и тестирования, зачем их сносить? Во-вторых, ты уже сам запутался, сначала говоришь про продакшен, теперь говоришь, что я опять не так понял, и речь, оказывается, уже о девелоперской базе. Я не могу уследить за потоком твоего сознания, определись с мыслями. 17-77так что не переворачивай слова, а тестовые данные на девелоперской базе заливаются с нуля скриптом и это проще и быстрее чем делать скрипт обновления На каждый чих (добавить поле, изменить релейшен, изменить тип поля, добавить таблицу и т.д.) у тебя будет пересоздаваться гигабайты данных? Ты с дубу рухнул, нахрена это нужно? Во-вторых, не всегда разработка ведется со своей "чистой" базой. Ты не подумал о том, что есть корпоративные платформенные решения со своими БД (MS Dynamics CRM, SharePoint, Axapta, ECM'ы и т.д.)? Тут уже не удалишь базу, батенька. Да... способы твои страшны. На каком курсе тебе сейчас читают этот дебилизм? :) 17-77кто-то тут говорил что code-first плоха штука, таки засеки сколько времени ты будешь через дизайнер добавлять сущности, в xml-объявлениях EF можно моск сломать, одно и тоже по два или три раза А я и не отрицал сего факта - code-first отстой. Засекал - добавить десяток сущностей в контекст 10 секунд (время тупо на выбрать нужные объекты). А теперь ты засеки, сколько раз у тебя будет заново пересоздаватья гигобайтная база для того, чтобы тупо добавить поле. Во-вторых, у тебя уже есть сегодняшние наработанные тестовые данные, нужные для разработки, которые похерятся. Ручками заново будешь их вколачивать? Убей себя, серьезно. 17-77не заливай, в самом NH дизайнера нет, про сторонние средства я в курсе Ты сам-то понял что сказал? Что значит "в самом"? В "самом" EF тоже нету дизайнера, дизайнер есть в студии. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 00:50 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77* достать 50-100 тыс записей, точнее http URL из них (в поле хранилось), и просканировать все, получив ответ http 200/404, обновить статус в таблице в другом поле * достать 50-100 тыс записей с вложенными объектами и сгенерировать для них определенные другие данные, потом сохранить это в БДДля сохранения можно самостоятельно, без EF, генерить SQL-батчи. Использовать для этого EF никто не заставляет. Не нужно вставлять "всё" в один батч, чтобы MSSQL не ругался на его размеры. зы: Странная архитектура. Может она причина всех бед? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 06:11 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, вот не надо тут бла бла. решите мне такую задачу, вот есть у вас таблица и в ней есть С1,С2 столбцы, окда. И вам надо из нее вытянуть данные, которые (С1=х1 & С2=х2) ИЛИ (С1=х11 & С2=х21) ... и тд много раз.Ну если не получается одним запросом - делайте несколькими. Будет работать медленно но верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 06:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, а нафига тады орм основная задача орм то как раз запись, читать любой может, а писак маловато будет(усе до сих пор помнят пушкина, а скоко выдающихся читак было, кто их помнит??? токо капицу если в пример привести или перельмана) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 09:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosосновная задача орм то как раз записьНет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 09:38 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, что есть проблемы и с чтением? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 09:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosа нафига тады орм "если не получается одним запросом - делайте несколькими" (с) ...- Не получается в хранимке сделать задачу одним запросом - Делайте несколькими - А нафига тогда SQL? Сахават, когда ты уже научишься адекватные вопросы задавать? ViPRosосновная задача орм то как раз запись Бред сивой кобылы. Основная задача SQL тоже запись? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 10:03 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ну и что генерит LInq в этом случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 11:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, я же не говорил ,что не работает. Я говорил, что медленно. И вот тут как раз приходит магия t-sql. Я собственно не против Orma, и EF , просто подчеркиваю, что от хранимок все равно не уйти ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 11:33 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, ну и что генерит LInq в этом случае? Вот возьми руки, выпрями их, включи мозг, напиши запрос и посмотри, что он генерит. В чём конкретно вопрос? netivanАлексей К, я же не говорил ,что не работает. Я говорил, что медленно. Разговор о сферической кобыле без упряжки. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 12:13 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, разница в том делать тыщу раз (ID=x and ID=x2) OR и так 1000 раз и 10 секунд или делаешь JOIN и получаешь 1 секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 12:15 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, разница в том делать тыщу раз (ID=x and ID=x2) OR и так 1000 раз и 10 секунд или делаешь JOIN и получаешь 1 секунду. Ну так не делай тыщу раз (ID=x and ID=x2) OR, а сделай джойн в ORM и получи свою секунду. В чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 12:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ну у нас рекурсия. Я тебе дал ссылку на свой вопрос, прочитай ее. Если знаешь как - напиши. Но у меня есть в этом сомнение :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 12:51 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, ну у нас рекурсия. ORM не умеет работать с CTE, сто раз уже тылдычили. Пиши вьюху / функцию / хп и обвязывай в своём типизированном датаконтексте. В чем сложность? netivanЯ тебе дал ссылку на свой вопрос, прочитай ее. Если знаешь как - напиши. Но у меня есть в этом сомнение :) Я тебе уже ответил: 13538523 13539176 13541607 P.S. Про рекурсию в твоих постах ничего не было ( http://www.sql.ru/forum/actualthread.aspx?tid=978484) ВбросnetivanВот не пойму позволяет сделать Join и таблицей "из памяти" или нет ? Запрос что - то типа: Код: c# 1.
пока что сделал с помощью SP, но неспортивно :( 1. Начинаешь придумывать новые условия? 2. В чем сложность конкретно и понятно задать вопрос? 3. А ты как невинная девица, не знаешь к какому херу примастыриться Говори по-существу - с конкретными примерами и вопросами. 4. Если проблема с рекурсией, так и говори, что имеешь такую-то и такую-то схему, такой-то и такой-то запрос. И что тебе не понятно, как это будет выглядеть в той или иной ORM. Когда научишься вопросы задавать правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 13:19 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanАлексей К, я же не говорил ,что не работает. Я говорил, что медленно. И вот тут как раз приходит магия t-sql. Я собственно не против Orma, и EF , просто подчеркиваю, что от хранимок все равно не уйти )Я тоже не говорил что не работает. Просто в моём понимании: "работает медленнее чем надо" == "не работает" :-) netivanМСУ, разница в том делать тыщу раз (ID=x and ID=x2) OR и так 1000 раз и 10 секунд или делаешь JOIN и получаешь 1 секунду. 1000 простых запросов вида select * from T where X=@x and Y=@y выполняться будут тоже порядка секунды. А то и быстрее, если сетевой пинг позволит + запустить их одновременно асинхронно. зы: Почему данных, с которыми нужно джойнить, нет в базе? Может с архитектурой что-то не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 13:23 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosАлексей К, что есть проблемы и с чтением?У меня проблем нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 13:24 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, все равно не согласен, медленнее будет полюбому, даже пусть 5 секунд против 2. Тут я делаю один запрос и получаю быстро то что надо. а тут надо будет делать 1000, а если у меня 1000 таких в секунду что получаем? Вообщем вывод - то какой- orm не на все способен. Думаю на этом надо завершить дискуссию. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 14:24 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КCat2Ну, матом не крыл, но "идиотами" или неким подобным обзывал Это же просьба относится ка Алексею К. Бывалоча начнется дискуссия, я бы еще чего мог сказть - ан нет. МСУ и Алексей поцапались и тему закрыли.Вы что-то путаете. Мы с МСУ никогда не ругались. Все наши с ним дискуссии всегда были в рамках приличия. Прошу прощения. Они с SeVa ругаются ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:10 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Получить может. Соединится не может. МСУНа пальцах еще раз: в двухзвенной архитектуре пользователь ПО может безпрепятственно получить строку соединения к БД (пусть даже если ты строишь ПО с помощью виндовой аутентификации в БД). Ты считаешь нормальной практикой, если юзеры (пусть даже особо продвинутые или не очень) начнут хаотично юзать БД через сторонние клиенты (Excel, Access, Management Studio и пр.), делать большие выборки, ковыряться во внутрях БД и искать узкие места? Уже сам факт возможности попадания пользователя в БД, тем более сторонними средствами - вопиющ и опасен. Я уже не говорю про двухзвенки, в которых строка соединения к БД идет от sa либо от достаточно привилегированной сиквельной учетной записи - за такое вообще расстрел на месте. Cat2, что не понятно по безопасности? Вопросы, комментарии, замечания приветствуются. Получить может. Соединится не сможет, если его виндовой группе не предоставлено право на доступ к конкретной базе. Впрочем, могут быть более мягкие варианты. Например, все Domain Users включены в группу public одной из баз. В этом случае они могут увидеть названия таблиц. И все. Никакого доступа из Excelя не получится, если доступ дается не через разрешения на иаблицы, а через разрешения на ХП. Разумеется, если используется ОРМ, то кому-то будут даны прямые права на таблицы и можно будет, при известных знаниях, лазать к базе чем угодно. При использовании хранимых процедур пользователи не знают их названий и не знают их параметров. Но даже если и знают, то не смогут сделать ничего того, что не позволдяют сделать хранимки. Ты как-то писал про "тупые хранилища". Приходится напомнить, что эти хранилища не тупые. Их можно тупо использовать и превратить в "тупые хранилища". Настоящая правильно спроектированная база сама должна поддерживать целостность и непротиворечивость, огранирчения которой нельзя обойти никаким способом. Ну, разумеется, кроме снятия ограничений администратором. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:26 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivИначе выигрыш только в удобстве оформления кода, проигрыш в привязке к конкретной субд. Вы постоянно пишете приложения которые должны работать со всеми существующими СУБД? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivCat2Не все можно сделать с клиента хорошо. Например, транзакции. Ну, это ты не прав. Просто не прав. Может что-то ещё бы привёл в виде примера -- я бы согласился. Но не транзакции. Допустим мы открываем транзакцию на клиенте из двух запросов. В промежутке между ними отвалилась сеть. Первый запрос заблокировал какие-то ресурсы. (я знаю про версионники! Но и в этом случае незавершенная транзакция ни к чему хорошему не ведет) Они, конечно, не будут заблокированы вечно. СУБД через разумный промежуток времени откатит эту "зависшую" транзакцию и снимет блокировки. Однако это все таки будет промежуток времени. Транзакция с сервера будет выполнена даже если клиент умрет страшной смертью ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:35 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivCat2Хранимые процедуры всегда будут чуть быстрее, так как они уже откомпилированы и для них обязательно создан план запроса. Это сильно зависит от СУБД. Подготовленные запросы также во многих СУБД откомпилированы. Планы некоторые СУБД кэшируют и для простых запросов, а не только для процедур. Не все запросы простые. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:36 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
MasterZivKorbanz, В общем, подытоживая, могу предложить следующий "решатель" проблемы. если надо использовать CRUD -запросы (CreateReadUpdateDelete) и у тебя не одна поддерживаемая СУБД, стоит использовать ORM. Если надо писать только аналитические запросы (SELECT-ы ) то ORM применять бесполезно если поддерживается только одна СУБД, стоит писать код в виде хранимых процедур. если поддерживается одна-две СУБД, можно тоже писать код в виде хранимых процедур, несколько раз, для каждой СУБД свой вариант. Естественно, только если процедур немного (10-20). если запросов много, и много поддерживаемых СУБД, (и запросы аналитические, естественно), то лучше подумать о оформлении кода SQL на клиенте напрямую на SQL в виде универсального, стандартного SQL-я, иногда это получаться не будет, тогда надо писать конкретный запрос в N вариантах, для каждой СУБД. Не согласен ни с одним пунктом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:41 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КИмею самописный несложный кодогенератор, удобный для дальнейшей поддержки и модификации. +1 тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 20:42 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2MasterZivпропущено... Ну, это ты не прав. Просто не прав. Может что-то ещё бы привёл в виде примера -- я бы согласился. Но не транзакции. Допустим мы открываем транзакцию на клиенте из двух запросов. В промежутке между ними отвалилась сеть. Первый запрос заблокировал какие-то ресурсы. (я знаю про версионники! Но и в этом случае незавершенная транзакция ни к чему хорошему не ведет) Они, конечно, не будут заблокированы вечно. СУБД через разумный промежуток времени откатит эту "зависшую" транзакцию и снимет блокировки. Однако это все таки будет промежуток времени. Транзакция с сервера будет выполнена даже если клиент умрет страшной смертью то есть клиент отправил запрос серверу приложений, отвалился, сервер приложений его выполнил (или не выполнил). в чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 21:10 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
блин, извиняюсь, не сразу понял что тоже самое писал ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2012, 21:13 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУИспользовать ORM.LINQ2SQL! А почему не EntityFramework ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 01:44 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanАлексей К, все равно не согласен, медленнее будет полюбому, даже пусть 5 секунд против 2. Тут я делаю один запрос и получаю быстро то что надо. а тут надо будет делать 1000, а если у меня 1000 таких в секунду что получаем? Вообщем вывод - то какой- orm не на все способен.Пусть оно будет чуть медленнее, зато на сервер БД нагрузка более равномерная при многопользовательской работе. Транзакции получаются короче. Пока данные гоняются по сети СУБД "отдыхает" и готова принимать запросы от других пользователей. Поэтому я и говорю "медленно но верно". netivanДумаю на этом надо завершить дискуссию.Ваше право. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 06:08 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Алексей Кпропущено... Вы что-то путаете. Мы с МСУ никогда не ругались. Все наши с ним дискуссии всегда были в рамках приличия. Прошу прощения. Они с SeVa ругаются Принято. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 06:09 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2MasterZivпропущено... Это сильно зависит от СУБД. Подготовленные запросы также во многих СУБД откомпилированы. Планы некоторые СУБД кэшируют и для простых запросов, а не только для процедур. Не все запросы простые.От "простоты" запроса не зависит, будет он кэшироваться или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 06:13 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2MasterZivпропущено... Ну, это ты не прав. Просто не прав. Может что-то ещё бы привёл в виде примера -- я бы согласился. Но не транзакции. Допустим мы открываем транзакцию на клиенте из двух запросов. В промежутке между ними отвалилась сеть. Первый запрос заблокировал какие-то ресурсы. (я знаю про версионники! Но и в этом случае незавершенная транзакция ни к чему хорошему не ведет) Они, конечно, не будут заблокированы вечно. СУБД через разумный промежуток времени откатит эту "зависшую" транзакцию и снимет блокировки. Однако это все таки будет промежуток времени. Транзакция с сервера будет выполнена даже если клиент умрет страшной смертью Повторюсь . Между СП и БД хороший канал связи. Disconnected-режим работы с БД практически исключает такие случаи. Проблема надумана. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 06:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Но даже если и знают, то не смогут сделать ничего того, что не позволдяют сделать хранимки. Повторюсь. Система безопасности не ограничивает управление транзакциями. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 06:25 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
thunder2Алексей Кпропущено... LINQ2SQL! А почему не EntityFramework ?Имелись ввиду все LINQ-ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 06:27 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Получить может. Соединится не может. Как это не может, если сиквел соединение у тебя работает в контексте виндовой аутентификации? Cat2Никакого доступа из Excelя не получится, если доступ дается не через разрешения на иаблицы, а через разрешения на ХП. Всё, что связано с БД - через хранимые процедуры? Проще убить себя об стену, чем писать даже самые тривиальные вещи на хп. В топку такую архитектуру. Во-вторых, как было уже сказано, транзакции вне безопасности, поэтому никто не запрещает пользователю начать транзакцию и уйти курить бабмбук. В-третьих, какого вообще ляда пользователю даже видеть, что там оно в базе? Хранилище должно хоститься в отдельной песочнице, не доступной для кого-то нибыло, не говоря уже про всех пользователей домена (системы). Cat2Разумеется, если используется ОРМ, то кому-то будут даны прямые права на таблицы и можно будет, при известных знаниях, лазать к базе чем угодно. Глупости. ORM так же отлично работает с хранимыми процедурами. Cat2При использовании хранимых процедур пользователи не знают их названий и не знают их параметров. Им вообще ничего нельзя знать. Cat2Но даже если и знают, то не смогут сделать ничего того, что не позволдяют сделать хранимки. Открыть и оставить транзакцию? Еще раз, пользователям нечего делать в базе. Даже если они будут играть по правилам хранимок и лазить через них к данным, ни к чему хорошему это не приведет. Всегда найдется узкое место, в котором хранимка отдает один результат (расширенный функционал), а ПО другой (урезанный функционал). Всё это накладывает очень сложный и порой практически не поддерживаемый опционал в разрезе администрирования системы. Зачем и кому нужны эти проблемы? Не проще ли закрыться от всего внешнего зла средним слоем (WCF, ASMX) и жить спокойно? Это удобно и для других систем из других баз и SQL серверов - все мы знаем о зле, таящимся в слове "линкед сервер". Будешь шарить сервер для того, чтобы твои хп заюзали другие системы? В случае же SOA подхода - никаких линкедов, весь софт общается с хранилищем через единый документированный шлюз - потребители могут быть кто угодно, начиная от codemonkey-поделок, кончая всякими 1С, аксаптами, сапами, CRM, ECM, ERP и иже системами. Cat2Ты как-то писал про "тупые хранилища". Приходится напомнить, что эти хранилища не тупые. Их можно тупо использовать и превратить в "тупые хранилища". Хранилище должно быть тупым, средний слой (SOA) должен быть умным. Только так ты получишь распределение. Cat2Настоящая правильно спроектированная база сама должна поддерживать целостность и непротиворечивость, огранирчения которой нельзя обойти никаким способом. Ну, разумеется, кроме снятия ограничений администратором. Целостность и непротиворечивость хранилища делай на базовом уровне (связи, ключи). А бизнес-логику, интеграционный слой, распределение и т.п. - вне базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 09:46 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей Кthunder2пропущено... А почему не EntityFramework ?Имелись ввиду все LINQ-ORM. Что такое LINQ-ORM? :) EF, L2S, NH - это тоже всё LINQ-ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 09:46 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Имелись ввиду все LINQ-ORM. Что такое LINQ-ORM? :) EF, L2S, NH - это тоже всё LINQ-ORM.Все ОРМ, поддерживающие трансляцию Expression Tree => SQL. Какая теперь разница... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 10:01 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КВсе ОРМ, поддерживающие трансляцию Expression Tree => SQL ORM с трансляцией вида [гавномаппинги] => [SQL] идут на помойку? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 11:12 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей КВсе ОРМ, поддерживающие трансляцию Expression Tree => SQL ORM с трансляцией вида [гавномаппинги] => [SQL] идут на помойку? Да. Их эра закончилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 11:16 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КnetivanАлексей К, все равно не согласен, медленнее будет полюбому, даже пусть 5 секунд против 2. Тут я делаю один запрос и получаю быстро то что надо. а тут надо будет делать 1000, а если у меня 1000 таких в секунду что получаем? Вообщем вывод - то какой- orm не на все способен.Пусть оно будет чуть медленнее, зато на сервер БД нагрузка более равномерная при многопользовательской работе. Транзакции получаются короче. Пока данные гоняются по сети СУБД "отдыхает" и готова принимать запросы от других пользователей. Поэтому я и говорю "медленно но верно". netivanДумаю на этом надо завершить дискуссию.Ваше право. :-) Погодите, давайте разебремся. База в любом случае многопользовательская и она выполнит параллельно сколько надо запросов. Можно сказать,что в процедуре пакетный запрос, а вы предлагаете разбить его на Х маленьких. Не совсем все же понял логику) ЗЫ Кстати спасибо вам за мысль про EF 4.2, и правда хорошая штука) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:00 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КДа. Их эра закончилась. То есть хиберовские hbm-маппинги, HSQL и ICriteria идут прямиком на свалку? Куясе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:19 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМожно сказать,что в процедуре пакетный запрос, а вы предлагаете разбить его на Х маленьких.Да. Только это всего-лиш один из возможных вариантов. Не надо это воспринимать как наиболее правильное решение. :-) netivanЗЫ Кстати спасибо вам за мысль про EF 4.2, и правда хорошая штука)Всегда пожалуйста. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей КДа. Их эра закончилась. То есть хиберовские hbm-маппинги, HSQL и ICriteria идут прямиком на свалку?Да. МСУКуясе.Всё когда-то заканчивается. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:32 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, да я все к тому,что EF далеко не на все способен) Вот кстати интересно хинты в нем можно ставить?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:43 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, вы кстати не пробовали Ef 5 вашим способом вздрючить?) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanВот кстати интересно хинты в нем можно ставить?Традиционно, через вьюху. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 12:58 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanАлексей К, вы кстати не пробовали Ef 5 вашим способом вздрючить?)Пробовал, не получилось Он какой-то метод из класса Environment использует, который есть в 4.5 и которого нет в 4.0. Решил ждать следующей версии EF. Он теперь опенсорсный, что не может не радовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:01 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К, он еще помойму DataXXX что-то использует. Вообщем ждем следующей, согласен ) Вопрос когда она будет ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:13 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУТо есть хиберовские hbm-маппинги, HSQL и ICriteria идут прямиком на свалку?Да Это ещё SolYUtor не слышит, а то палкой бы побил ща такое беспощадие к hbm P.S. Linq/Lambda/ExpressionTree-ориентированные мапы не панацея, отче. Какая по сути разница, какая обёртка в ORM, главное что-бы удобно было. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:43 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУP.S. Linq/Lambda/ExpressionTree-ориентированные мапы не панацеяЭто большой шаг вперёд. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:54 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, ОРМ в моем понимание весч простая такая - я работаю со своими объектами и нифига не знаю о БД но с ваших слов, это не так - надо знать какие то хранимки, вьюхи, сте (слово то какое) и т.д. и притом в каких то случаях надо не объектами своими работать, а с их суррогатами (трекинг твой как раз управляет этим как я понял), нектороые объекты как бы и не объекты вовсе (табличка в памяти у НЕТИВАНа) и т.д. потому грю что - ерунда это,токо время отнимает 2 Алексею ОРМ нужен был ток для того, чтоб прогер не думал о синхронизации состояний объектов в памяти и в БД (а это в основном целосностное изменение-запись - удаление), с селект мало у кого проблемы были, а вот с остальным (особенно в БД с наворочеными ОЦ) были, до сих пор мало кто разумеет что исть транзакшн и т.д. но ваши ОРМ неспособные все это делать прозрачно, они просто вызывают ваши ХП (как будьто без них низзя было их вызывать) понятно грю? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 14:30 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
у меня и к Объектам (ООП) тоже немало претензийи и к РМД, если б они были нормальные, то и проблемы бы с маппингом не появлялись ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 14:33 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosя работаю со своими объектами и нифига не знаю о БД Сахаватище, друх сердешный, твоё поделие - динамический конструктор, с помощью которого можно дизайнить предметную область и иже с ним. Тут чистая динамика, поэтому ORM тут как кобыле пятое колесо. Так что в твоём случае ридеры форевер. ORM применима только для заранее известных объектов хранилища. Если у тебя 50 на 50 (динамика / типизация), то имеет смысл миксовать ридеры + ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 15:10 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, тут "я" это вовсе не я - "прогер любой" имелся ввиду и мое "поделие" не при чем ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 15:41 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosМСУ, тут "я" это вовсе не я - "прогер любой" имелся ввиду и мое "поделие" не при чем Что не ясно из моего ответа про динамику vs тайпед? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 16:04 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, да мне то все ясно давно людишки вот мечутся, как в эти "тайпед" (в переводе с хантимансийского - мертвый) жисть вдувать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 16:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ViPRosМСУ, да мне то все ясно давно Умный дядя, хвалю. ViPRosлюдишки вот мечутся, как в эти "тайпед" (в переводе с хантимансийского - мертвый) жисть вдувать Людишки еще не доросли до этого, вот и мечутся. А нормальные люди сидят ровно на жопе, гоняют чаи и неторопливо накидывают сущности в дизайнер EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 17:39 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ, Нормальные люди CodeFirst генерят %) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 18:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanМСУ, Нормальные люди CodeFirst генерят %)++ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2012, 06:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КnetivanМСУ, Нормальные люди CodeFirst генерят %)++ Гумно, ибо без дизайнера ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2012, 08:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУЯ ж тебе сказал, если у тебя DTO или что-то еще - все обновления через новый контекст. Что непонятно? ORM не будут работать с левыми классами. да неужели? америку открыл просто, так проблема в том, чтоб заставить ORM работать с левыми классами, так как отображение идет в виде DTO, которое плоское, а обрабатывать надо Entity, которое с вложенными классами МСУОткуда информация по утечкам? Где факты, а не сопли на голом сене? факты были во время разработки и отладке метода, в виде окошка с экспешеном МСУА причем тут EF? Во-вторых, длина запроса называется батчем. В-третьих, выше я тебе пальцем ткнул на 3 варианта, как сделать, чтобы непересвопить батч, мало? я и не говорил что EF виноват, ошибку с длиной запроса выдавал MS SQL, читай внимательней МСУДаже двоешники знают чудесные 3 буквы - SOA. Не сылхал? Срочно открывай букварь и начинай штудировать WCF и ASMX, а то так бездарем и помрешь. xDDD а SOA/WCF - это что по твоему? не слой приложений/служб который 3-tier? мда... МСУПричем тут протоколы с XML и ORM? Ты не вписываешься в повороты, заносит то влево то вправо. при том, что было обсуждение 3-tier наряду с ORM МСУНужно отрефрешить контекст, и чё дальше-то? Код я не пишу. Про несколько минут ты гонишь, разумеется. разумеется не гоню, открыть дизайнер, нажать кнопку обновления контекста, выбрать там таблицу для обновления -> тупит порядочно, и занимает 2-3-5 минут МСУДа какая в жопу разница, чья эта база. На девелоперских стендах также присутствуют данные, которые важны для отладки и тестирования, зачем их сносить? ну не сноси, я тебе что запрещаю? МСУВо-вторых, ты уже сам запутался, сначала говоришь про продакшен, теперь говоришь, что я опять не так понял, и речь, оказывается, уже о девелоперской базе. Я не могу уследить за потоком твоего сознания, определись с мыслями. Во-вторых, не всегда разработка ведется со своей "чистой" базой. Ты не подумал о том, что есть корпоративные платформенные решения со своими БД (MS Dynamics CRM, SharePoint, Axapta, ECM'ы и т.д.)? Тут уже не удалишь базу, батенька. что ж так? еще раз, повторяю - изначально я имел ввиду девелоперскую базу, а ты поднял вопрос обновления данных, в это случае - неважно какой подход используется - в любом случае надо генерить скрипт обновления данных, в некоторых случаях и там и там можно обойтись тупо добавлением столбца (например он null), и все это действительно, в том числе, и для Dynamics / SharePoint МСУА я и не отрицал сего факта - code-first отстой. Засекал - добавить десяток сущностей в контекст 10 секунд (время тупо на выбрать нужные объекты) а время на создание таблиц в БД забыл? тоже все за 10 секунд, т.е. по секунде на таблицу? ну ты герой, считай секунды лучше МСУА теперь ты засеки, сколько раз у тебя будет заново пересоздаватья гигобайтная база для того, чтобы тупо добавить поле. в гигабайтную базу поле я добавлю скриптом, точно так же как и ты для EF, только потом ты пойдешь в дизайнер, и будешь ждать 2-3 минуты обновления контекста, а я добавлю две строчки кода, одна - это само поле в класс, вторая - это маппинг этого поля МСУВо-вторых, у тебя уже есть сегодняшние наработанные тестовые данные, нужные для разработки, которые похерятся. Ручками заново будешь их вколачивать? Убей себя, серьезно. конечно есть, в скриптах, когда я жму развернуть базу, заодно разворачиваются тестовые данные на большую тестовую базу (гигабайтную) - структура БД обновляется скриптами, которые сгенерили руками, и, _еще_раз_, это нужно будет сделать как при использовании EF так и NH ----- Алексей КДля сохранения можно самостоятельно, без EF, генерить SQL-батчи. Использовать для этого EF никто не заставляет. Не нужно вставлять "всё" в один батч, чтобы MSSQL не ругался на его размеры. я понимаю что можно, тогда я тупо выкину ORM, зачем она нужна, и да там в некоторых местах была сделана пакетная обработка по 5000-10000 записей, но это тупо костыль Алексей Кзы: Странная архитектура. Может она причина всех бед? накладывать ООП на реляционные БД - вообще штука странная ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2012, 21:17 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Мартин Фаулер : I've often felt that much of the frustration with ORMs is about inflated expectations. (наибольшее разочарование от ORM заключается в завышенных ожиданиях) Джимми Богард (соавтор ASP.NET MVC in Action) в "Choosing an ORM strategy" We have to move past the idea that ORMs are bad or ugly or bloatware. (мы должны смириться с мыслью о том, что ORM являются плохими, уродливыми и перегруженными) и завершающий аккорд - Туполев, Андрей Николаевич (авиаконструктор): Хорошо летать могут только красивые самолеты ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2012, 00:16 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77да неужели? америку открыл просто, так проблема в том, чтоб заставить ORM работать с левыми классами, так как отображение идет в виде DTO, которое плоское, а обрабатывать надо Entity, которое с вложенными классами С какого перепугу ORM должна работать с левыми классами? Заставишь поработать ORM, скажем, с классом Thread? 17-77МСУОткуда информация по утечкам? Где факты, а не сопли на голом сене? факты были во время разработки и отладке метода, в виде окошка с экспешеном Очень весомые доказательства. Это всё? 17-77я и не говорил что EF виноват, ошибку с длиной запроса выдавал MS SQL, читай внимательней А зачем тогда пишешь про это? 17-77xDDD а SOA/WCF - это что по твоему? не слой приложений/служб который 3-tier? мда... Ты это к чему ляпнул? 17-77МСУПричем тут протоколы с XML и ORM? Ты не вписываешься в повороты, заносит то влево то вправо. при том, что было обсуждение 3-tier наряду с ORM И? Не вижу выводов. Ты констатируешь факты, а выводов нет. Ну трехзвенка, ORM... Что дальше? 17-77разумеется не гоню, открыть дизайнер, нажать кнопку обновления контекста, выбрать там таблицу для обновления -> тупит порядочно, и занимает 2-3-5 минут Только что открыл дизайнер, обновил контекст, обновилось за 3 секунды. Что я делаю не так? 17-77МСУДа какая в жопу разница, чья эта база. На девелоперских стендах также присутствуют данные, которые важны для отладки и тестирования, зачем их сносить? ну не сноси, я тебе что запрещаю? А как тогда база заново обновится? 17-77что ж так? еще раз, повторяю - изначально я имел ввиду девелоперскую базу, а ты поднял вопрос обновления данных Я тебе уже 10 раз сказал, что не важно какая база, девелоперская или продакшен. 17-77в это случае - неважно какой подход используется - в любом случае надо генерить скрипт обновления данных, в некоторых случаях и там и там можно обойтись тупо добавлением столбца (например он null), и все это действительно, в том числе, и для Dynamics / SharePoint Глупости. Никаких скриптов обновления данных генерить не нужно. А по поводу добавления столбца - верно. Так вот я добавил его, подсунул обновленный контекст и всё заработало. В чем проблема? 17-77а время на создание таблиц в БД забыл? тоже все за 10 секунд, т.е. по секунде на таблицу? ну ты герой, считай секунды лучше Только идиоты под каждый чих пересоздают таблицы в БД. Так что ты чё-то не в кассу сказал. 17-77в гигабайтную базу поле я добавлю скриптом, точно так же как и ты для EF, только потом ты пойдешь в дизайнер, и будешь ждать 2-3 минуты обновления контекста, а я добавлю две строчки кода, одна - это само поле в класс, вторая - это маппинг этого поля Еще раз - про 2-3 минуты - бред сивой кобылы, схема обновляется молниеносно. И я не пишу никакого кода руками, а в стоем случае есть вероятность ошибиться в коде при добавления нового свойства с атрибутами, и эта ошибка может всплыть далеко не сразу. В моем же случае всё автоматом создается на основе структуры в БД, никаких ошибок. 17-77конечно есть, в скриптах, когда я жму развернуть базу, заодно разворачиваются тестовые данные на большую тестовую базу (гигабайтную) - структура БД обновляется скриптами, которые сгенерили руками, и, _еще_раз_, это нужно будет сделать как при использовании EF так и NH Развернуть БД из контекста нах не нужно в обсуждаемой теме. 17-77накладывать ООП на реляционные БД - вообще штука странная Накладывают ООП на бизнес-логику, а не на реляционные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2012, 15:55 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mv Мартин Фаулер : I've often felt that much of the frustration with ORMs is about inflated expectations. (наибольшее разочарование от ORM заключается в завышенных ожиданиях) Правильно, это относится к любой технологии. Нужно выбирать подходы исходя из потребностей и возможностей. sphinx_mvДжимми Богард (соавтор ASP.NET MVC in Action) в "Choosing an ORM strategy" We have to move past the idea that ORMs are bad or ugly or bloatware. (мы должны смириться с мыслью о том, что ORM являются плохими, уродливыми и перегруженными) Шагом марш учить английский язык - Джимми БогардМы должны отказаться от мысли, что ORM плохо, уродливо или мертво. Для решения проблем имеется много различных вариантов для этого. Но прежде чем мы рассмотрим эти варианты, давайте посмотрим на эту проблему с конкретики. ... Поржал. sphinx_mvи завершающий аккорд - Туполев, Андрей Николаевич (авиаконструктор): Хорошо летать могут только красивые самолеты Правильно, ORM - это красивые самолеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2012, 16:06 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77Алексей КДля сохранения можно самостоятельно, без EF, генерить SQL-батчи. Использовать для этого EF никто не заставляет. Не нужно вставлять "всё" в один батч, чтобы MSSQL не ругался на его размеры. я понимаю что можно, тогда я тупо выкину ORM, зачем она нужна , и да там в некоторых местах была сделана пакетная обработка по 5000-10000 записей,Для других задач. 17-77но это тупо костыльНет, оптимизация. 17-77Алексей Кзы: Странная архитектура. Может она причина всех бед? накладывать ООП на реляционные БД - вообще штука страннаяДа я не про это. Странно, что приходится производить масштабные изменения данных, уже хранящихся в БД. Масштабная вставка - да, но не масштабные изменения. Впрочем, Вам виднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 05:44 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУГлупости. Никаких скриптов обновления данных генерить не нужно. А по поводу добавления столбца - верно. Так вот я добавил его, подсунул обновленный контекст и всё заработало. В чем проблема? Проблема в том, что ты свой незамысловатый опыт говнокодера для лапидарных баз порносайта, пытаешься обобщит на все и вся. Попробуй добавить столбец с not null без скриптов обновления данных. Это простейший вариант, не было и не будет ни одной тулзовины, которая будет генерить нормальные скипты на обновление в общем случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 08:50 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУШагом марш учить английский язык - Джимми БогардМы должны отказаться от мысли, что ORM плохо, уродливо или мертво. Для решения проблем имеется много различных вариантов для этого. Но прежде чем мы рассмотрим эти варианты, давайте посмотрим на эту проблему с конкретики. ... Поржал. В статье помимо EF&Hibernate рассматриваются совсем другие варианты(каждый из которых имеет свои плюсы\минусы и области применения), но в итоге вывод такой же как Фаулера - все УГ. EF пригоден только для твоих базенок в пять таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 09:01 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
SeVaВ статье помимо EF&Hibernate рассматриваются совсем другие варианты(каждый из которых имеет свои плюсы\минусы и области применения), но в итоге вывод такой же как Фаулера - все УГ.В обоих статьях про LINQ ни слова. Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 09:30 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
SeVaПроблема в том, что ты свой незамысловатый опыт говнокодера для лапидарных баз порносайта, пытаешься обобщит на все и вся. Проблема в том, что твой моск уже слишком стар, чтобы осознавать этот опыт. SeVaПопробуй добавить столбец с not null без скриптов обновления данных. Это простейший вариант, не было и не будет ни одной тулзовины, которая будет генерить нормальные скипты на обновление в общем случае. Можешь сходить в детский сад, там дети тебя научат добавлять null-колонку с дефолтным значением. SeVaВ статье помимо EF&Hibernate рассматриваются совсем другие варианты(каждый из которых имеет свои плюсы\минусы и области применения), но в итоге вывод такой же как Фаулера - все УГ. Если всё УГ - можешь заняться земледелием. SeVaEF пригоден только для твоих базенок в пять таблиц EF пригоден только тем, кто понимает его ценность и незаменимость. Сначала почитай в букваре, что такое "Default Value or Binding", а потом расскажешь нам про 5 таблиц. Шагом марш зубрить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 09:36 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУSeVaПроблема в том, что ты свой незамысловатый опыт говнокодера для лапидарных баз порносайта, пытаешься обобщит на все и вся. Проблема в том, что твой моск уже слишком стар, чтобы осознавать этот опыт. SeVaПопробуй добавить столбец с not null без скриптов обновления данных. Это простейший вариант, не было и не будет ни одной тулзовины, которая будет генерить нормальные скипты на обновление в общем случае. Можешь сходить в детский сад, там дети тебя научат добавлять null-колонку с дефолтным значением. SeVaВ статье помимо EF&Hibernate рассматриваются совсем другие варианты(каждый из которых имеет свои плюсы\минусы и области применения), но в итоге вывод такой же как Фаулера - все УГ. Если всё УГ - можешь заняться земледелием. SeVaEF пригоден только для твоих базенок в пять таблиц EF пригоден только тем, кто понимает его ценность и незаменимость. Сначала почитай в букваре, что такое "Default Value or Binding", а потом расскажешь нам про 5 таблиц. Шагом марш зубрить. Мусафаил, ты умеешь веселить. Давай чуть усложним задачу, представь себе, что на твоем сайте решили расширить сферу услуг и к девочкам добавили мальчиков по вызову для выгребных ям. Напряги мышцы, на которых ты сидишь, и выдай на гора, что ставить в качестве "Default Value" для поля Тип услуг. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 11:20 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
SeVaМусафаил, ты умеешь веселить. Давай чуть усложним задачу, представь себе, что на твоем сайте решили расширить сферу услуг и к девочкам добавили мальчиков по вызову для выгребных ям. Напряги мышцы, на которых ты сидишь, и выдай на гора, что ставить в качестве "Default Value" для поля Тип услуг. Сева, твоя унылая логика непоколебима - давай усложним задачу, отчего же. Был справочник девочек, теперь нужны малтчики - добавляем новое поле тип (мальчик / девочка), по-дефолту будет девочка. В справочник мальчиков еще не заливали, поэтому новый тип у нас правильный. Всё, not null поле новое создано. Потом доливаем мальчиком с другим типом и даруемся в жизни. В основной сущности сфер услуг ничего не меняется, т.к. используется референсный айдишник из справочника девочек (теперь уже и мальчиков). Ты настолько убог, что даже нормальный пример не смог придумать, где действительно нужен скрипт по обновлению данных. Но даже и в этом случае всё намного проще - поле добавить всегда можно, а как потом ты его проапдейтишь из своего C#-говноцикла, твои проблемы. Ты смешон. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 12:03 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУSeVaМусафаил, ты умеешь веселить. Давай чуть усложним задачу, представь себе, что на твоем сайте решили расширить сферу услуг и к девочкам добавили мальчиков по вызову для выгребных ям. Напряги мышцы, на которых ты сидишь, и выдай на гора, что ставить в качестве "Default Value" для поля Тип услуг. Сева, твоя унылая логика непоколебима - давай усложним задачу, отчего же. Был справочник девочек, теперь нужны малтчики - добавляем новое поле тип (мальчик / девочка), по-дефолту будет девочка. В справочник мальчиков еще не заливали, поэтому новый тип у нас правильный. Всё, not null поле новое создано. Потом доливаем мальчиком с другим типом и даруемся в жизни. В основной сущности сфер услуг ничего не меняется, т.к. используется референсный айдишник из справочника девочек (теперь уже и мальчиков). Ты настолько убог, что даже нормальный пример не смог придумать, где действительно нужен скрипт по обновлению данных. Но даже и в этом случае всё намного проще - поле добавить всегда можно, а как потом ты его проапдейтишь из своего C#-говноцикла, твои проблемы. Ты смешон. Мусафаил, сразу видно, что тебя к работающему продакшену даже близко не подпускали. ПОдобные апдейты делают без останова, чтобы девочки не простаивали и не было потери в деньгах. Так только пионеры изголяться могут. Черпак тебе никто не даст, ты только у своей выгребной ямы стоять можешь, к которой без противогаза никто больше не подойдет за версту. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 13:20 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
SeVaМусафаил, сразу видно, что тебя к работающему продакшену даже близко не подпускали. Сразу понятно, что ты о продакшене только в букварях читал. SeVaПОдобные апдейты делают без останова, чтобы девочки не простаивали и не было потери в деньгах. Так только пионеры изголяться могут. Для тех, кто в танк засел надолго - апдейты разные бывают, ты сам начал "усложнять" задачу. SeVaЧерпак тебе никто не даст, ты только у своей выгребной ямы стоять можешь, к которой без противогаза никто больше не подойдет за версту. Ты как сидел голой жопой в канализации с миской риса, так и сидишь - тут и противогаз не поможет. Проще утопиться в своих же фекалиях. Да? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 13:52 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУ SeVaПОдобные апдейты делают без останова, чтобы девочки не простаивали и не было потери в деньгах. Так только пионеры изголяться могут. Для тех, кто в танк засел надолго - апдейты разные бывают, ты сам начал "усложнять" задачу. Ты продолжаешь веселить. Какие еще усложнения? Без этого тебе даже крышку люка не дадут открыть. ЗЫ В нормальных конторах помимо скриптов на изменение еще обязательно присутствуют скрипты для отката, версионность(на разных БД может быть разные версии), тестирование, интеграция с автоматическим билдом и развертыванием, etc. Могут это твои танчики для детской песочницы? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 15:07 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
SeVaТы продолжаешь веселить. Какие еще усложнения? Без этого тебе даже крышку люка не дадут открыть. Клоунада кухарки продолжается: "Давай чуть усложним задачу" (c) Кухарка рукодельница Может, ссылку еще дать? Мозг окончательно у тебя разложился, даже своих же слов не упомнишь. SeVaЗЫ В нормальных конторах помимо скриптов на изменение еще обязательно присутствуют скрипты для отката, версионность(на разных БД может быть разные версии), тестирование, интеграция с автоматическим билдом и развертыванием, etc. Откуда знаешь? Ведь далmше своего газетного ларька не видел-то. Нагуглил? SeVaМогут это твои танчики для детской песочницы? Чудо, скрипты могут быть на чем угодно написаны. Тебя видимо переклинило на SQL, бегом читать про класс DbMigration, неуч. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 15:15 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Для ленивых танкистов: EF 4.3 Code-Based Migrations Walkthrough ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 15:16 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУС какого перепугу ORM должна работать с левыми классами? Заставишь поработать ORM, скажем, с классом Thread? иди еще раз почитай обсуждение, особенно насчет DTO, который и является левым классом для ORM МСУОчень весомые доказательства. Это всё? да МСУ17-77я и не говорил что EF виноват, ошибку с длиной запроса выдавал MS SQL, читай внимательней А зачем тогда пишешь про это? 17-77xDDD а SOA/WCF - это что по твоему? не слой приложений/служб который 3-tier? мда... Ты это к чему ляпнул? читай до тех пор, пока не поймешь, что к чему, не люблю глупости объяснять по 100 раз МСУИ? Не вижу выводов. Ты констатируешь факты, а выводов нет. Ну трехзвенка, ORM... Что дальше? аналогично МСУТолько что открыл дизайнер, обновил контекст, обновилось за 3 секунды. Что я делаю не так? я откуда знаю, не там считаешь, считай полностью: 1. открытие дизайнера 2. открытие окна подключения к базе 3. время пока это окно обратиться к БД, считает структуру и отобразит тебе дерево объектов 4. поиск нужного объекта 5. выделение галкой 6. нажатие кнопки ОК и ожидание результата МСУГлупости. Никаких скриптов обновления данных генерить не нужно. А по поводу добавления столбца - верно. Так вот я добавил его, подсунул обновленный контекст и всё заработало. В чем проблема? епрст, данные не надо обновлять при обновлении структуры базы xD, а мужики-то и не знают 1. добавление колонки not-null, ты там дальше вспоминаешь про дефолтное значение столбца, так вот запомни раз и навсегда - в данном случае это костыль для ленивых программистов, которым насрать на проект или начльник требует сделать побыстрому, дефолтное значение используется для других случаев, например это аналог переноса бизнес-логики в базу данных, в частности - например когда в таблицу пишет некая внешняя система и требуется устанавливать поля в дефолтные значения при отсутствии значений 2. обновление данных может затрагивать более сложные случаи - например * смена many-to-one, на many-to-many * добавление not-null столбца, значение которого зависит от некоторых других данных и дефолтного значения там быть не может, например направление (входщий/исходящий), направление "не определено" ака дефолтное значение - это тупо опять костыль, который потом исправлять скриптом обновления данных или иным быстрым способом, потому что пользователям будет лень тыкать кнопки для 10к записей МСУТолько идиоты под каждый чих пересоздают таблицы в БД. Так что ты чё-то не в кассу сказал. мда, жесть, еще раз МСУА я и не отрицал сего факта - code-first отстой. Засекал - добавить десяток сущностей в контекст 10 секунд (время тупо на выбрать нужные объекты) говорил такое? говорил, так вот при подходе database-first - у тебя нет таблиц в базе (а в начале проекта даже базы нет), ты сначала идешь в СУБД, создаешь через какую-нибудь managment studio базу, потом таблицы, поля там набиваешь, потом идешь в visual studio, в дизайнер EF, и только потом пытаешься их добавить в модель данных EF и ты мне тут заливаешь про 10 секунд еще, ага на создание базы и десяти таблиц в базе руками, герой МСУРазвернуть БД из контекста нах не нужно в обсуждаемой теме. она у тебя из дзена появится? МСУНакладывают ООП на бизнес-логику, а не на реляционные данные. опа, а чего ты мне тут тогда втираешь про ORM и EF в частности? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 16:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КДля других задач. хм, интересно и для каких? Алексей КНет, оптимизация. все не так однозначно, ORM является абстракцией, и если в этой абстракции отсутствует проверка на ограничение длины запроса для некой БД - это будет именно костылем, чтобы исправить ситуацию, которой не должно было быть, по правильному - ORM должна сама определить по типу БД максимальную длину запроса и организовать операцию так, чтобы не превысить это значение Алексей КДа я не про это. Странно, что приходится производить масштабные изменения данных, уже хранящихся в БД. Масштабная вставка - да, но не масштабные изменения. Впрочем, Вам виднее. так не очень понятно как вы предлагаете решить задачу в глобальном смысле? т.е. тут даже говорится о том, что средствами СУБД, внутри самой базы масштабно обновлять данные - есть плохо? ну а если надо? конкретно задача проверки ссылок URL, ссылки хранятся в базе, ссылка сегодня работает, завтра нет, надо их регулярно проверять, вопрос об адекватности требований заказчика / пользователя оставим в стороне ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 16:41 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77иди еще раз почитай обсуждение, особенно насчет DTO, который и является левым классом для ORM Сходил почитал. И? 17-77МСУОчень весомые доказательства. Это всё? да Бабушке своей "да" будешь говорить, а тут изволь аргументировать утечки памяти. Итак, еще раз, примеры, демонстрирующие утечки памяти в EF будут? 17-77читай до тех пор, пока не поймешь, что к чему, не люблю глупости объяснять по 100 раз Жжешь. В том-то и проблемы, что ты глупости объясняешь по 100 раз 17-77МСУИ? Не вижу выводов. Ты констатируешь факты, а выводов нет. Ну трехзвенка, ORM... Что дальше? аналогично Чего аналогично, повторялка? Всё, сопли кончились, вопросом на вопрос стал отвечать? 17-77МСУТолько что открыл дизайнер, обновил контекст, обновилось за 3 секунды. Что я делаю не так? я откуда знаю, не там считаешь, считай полностью: 1. открытие дизайнера 2. открытие окна подключения к базе 3. время пока это окно обратиться к БД, считает структуру и отобразит тебе дерево объектов 4. поиск нужного объекта 5. выделение галкой 6. нажатие кнопки ОК и ожидание результата Вот лог генерации модели: ...Generated model file: Model.edmx. Loading metadata from the database took 00:00:02.3613956. Generating the model took 00:00:00.8512094. Какие в жопу 2-3 минуты? Акстись. [quot 17-77]епрст, данные не надо обновлять при обновлении структуры базы xD, а мужики-то и не знают[/quote Так твои же слова, что надо. Более того, ты говорил о пересоздании базы данных. Ты уже сам запутался в своих бреднях. 17-771. добавление колонки not-null, ты там дальше вспоминаешь про дефолтное значение столбца, так вот запомни раз и навсегда - в данном случае это костыль для ленивых программистов, которым насрать на проект или начльник требует сделать побыстрому, дефолтное значение используется для других случаев, например это аналог переноса бизнес-логики в базу данных, в частности - например когда в таблицу пишет некая внешняя система и требуется устанавливать поля в дефолтные значения при отсутствии значений Всё зависит от задачи. Если нужно быстро руками - это одно, если саппорту нужно отвесить скрипт - это другое, если миграцию (ETL) надо протянуть - это третье. Часто и ручное добавление колонки выручает, особенно на этапе разработки. 17-772. обновление данных может затрагивать более сложные случаи - например * смена many-to-one, на many-to-many * добавление not-null столбца, значение которого зависит от некоторых других данных и дефолтного значения там быть не может, например направление (входщий/исходящий), направление "не определено" ака дефолтное значение - это тупо опять костыль, который потом исправлять скриптом обновления данных или иным быстрым способом, потому что пользователям будет лень тыкать кнопки для 10к записей Написал выше. Всё зависит от задачи. Я не протестую против скриптов. 17-77МСУТолько идиоты под каждый чих пересоздают таблицы в БД. Так что ты чё-то не в кассу сказал. мда, жесть, еще раз Да, жесть конечно. 17-77говорил такое? говорил, так вот при подходе database-first - у тебя нет таблиц в базе (а в начале проекта даже базы нет), ты сначала идешь в СУБД, создаешь через какую-нибудь managment studio базу, потом таблицы, поля там набиваешь, потом идешь в visul studio, в дизайнер EF, и только потом пытаешься их добавить в модель данных EF Не я иду, а идет конкретный DB-разработчик, которому нах не нужно конкретное ПО, над которым трудятся C#-кодеры. Все занимаются своей работой. Разрабу, который пишет бизнес-логику, нах не уперлись твои поля в БД - ему нужны определенные классы в прикладном коде. А что там будет, сиквел или оракл - монопенисуально. Что дадут, то и будет. C#-кодер обновляет контекст и продолжает дальше концентрироваться на логике. И так далее. 17-77и ты мне тут заливаешь про 10 секунд еще, ага на создание базы и десяти таблиц в базе руками, герой И того меньше. Речь о построении контекста, причем тут создание базы? 17-77она у тебя из дзена появится? Да. 17-77опа, а чего ты мне тут тогда втираешь про ORM и EF в частности? Опять ты невнимателен. Цитата не моя была, купи очик. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 16:57 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУsphinx_mv Мартин Фаулер : пропущено... Правильно, это относится к любой технологии. Нужно выбирать подходы исходя из потребностей и возможностей. Материал Вами (как обычно) не прочитан... А если и прочитан, то (тоже как обычно) совершенно не понят... МСУsphinx_mvДжимми Богард (соавтор ASP.NET MVC in Action) в "Choosing an ORM strategy" пропущено... Шагом марш учить английский язык - Джимми БогардМы должны отказаться от мысли, что ORM плохо, уродливо или мертво. Для решения проблем имеется много различных вариантов для этого. Но прежде чем мы рассмотрим эти варианты, давайте посмотрим на эту проблему с конкретики. ... Поржал. Было бы это смешно - можно было бы и поржать, но, к ОЧЕНЬ большому сожалению, то что у Вас проблемы с чтением "языка оригинала" даже со словарем - давно задокументировано. И смех это уже давно совершенно не вызывает... С каких пор "оставьте в прошлом" (дословно "по словарю") стало переводиться как "забудьте"? Ну, и с контекстным и идеоматическим переводом, когда вроде бы "по словарю" должен быть один смысл, а в контектсе получается совершенно другой - Вы тем более не знакомы... Относительно контекста "оставьте в прошлом" совершенно не означает, что указанные недостатки - "пройденный этап" и их уже нет. Наоброт - они ВСЕ ЕЩЕ ЕСТЬ, и изменить это НЕВОЗМОЖНО - соотвественно, общий смысл этой фразы, кроме как "смиритесь", не восприниматься просто не может... А, может, у Вас хватит дури утверждать, что ORM ни разу не "плохие"? И нигде не "перегруженные"? И совсем не "уродливые"? И Вы даже можете ЭТО (как-то) изменить? Ну-ну... Поспорьте с Фаулером... Можно еще Теда Ньюарда (Ted Neward) с его "Вьетнамом компьютерных наук" (The Vietnam of Computer Science) поопровергать... (запасаюсь попкорном, чипсами и пивом) Соотвественно, правильный (во всех смыслах) перевод этого абзаца звучит именно так: Мы должны смириться с мыслью о том, что ORM являются плохими, уродливыми и перегруженными. ORM предназначены решать задачу и имеют множество разных подходов для этого. Но, перед тем как мы посмотрим на эти подходы, давайте изучим, какую же задачу мы пытаемся решить? Сильно горите желанием - могу дать ссылку на весь текст перевода. Там и "пообщаетесь" с переводчиком, хотя что-то мне подсказывает, что Вам там в лучшем случае предложат "пешее эротическое"... МСУsphinx_mvи завершающий аккорд - Туполев, Андрей Николаевич (авиаконструктор): пропущено... Правильно, ORM - это красивые самолеты.Ожидаемо... Говоришь блондинке "дура", а от нее в ответ "зато красивая" - но, хоть бы раз перед этим она в зеркало глянула... Фаулер сказал... Богард сказал... Ньюард сказал... А МСУ все еще пыркается из говна конфеты делать... С другой строны, чего еще от "золотаря информационных технологий" ожидать?! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 17:54 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КSeVaВ статье помимо EF&Hibernate рассматриваются совсем другие варианты(каждый из которых имеет свои плюсы\минусы и области применения), но в итоге вывод такой же как Фаулера - все УГ.В обоих статьях про LINQ ни слова. Почему?Потому, что LINQ непосредственного отношения к ORM не имеет. Это встроенный язык запросов к объектам, реализующим на .NET (и только!) интерфейсы IEnumerable и IEnumerable<T> ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 17:57 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУСходил почитал. И? МСУЖжешь. В том-то и проблемы, что ты глупости объясняешь по 100 раз МСУЧего аналогично, повторялка? Всё, сопли кончились, вопросом на вопрос стал отвечать? с тобой не о чем разговаривать, ты даже не можешь проследить две линии обсуждения, и почитать еще раз чуть выше над словом "аналогично" МСУКакие в жопу 2-3 минуты? Акстись. в моем случае считывание структуры БД занимало продолжительно-раздражающее время МСУТак твои же слова, что надо. Более того, ты говорил о пересоздании базы данных. Ты уже сам запутался в своих бреднях. забывчивый ты наш, до этого уже разобрали случаи обновления и пересоздания МСУНе я иду, а идет конкретный DB-разработчик, которому нах не нужно конкретное ПО, над которым трудятся C#-кодеры. Все занимаются своей работой. Разрабу, который пишет бизнес-логику, нах не уперлись твои поля в БД - ему нужны определенные классы в прикладном коде. А что там будет, сиквел или оракл - монопенисуально. Что дадут, то и будет. C#-кодер обновляет контекст и продолжает дальше концентрироваться на логике. И так далее. а, вот оно что, тебе DB-разработчик попу подтирал, ясно теперь, ну вот спроси у него сколько времени заняла разработка структуры БД и включи это время в общее время для database-first подхода МСУИ того меньше. Речь о построении контекста, причем тут создание базы? тупой и еще тупее, читаем ниже до полного понимания 17-77так вот при подходе database-first - у тебя нет таблиц в базе (а в начале проекта даже базы нет), ты сначала идешь в СУБД, создаешь через какую-нибудь managment studio базу, потом таблицы само название "database-first" предполагает, что сначала надо создать базу xDD МСУ17-77опа, а чего ты мне тут тогда втираешь про ORM и EF в частности? Опять ты невнимателен. Цитата не моя была , купи очик. ого, окей, давай досвидания МСУ Накладывают ООП на бизнес-логику, а не на реляционные данные. 13564358 в самом конце ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 19:13 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУДля ленивых танкистов: EF 4.3 Code-Based Migrations Walkthrough Эту поделку придумали для уродцев, которые предлагают варианты с default value. За одно это желтый билет с вещами на выход. The Vietnam of Computer Science ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 19:36 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvМатериал Вами (как обычно) не прочитан... А если и прочитан, то (тоже как обычно) совершенно не понят... Ты не можешь не то, что понять этот материал, ты даже не можешь идею материала вменяемо донести. Одно хлюпанье. sphinx_mvБыло бы это смешно - можно было бы и поржать, но, к ОЧЕНЬ большому сожалению, то что у Вас проблемы с чтением "языка оригинала" даже со словарем - давно задокументировано. И смех это уже давно совершенно не вызывает... Ты можешь свой оригинал утопить в унитазе, я тебе перевожу дословно, что имел ввиду автор. Все остальные слюни про идеоматическую дурь поскипал. Иди учись с букварём в первый класс. sphinx_mvНу-ну... Поспорьте с Фаулером... Можно еще Теда Ньюарда (Ted Neward) с его "Вьетнамом компьютерных наук" (The Vietnam of Computer Science) поопровергать... (запасаюсь попкорном, чипсами и пивом) Я буду долго смеяться над твоим детским простодушием, причем тут Фаулер? Никак нагуглил в своей википедии буковки известного чревовещателя и закатил нос кверху? Смешно, ей богу. Покажи мне место, в котором Мартин говорит об ORM плохо. Закупил пепсиколы с бубликами, готов читать твой унылый визг души. sphinx_mvСоотвественно, правильный (во всех смыслах) перевод этого абзаца звучит именно так: Мы должны смириться с мыслью о том, что ORM являются плохими, уродливыми и перегруженными. Соотвественно, правильный (во всех смыслах) перевод этого абзаца звучит именно так: Мы должны отказаться от мысли, что ORM плохо, уродливо или мертво. Для решения проблем имеется много различных вариантов для этого. Но прежде чем мы рассмотрим эти варианты, давайте посмотрим на эту проблему с конкретики. ... sphinx_mvОжидаемо... Говоришь блондинке "дура", а от нее в ответ "зато красивая" - но, хоть бы раз перед этим она в зеркало глянула... Ничего удивительного - блондинка скопипастила изкаверканные слова чревовещателей правды матки и гнёт тупую ламерскую линию. Обычный быдлоподход неудачника. sphinx_mvФаулер сказал... Богард сказал... Ньюард сказал... А МСУ все еще пыркается из говна конфеты делать... С другой строны, чего еще от "золотаря информационных технологий" ожидать?! Что Фаулер сказал? Что Богард сказал? Я катаюсь пополу от твоего тугодумия. Почитай лучше Application Architecture Guide, над которым трудились десятки умов и свопили все знания в этот букварь, а не кривые переводы сюда пость. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 23:09 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77с тобой не о чем разговаривать, ты даже не можешь проследить две линии обсуждения, и почитать еще раз чуть выше над словом "аналогично" Ты путаешься в показаниях, я тебя ловлю уже не в первый раз на этом. И тут ты выпаливаешь, что со мной не о чем разговаривать. Алес капут епта. 17-77в моем случае считывание структуры БД занимало продолжительно-раздражающее время Ты мог написать, что в твоем случае считывание структуры БД занимало месяц. И что? Ты так же не привел доказательств об утечках памяти. Что из этого следует? Правльно, ты очередная codemonkey-врунишка. 17-77забывчивый ты наш, до этого уже разобрали случаи обновления и пересоздания Да у тебя уже в кашу всё смешалось, кони, люди. 17-77а, вот оно что, тебе DB-разработчик попу подтирал, ясно теперь, ну вот спроси у него сколько времени заняла разработка структуры БД и включи это время в общее время для database-first подхода Я без него сам тебе скажу о трудозатратах. Я их уже озвучивал и говорил о плюсах дизайнера + автоапдейт. 17-77тупой и еще тупее, читаем ниже до полного понимания Опять ты заднюю включаешь. И дурака тоже. 17-77само название "database-first" предполагает, что сначала надо создать базу xDD Не поверишь, code-first тоже без базы работать не будет. 17-77ого, окей, давай досвидания Какой-то дешевый слив... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 23:23 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУsphinx_mvМатериал Вами (как обычно) не прочитан... А если и прочитан, то (тоже как обычно) совершенно не понят... Ты не можешь не то, что понять этот материал, ты даже не можешь идею материала вменяемо донести. Одно хлюпанье. С какого перепоя Вы решили, что я что-то должен Вам "вменяемо доносить"?! Ссылки были даны! Вам прочитать и понять материал самостоятельно мозгов не хватает? Ну, а я-то тут при чем?! Лектором или репетитором лично к Вам я не нанимался... МСУsphinx_mvБыло бы это смешно - можно было бы и поржать, но, к ОЧЕНЬ большому сожалению, то что у Вас проблемы с чтением "языка оригинала" даже со словарем - давно задокументировано. И смех это уже давно совершенно не вызывает... Ты можешь свой оригинал утопить в унитазе, я тебе перевожу дословно, что имел ввиду автор. Все остальные слюни про идеоматическую дурь поскипал. Иди учись с букварём в первый класс. С Вашим-то знанием "дословного" перевода только программированием заниматься... Ага... На "переводе со словарем" даже первокласник лучше Вас бы справился... МСУsphinx_mvНу-ну... Поспорьте с Фаулером... Можно еще Теда Ньюарда (Ted Neward) с его "Вьетнамом компьютерных наук" (The Vietnam of Computer Science) поопровергать... (запасаюсь попкорном, чипсами и пивом) Я буду долго смеяться над твоим детским простодушием, причем тут Фаулер? Никак нагуглил в своей википедии буковки известного чревовещателя и закатил нос кверху? Смешно, ей богу. Покажи мне место, в котором Мартин говорит об ORM плохо. Закупил пепсиколы с бубликами, готов читать твой унылый визг души.Ну, идите давитесь бубликами, топитесь в коле, стреляйтесь из веника или вешайтесь на шнуре от мышки: ФаулерListening to some critics, you'd think that the best thing for a modern software developer to do is roll their own ORM. The implication is that tools like Hibernate and Active Record have just become bloatware, so you should come up with your own lightweight alternative. Now I've spent many an hour griping at bloatware, but ORMs really don't fit the bill - and I say this with bitter memory . For much of the 90's I saw project after project deal with the object/relational mapping problem by writing their own framework - it was always much tougher than people imagined. Usually you'd get enough early success to commit deeply to the framework and only after a while did you realize you were in a quagmire - this is where I sympathize greatly with Ted Neward's famous quote that object-relational mapping is the Vietnam of Computer Science[1].Продолжить? Не вопрос: ФаулерMany people treat the relational database "like a crazy aunt who's shut up in an attic and whom nobody wants to talk about"[3]. In this world-view they just want to deal with in-memory data-structures and let the ORM deal with the database. This way of thinking can work for small applications and loads, but it soon falls apart once the going gets tough. Essentially the ORM can handle about 80-90% of the mapping problems , but that last chunk always needs careful work by somebody who really understands how a relational database works .Могу еще добавить: ФаулерMapping to a relational database involves lots of repetitive, boiler-plate code. A framework that allows me to avoid 80% of that is worthwhile even if it is only 80%. The problem is in me for pretending it's 100% when it isn't. David Heinemeier Hansson, of Active Record fame, has always argued that if you are writing an application backed by a relational database you should damn well know how a relational database works .Специально для альтернативноодаренных выделено болдом и цветом... Свой вариант перевода не привожу принципиально - кое-кому практика хотя бы со словарем не помешает. МСУsphinx_mvСоотвественно, правильный (во всех смыслах) перевод этого абзаца звучит именно так: Мы должны смириться с мыслью о том, что ORM являются плохими, уродливыми и перегруженными. Соотвественно, правильный (во всех смыслах) перевод этого абзаца звучит именно так: Мы должны отказаться от мысли, что ORM плохо, уродливо или мертво. Для решения проблем имеется много различных вариантов для этого. Но прежде чем мы рассмотрим эти варианты, давайте посмотрим на эту проблему с конкретики. ... Словарь и грамматику в зубы - и марш на чердак учиться, учиться и учиться... МСУsphinx_mvОжидаемо... Говоришь блондинке "дура", а от нее в ответ "зато красивая" - но, хоть бы раз перед этим она в зеркало глянула... Ничего удивительного - блондинка скопипастила изкаверканные слова чревовещателей правды матки и гнёт тупую ламерскую линию. Обычный быдлоподход неудачника.Мы уже в курсе, что у не-ламеров обработка данных c использованием ORM выполняется в 10 раз медленнее - "ничего страшного, зато тренд" (c) МСУsphinx_mvФаулер сказал... Богард сказал... Ньюард сказал... А МСУ все еще пыркается из говна конфеты делать... С другой строны, чего еще от "золотаря информационных технологий" ожидать?!Что Фаулер сказал? Что Богард сказал? Я катаюсь пополу от твоего тугодумия.У Вас проблемы с восприятием информации, и при этом угодум - кто-то другой? МСУПочитай лучше Application Architecture Guide, над которым трудились десятки умов и свопили все знания в этот букварь, а не кривые переводы сюда пость.Дешевый ламерский бред... Для начала, Вам сюда ... Если "заблудитесь" - раздел Hystory, список самых известных книг по тематике, п.4... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 01:10 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
17-77Алексей КДля других задач. хм, интересно и для каких?Строгая типизация данных. Генерация SQL. 17-77Алексей КНет, оптимизация. все не так однозначно, ORM является абстракцией, и если в этой абстракции отсутствует проверка на ограничение длины запроса для некой БД - это будет именно костылем, чтобы исправить ситуацию, которой не должно было быть, по правильному - ORM должна сама определить по типу БД максимальную длину запроса и организовать операцию так, чтобы не превысить это значениеВы слишком многово хотите. Непонятно, причём тут проверка на максимальную длину батча, ну да ладно. :-) 17-77Алексей КДа я не про это. Странно, что приходится производить масштабные изменения данных, уже хранящихся в БД. Масштабная вставка - да, но не масштабные изменения. Впрочем, Вам виднее. так не очень понятно как вы предлагаете решить задачу в глобальном смысле? т.е. тут даже говорится о том, что средствами СУБД, внутри самой базы масштабно обновлять данные - есть плохо?Вроде как БД не умеет проверять валидность ссылок. Так что "внутри БД" не получится. 17-77ну а если надо? конкретно задача проверки ссылок URL, ссылки хранятся в базе, ссылка сегодня работает, завтра нет, надо их регулярно проверять, вопрос об адекватности требований заказчика / пользователя оставим в сторонеНу надо так надо, проблем не вижу. Да, EF не умеет делать пакетные обновления. Надо или взять другой ORM, или написать SQL вручную. Иногда можно, не так часто это приходится делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 05:50 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvАлексей Кпропущено... В обоих статьях про LINQ ни слова. Почему?Потому, что LINQ непосредственного отношения к ORM не имеет.Да?! Expression Tree лежит в основе генерации SQL. Есть смысл сначала ознакомиться с теорией... sphinx_mvЭто встроенный язык запросов к объектам, реализующим на .NET (и только!) интерфейсы IEnumerable и IEnumerable<T>Таки IQueryable<T> ? Мы ведь говорим о LINQ-to-SQL а не LINQ-to-Object, не так ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 05:56 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvЭто встроенный язык запросов к объектам, реализующим на .NET (и только!) интерфейсы IEnumerable и IEnumerable<T> Вот немного по теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 06:04 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей Кsphinx_mvпропущено... Потому, что LINQ непосредственного отношения к ORM не имеет.Да?! Expression Tree лежит в основе генерации SQL. Есть смысл сначала ознакомиться с теорией... sphinx_mvЭто встроенный язык запросов к объектам, реализующим на .NET (и только!) интерфейсы IEnumerable и IEnumerable<T>Таки IQueryable<T> ? Мы ведь говорим о LINQ-to-SQL а не LINQ-to-Object, не так ли? Он не знает, что такое Expression Tree :) Он так же не понимает разницы L2S и объектного линка :) Неуч, кули с него еще взять. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 10:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУОн не знает, что такое Expression Tree :)"Меньше знаеш - крепче спиш" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 11:32 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КМСУОн не знает, что такое Expression Tree :)"Меньше знаеш - крепче спиш" (с) Так не спит ведь codemonkey, что-то шумит, доказывает, чушь какую-то постит с левыми переводами. Неугомонная кодирующая обезьянка? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 11:34 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей Кsphinx_mvпропущено... Потому, что LINQ непосредственного отношения к ORM не имеет.Да?! Expression Tree лежит в основе генерации SQL. Есть смысл сначала ознакомиться с теорией... Может, не будете уподобляться местному "неадеквату"? "Звезды говорят" (с), что LINQ никакого непосредственного отношения к генерации SQL не имеет. Это - встроенное в платформу расширение для запросов к "in-memory" данным. Как эти данные попали "in memory" - совершенно отдельный вопрос. Алексей Кsphinx_mvЭто встроенный язык запросов к объектам, реализующим на .NET (и только!) интерфейсы IEnumerable и IEnumerable<T>Таки IQueryable<T> ? Мы ведь говорим о LINQ-to-SQL а не LINQ-to-Object, не так ли? Это ВЫ (и СЕЙЧАС ) говорите про LINQ-to-SQL, с местом которого в общей инфраструктуре LINQ можно ознакомиться здесь А вот для LINQ (и не только "-to-Object" ) таки "необходимо и достаточно" реализованных интерфейсов IEnumerable или IEnumerable<T>. И получить соотвествующие коллекции можно ЛЮБЫМ способом - в том числе не только БЕЗ использования ORM, но даже вообще без SQL-источников данных... "Хотите получить точный ответ - задавайте точный вопрос" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 12:55 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvАлексей Кпропущено... Да?! Expression Tree лежит в основе генерации SQL. Есть смысл сначала ознакомиться с теорией... Может, не будете уподобляться местному "неадеквату"? "Звезды говорят" (с), что LINQ никакого непосредственного отношения к генерации SQL не имеет. Это - встроенное в платформу расширение для запросов к "in-memory" данным. Как эти данные попали "in memory" - совершенно отдельный вопрос. Твоя дурь в безумной башке просто радует. Надень очки и читай, наконец: LINQ to ObjectsIncludes links to topics that explain how to use LINQ to Objects to access in-memory data structures LINQ to ADO.NETProvides an entry point for documentation about LINQ to DataSet, LINQ to SQL, and LINQ to Entities. LINQ to DataSet enables you to build richer query capabilities into DataSet by using the same query functionality that is available for other data sources. LINQ to SQL provides a run-time infrastructure for managing relational data as objects. LINQ to Entities enables developers to write queries against the Entity Framework conceptual model by using Visual Basic or Visual C#. Зубрить до посинения, codemonkey: http://msdn.microsoft.com/ru-ru/library/bb386976.aspx LINQ to SQLРеляционные данные отображаются в виде коллекции двумерных таблиц (отношений или плоских файлов),где общие столбцы связывают таблицы друг с другом.Для эффективного использования LINQ to SQL необходимо ознакомиться с основными принципами реляционных баз данных. В LINQ to SQL модель данных реляционной базы данных сопоставляется объектной модели, выраженной в языке программирования разработчика.При запуске приложения LINQ to SQL преобразует запросы LINQ из объектной модели в SQL и отправляет их в базу данных для выполнения. Когда база данных возвращает результаты, LINQ to SQL преобразует их обратно в объекты, с которыми можно работать на собственном языке программирования. LINQ to SQLПользователи среды Visual Studio, как правило, пользуются конструктором Реляционный конструктор объектов, который предоставляет пользовательский интерфейс для реализации многих функций LINQ to SQL. Документация, включенная в эту версию LINQ to SQL, описывает основные строительные блоки, процессы и методики, необходимые для построения приложений LINQ to SQL.Можно также поискать в библиотеке MSDN конкретные вопросы и принять участие в форуме LINQ Forum, где можно подробно обсудить со специалистами более сложные вопросы.Наконец, в техническом документе LINQ to SQL: запросы LINQ .NET для реляционных данных (на английском языке) подробно описывается технология LINQ to SQL и приводятся примеры кода на языках Visual Basic и C# http://msdn.microsoft.com/ru-ru/library/bb399398(VS.90).aspx Приступая к работе (LINQ to SQL)С помощью LINQ to SQL можно использовать технологию LINQ для доступа к базам данных SQL тем же образом, что и к коллекции в памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:02 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К Лёня, мне нарвится этот чудик - ляпнул глупость, потом погуглил еще разок про LINQ, а теперь убого выкручивается из нелепой ситуации ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:12 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУэто универсальные механизмы прям вундервафля какая-то. универсальные механизмы это конечно здорово, но совершенне универсальных механизмов. к тому же за универсальность надо платить высокую цену. С лёгкого слова Теда Ньюарда про "Вьетнам" : "легко войти и трудно выйти". особенно доставил Left Join 11179149 представил себе как это будет выглядеть с 5 left. а store procudure. а ну да, костылёк. и вообще похожая тема есть там же "ORM vs sql" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:14 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
пропало словоbeg-in-erуниверсальные механизмы это конечно здорово, но жизнь совершенне универсальных механизмов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:18 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvАлексей Кпропущено... Да?! Expression Tree лежит в основе генерации SQL. Есть смысл сначала ознакомиться с теорией... Может, не будете уподобляться местному "неадеквату"? "Звезды говорят" (с), что LINQ никакого непосредственного отношения к генерации SQL не имеет. Это - встроенное в платформу расширение для запросов к "in-memory" данным. Как эти данные попали "in memory" - совершенно отдельный вопрос. Алексей Кпропущено... Таки IQueryable<T> ? Мы ведь говорим о LINQ-to-SQL а не LINQ-to-Object, не так ли? Это ВЫ (и СЕЙЧАС ) говорите про LINQ-to-SQL, с местом которого в общей инфраструктуре LINQ можно ознакомиться здесь А вот для LINQ (и не только "-to-Object" ) таки "необходимо и достаточно" реализованных интерфейсов IEnumerable или IEnumerable<T>. И получить соотвествующие коллекции можно ЛЮБЫМ способом - в том числе не только БЕЗ использования ORM, но даже вообще без SQL-источников данных... "Хотите получить точный ответ - задавайте точный вопрос" (с)МСУ уже ответил. Больше добавить нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:25 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУАлексей К Лёня, мне нарвится этот чудик - ляпнул глупость, потом погуглил еще разок про LINQ, а теперь убого выкручивается из нелепой ситуации Видимо коллега мало работал с дотнетом. Ему простительно. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:27 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
beg-in-erпропало словоbeg-in-erуниверсальные механизмы это конечно здорово, но жизнь совершенне универсальных механизмов."Жизнь" на 90% состоит из рутины, которая автоматизируется с помощью ORM в том числе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
beg-in-erуниверсальные механизмы это конечно здорово, но жизнь совершенне универсальных механизмов. И что дальше? beg-in-erособенно доставил Left Join 11179149 представил себе как это будет выглядеть с 5 left. а store procudure. а ну да, костылёк. Это не просто LEFT JOIN, это LEFT JOIN с замороченной сцепкой: Код: sql 1.
Во-вторых, выглядеть с 5 объединениями на LINQ он будет вполне нормально. Тебя пугает синтаксис от его непонимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:29 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
beg-in-erособенно доставил Left Join 11179149 представил себе как это будет выглядеть с 5 left. а store procudure. а ну да, костылёк.Чтобы вручную не писать join-ы в EF (и не только) придуманы ассоциации. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 13:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей К"Жизнь" на 90% состоит из рутины, которая автоматизируется с помощью ORM в том числе. и получается разношёрстное решение.хотя это дело выбора. а проблемы возникают тогда, когда надо что то сделать , из оставшихся 10%. когда новые задачи идут в разрез с уже сделанным чистым ОРМ решением. побольшому счёту , ОРМ это в первую очередь бизнес-решение. для экономии на SQLщиках. там где не надо много , там мож и прокатит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 14:07 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КnetivanМСУ, разница в том делать тыщу раз (ID=x and ID=x2) OR и так 1000 раз и 10 секунд или делаешь JOIN и получаешь 1 секунду. 1000 простых запросов вида select * from T where X=@x and Y=@y выполняться будут тоже порядка секунды. А то и быстрее, если сетевой пинг позволит + запустить их одновременно асинхронно. зы: Почему данных, с которыми нужно джойнить, нет в базе? Может с архитектурой что-то не так? Часто по производительности бывает выгоднее выполнить сложный запрос в несколько приемов, поджоинив результат предыдущего запроса с данными таблиц БД (или с результатами других запросов). В ХП обычно это реализуется путем сохранения промежуточных данных в табличных переменных или во временных таблицах. Проблема невозможности замэпить сущность EF на временную таблицу решается созданием в БД синонима для временной таблицы Код: sql 1.
и мэппингом сущности на синоним. Результат предыдущего запроса (или любые другие данные в виде коллекции объектов) заливается во временную таблицу через SqlBulkCopy, после чего эти данные можно далее использовать в запросах Linq2Entity. Таким же образом можно использовать для дальнейшего анализа в запросах LINQ данные, полученные в результате исполнения ХП или ExecuteStoreQuery(). В моих разработках я предпочитаю использовать временную таблицу универсальной структуры (несколько Guid-ов, несколько Int-ов и т.д.). Кроме того, в этой таблице есть Id раздела, позволяющий хранить несколько наборов данных. API, развернутое вокруг этой таблицы позволяет описать ее разделы в виде типизированных сущностей, создавать эту таблицу (при этом реально создаются не все возможные, а только описанные в разделах поля + поле Id раздела), заполнять разделы этой таблицы из типизированных коллекций, формировать запросы к разделам в виде IQueryable<TPartitionEntity>, где TPartitionEntity - тип сущности, связанный с разделом. Этот подход позволяет в ряде случаев во много раз ускорить сложные расчеты, аналогично разбиению сложных T-SQL на несколько более простых в ХП, но при этом реализовывать бизнес-логику через типизированные запросы LINQ. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 14:53 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей Кsphinx_mvпропущено... Может, не будете уподобляться местному "неадеквату"? "Звезды говорят" (с), что LINQ никакого непосредственного отношения к генерации SQL не имеет. Это - встроенное в платформу расширение для запросов к "in-memory" данным. Как эти данные попали "in memory" - совершенно отдельный вопрос. пропущено... Это ВЫ (и СЕЙЧАС ) говорите про LINQ-to-SQL, с местом которого в общей инфраструктуре LINQ можно ознакомиться здесь А вот для LINQ (и не только "-to-Object" ) таки "необходимо и достаточно" реализованных интерфейсов IEnumerable или IEnumerable<T>. И получить соотвествующие коллекции можно ЛЮБЫМ способом - в том числе не только БЕЗ использования ORM, но даже вообще без SQL-источников данных... "Хотите получить точный ответ - задавайте точный вопрос" (с)МСУ уже ответил. Больше добавить нечего. ТАК И У ВАС LINQ и LINQ-to-SQL - одно и то же?! Афигеть! Дайте две! А еще луше - три... PS. В-общем, ишшо один "гуру" в "Hall of Fame" ламеризма затесался... Итого, два сапога - пара: МСУ и Алексей К Первый документацию читать не научился - даже до уровня знакомых "букаф"... Второй пишет одно, подразумевает второе, думает про третье - и тоже документацию не читает с теми же претензиями на всезнание... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 15:22 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvТАК И У ВАС LINQ и LINQ-to-SQL - одно и то же?! Афигеть! Дайте две! А еще луше - три... Судя по: "Language-Integrated Query (LINQ) is a set of features introduced in Visual Studio 2008 that extends powerful query capabilities to the language syntax of C# and Visual Basic. LINQ introduces standard, easily-learned patterns for querying and updating data, and the technology can be extended to support potentially any kind of data store. Visual Studio includes LINQ provider assemblies that enable the use of LINQ with .NET Framework collections, SQL Server databases, ADO.NET Datasets, and XML documents." разве LINQ-to-SQL не является одной из разновидностей LINQ и реализуется при помощи соответствующего провайдера? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 15:36 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Lexxxxxразве LINQ-to-SQL не является одной из разновидностей LINQ и реализуется при помощи соответствующего провайдера? спичь о том , что LINQ к SQL не имеет отношения. а точнее не зависит от SQL 13574572 . LINQ это самостоятельный механизм генерации. и в зависимости от контекста , он генерит то SQL-код, то другую управляющюю последовательность. ведь к простому массиву SQL-запрос нах не нужен. Where просто превратится в управляющую последовательность "языка" C#. Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
если кто то хочет генерить SQL код для поиска в памяти - ну флаг ему в руки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 16:04 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Lexxxxxsphinx_mvТАК И У ВАС LINQ и LINQ-to-SQL - одно и то же?! Афигеть! Дайте две! А еще луше - три... Судя по: "Language-Integrated Query (LINQ) is a set of features introduced in Visual Studio 2008 that extends powerful query capabilities to the language syntax of C# and Visual Basic. LINQ introduces standard, easily-learned patterns for querying and updating data, and the technology can be extended to support potentially any kind of data store. Visual Studio includes LINQ provider assemblies that enable the use of LINQ with .NET Framework collections, SQL Server databases, ADO.NET Datasets, and XML documents." разве LINQ-to-SQL не является одной из разновидностей LINQ и реализуется при помощи соответствующего провайдера?Все правильно! Только наличие "одинакового интерфейса" совершенно не означает что имеем дело с одним и тем же... Когда Вы пишете (дословно!) "LINQ" (что по всем раскладкам тождественно нечто "общее", "any kind of data store", etc.), при этом подразумевая "LINQ-to-SQL" (как ни выкручивайся ужом на сковородке, но это "частное решение" непосредственно для SQL), претензии на "непонимание" совершенно не уместны: хрустальный шар и телепатия - весьма необщедоступные "фичи", а если кому они и доступны, применять их не обязаны... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 16:05 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
beg-in-erесли кто то хочет генерить SQL код для поиска в памяти - ну флаг ему в руки. Интересно, что нагенерит вот это: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 16:10 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvКогда Вы пишете (дословно!) "LINQ" (что по всем раскладкам тождественно нечто "общее", "any kind of data store", etc.), при этом подразумевая "LINQ-to-SQL" (как ни выкручивайся ужом на сковородке, но это "частное решение" непосредственно для SQL), претензии на "непонимание" совершенно не уместны: хрустальный шар и телепатия - весьма необщедоступные "фичи", а если кому они и доступны, применять их не обязаны... Ржунимагу, выкручивается как угорь в кастрюле Твои слова: "Потому, что LINQ непосредственного отношения к ORM не имеет." (c) Ну-как расскажи, про какой LINQ ты "имел ввиду"? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 16:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
sphinx_mvПотому, что LINQ непосредственного отношения к ORM не имеет. Так мог сказать только ламер, не понимающий как работаю ORM и что такое LINQ. Entity Framework ADO.NET will LINQ-enable many data access components: LINQ to SQL, LINQ to DataSet and LINQ to Entities LINQ - это язык доступа к данным. Как это LINQ непосредственного отношения к ORM не имеет? Ты сдурел? А про linq to nhibernate что скажешь? Тоже не имеет? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 16:38 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
тук тук ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 22:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУsphinx_mvпропущено... ТАК И У ВАС LINQ и LINQ-to-SQL - одно и то же?! Афигеть! Дайте две! А еще луше - три... Linq to SQL - это LINQ точно так же, как и Linq to Objects это тоже LINQ. Еще раз, твои слова: sphinx_mvПотому, что LINQ непосредственного отношения к ORM не имеет. Это встроенный язык запросов к объектам, реализующим на .NET (и только!) интерфейсы IEnumerable и IEnumerable<T> Ты так же не говорил, о каком LINQ речь, о Objects или SQL. Следовательно, ты тупо даже не знал о существовании разновидностей LINQ. Правда потом, когда погуглил, ты понял, что обосрался и начал заниматься болтологией с игрой слов, мол что ты имел ввиду это, а не то. Бугага Людей, знающих про LINQ, на планете стало на один больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 06:37 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
beg-in-erАлексей К"Жизнь" на 90% состоит из рутины, которая автоматизируется с помощью ORM в том числе. и получается разношёрстное решение.хотя это дело выбора. а проблемы возникают тогда, когда надо что то сделать , из оставшихся 10%. когда новые задачи идут в разрез с уже сделанным чистым ОРМ решением.Бытует мнение, что идеального решения не существует. Чисто SQL-решение, что не удивительно, тоже имеет свои недостатки. ORM + сервер приложений призваны их устранить. beg-in-erпобольшому счёту , ОРМ это в первую очередь бизнес-решение. для экономии на SQLщиках. там где не надо много , там мож и прокатит.Программист, пишущий обращения к БД через ORM, должен знать SQL как "отче наш". ORM - это автоматизация написания SQL-запросов, не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 12:28 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУLINQ - это язык доступа к данным. Как это LINQ непосредственного отношения к ORM не имеет? Ну, я могу использовать LINQ to SQL, без ORM. Полагаю, что есть разработки ORM без LINQ. Согласись, что LINQ to Entities не умеет вызывать хранимые процедуры ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 19:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2, авторСогласись, что LINQ to Entities не умеет вызывать хранимые процедуры да с утра вызывал вроде ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 19:48 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей КБытует мнение, что идеального решения не существует. Чисто SQL-решение, что не удивительно, тоже имеет свои недостатки. ORM + сервер приложений призваны их устранить. ... Программист, пишущий обращения к БД через ORM, должен знать SQL как "отче наш". ORM - это автоматизация написания SQL-запросов, не более того. Так его и не существует, как априори не существует ничего идеального. ... Я полагаю, что это не автоматизация, а попытка снять-понизить барьер для вхождения в БД для начинающих программистов. Программистам "небаз" дико видеть в коде текстовые строки, которые должны выполнятся где-то там. Программисты баз к этому давно привыкли. Я полагаю, что ORM полновестно сможет работать тогда, когда базы будут изначально заточены на его использование. Пока это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 19:57 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
netivanCat2, авторСогласись, что LINQ to Entities не умеет вызывать хранимые процедуры да с утра вызывал вроде В LINQ to Entities ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 19:57 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2МСУLINQ - это язык доступа к данным. Как это LINQ непосредственного отношения к ORM не имеет? Ну, я могу использовать LINQ to SQL, без ORM. Полагаю, что есть разработки ORM без LINQ. Согласись, что LINQ to Entities не умеет вызывать хранимые процедуры 1. Linq 2 SQL, вообще-то, и есть ORM :) Как можно использовать ORM без ORM, расскажи? 2. Почему EF не умеет вызывать хранимые процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 21:45 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Программистам "небаз" дико видеть в коде текстовые строки, которые должны выполнятся где-то там. Программисты баз к этому давно привыкли. Я полагаю, что ORM полновестно сможет работать тогда, когда базы будут изначально заточены на его использование. Пока это не так. Кобол - наше всио ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 22:52 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Cat2Я полагаю, что это не автоматизация, а попытка снять-понизить барьер для вхождения в БД для начинающих программистов. Это не самоцель, а лишь одно из преимуществ ORM. Cat2Я полагаю, что ORM полновестно сможет работать тогда, когда базы будут изначально заточены на его использование. Пока это не так. Базы ничего не знают и не должны знать об ORM. В свою очередь, ORM должны знать всё о базах. Единая точка входа ПО для работы с базой - ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 23:11 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
МСУБазы ничего не знают и не должны знать об ORM это не есть хорошо. ORM - в нынешнем виде костыль. Если ORM так хорош - где СУБД, где ORM API является нативным? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 23:31 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
Алексей Кbeg-in-erпропущено... и получается разношёрстное решение.хотя это дело выбора. а проблемы возникают тогда, когда надо что то сделать , из оставшихся 10%. когда новые задачи идут в разрез с уже сделанным чистым ОРМ решением.Бытует мнение, что идеального решения не существует. Чисто SQL-решение, что не удивительно, тоже имеет свои недостатки. ORM + сервер приложений призваны их устранить. Забудем на время, что применение ORM в обоих случаях совершенно перпендикулярно... И вспомним, что даже "чистое SQL-решение" (которое может быть очень даже не "чистым") справляется с любой нагрузкой, от которой давно сдохнет самый правильный сервер приложений. Т.е., сервер приложений - лишний. Совсем. Алексей Кbeg-in-erпобольшому счёту , ОРМ это в первую очередь бизнес-решение. для экономии на SQLщиках. там где не надо много , там мож и прокатит.Программист, пишущий обращения к БД через ORM, должен знать SQL как "отче наш".Да-да... Это бы вложить в мозги "крутых ORMщиков", которые не только не знают (и не особо хотят знать SQL), но и даже не имеют вменяемого представления о базовых механизмах работы с данными и их местом во фреймворке... Алексей КORM - это автоматизация написания SQL-запросов, не более того.Угу... Типа, если доступ к реляционным данным идет не через SQL, то это уже и работать не будет... ISAM, тот же текст с разделителями, etc... ORM представляет собой методику отображения реляционной модели данных на объектную модель приложения (и обратно) - что к автоматизации написания запросов совершенно не стояло, не стоит и (в обозримом будущем) не будет стоять ни каким боком. Только вместо запросов и манипуляций с данными в БД пишутся запросы и манипуляции с объектами в программе - другая точка приложения усилий. Обеспечение функционала обмена данными между программными объектами и базой данных при этом никто не отменял - соответственно, общий объем и сложность приложения только увеличивается от этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 23:39 |
|
Организация запросов из десктопного клиента к субд
|
|||
---|---|---|---|
#18+
ИзопропилМСУБазы ничего не знают и не должны знать об ORM это не есть хорошо. ORM - в нынешнем виде костыль. Если ORM так хорош - где СУБД, где ORM API является нативным?Вообще-то, есть такие... Если исключить из рассмотрения NoSQL-варианты (OODB и прочие), оставив только имеющие отношение к "реляционным" - как минимум, Informix, DB2, Oracle... Запросы к этим СУБД могут давать "на выходе" данные объектного вида, тривиальным образом ("один-в-один") отображающиеся в классы в языках программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 23:53 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1405536]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
401ms |
get tp. blocked users: |
2ms |
others: | 320ms |
total: | 803ms |
0 / 0 |