|
|
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
casmithПри изменении процедуры на сервере (в одном месте) все клиенты автоматически работают по новой/измененной логике. Особенно когда у процедуры меняется список параметров. casmithВ случае хранения запросов на клиенте придется на всех рабочих местах менять клиентскую часть. А именно после коннекта скачать из той же базы последнюю версию dll-ки. Тогда уж давайте и в минусы процедурного подхода : ради наката тривиального патча приходится выгонять из системы пользователей либо рисковать нарушением целостности БД. В случае Oracle возникают дополнительные проблемы с инвалидацией серверного кода и состоянием переменных в пакетах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 14:42 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > Тогда уж давайте и *в минусы процедурного подхода*: ради наката > тривиального патча приходится выгонять из системы пользователей либо > рисковать нарушением целостности БД. В случае Oracle возникают > дополнительные проблемы с инвалидацией серверного кода и состоянием > переменных в пакетах. С другой стороны - я имею возможность ГАРАНТИРОВАНО накатить патч, пусть даже отрубанием всех юзеров. Юзер подключится заново - и всё работает правильно. А если надо ему еще клиента нового спихнуть - возможны варианты :-). Кроме того, поясните мне, почему в случае обновления функционала "документ А", я должен ВСЕМ раздавать нового клиента? Даже тем, кто про данный документ не знает? Или - дробить клиента на милипусенькие кусочки? и нафига мне такой гемор? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 15:30 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
lockyС другой стороны - я имею возможность ГАРАНТИРОВАНО накатить патч, пусть даже отрубанием всех юзеров. Юзер подключится заново - и всё работает правильно. А если надо ему еще клиента нового спихнуть - возможны варианты :-) Поддержу. Проще обновить в одном месте, чем во многих. softwarerТогда уж давайте и в минусы процедурного подхода: ради наката тривиального патча приходится выгонять из системы пользователей либо рисковать нарушением целостности БД. Т.е. если у нас функционал в клиентских dll-ках пользователей выгонять не надо ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 15:42 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
lockyС другой стороны - я имею возможность ГАРАНТИРОВАНО накатить патч, пусть даже отрубанием всех юзеров. Эта возможность есть всегда. А вот отрубание юзеров без необходимости - довольно паршивое занятие. Разумеется, где-то проблем нет, но где-то и очень неприятно. lockyЮзер подключится заново - и всё работает правильно. А если надо ему еще клиента нового спихнуть - возможны варианты :-) Поскольку ХП вовсе не избавляют от "еще клиента нового спихнуть" - разницы немного. lockyКроме того, поясните мне, почему в случае обновления функционала "документ А", я должен ВСЕМ раздавать нового клиента? Даже тем, кто про данный документ не знает? Кто Вам сказал такую глупость? Это был не я. lockyИли - дробить клиента на милипусенькие кусочки? и нафига мне такой гемор? Для достаточно большого приложения дробить на функциональные модули - практически технологическая необходимость. На одной из моих работ этому очень долго сопротивлялись, и я наглядно наблюдал эффективность различных вариантов. После того, как мне наконец удалось в одном проекте пропихнуть правильную с моей точки зрения технологию, и начальство увидело разницу - все следующие проекты делались именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 15:50 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovТ.е. если у нас функционал в клиентских dll-ках пользователей выгонять не надо ? Чаще всего не надо. Отмечу, что я не слишком согласен с употреблением здесь слова "функционал". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 15:55 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > locky > Юзер подключится заново - и всё работает правильно. А если надо ему еще > клиента нового спихнуть - возможны варианты :-) > > Поскольку ХП вовсе не избавляют от "еще клиента нового спихнуть" - > разницы немного. При неизменной декларации входных-выходных параметров - избавляет. Меняется только функциональный код. Новый клиент - не нужен. > > locky > Или - дробить клиента на милипусенькие кусочки? и нафига мне такой гемор? > > Для достаточно большого приложения дробить на функциональные модули - > практически технологическая необходимость. На одной из моих работ этому > очень долго сопротивлялись, и я наглядно наблюдал эффективность > различных вариантов. После того, как мне наконец удалось в одном проекте > пропихнуть правильную с моей точки зрения технологию, и начальство > увидело разницу - все следующие проекты делались именно так. Согласен. Дробить. До какого предела? чтобы при обновление выбора списка документов в "документе а" не надо было раздавать клиента. Выносим "грид списка документов" в отдельный длл, его динамически выгружаем/загружаем? Не шибко сложно? зы у меня ок. 400 типов документов благополучно живут в одном унифицированном интерфейсе. за 1.5 года при изменении функционала документов ни разу не понадобилось обновлять клиента - всё укладывалось на серваке. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 15:55 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
lockyПри неизменной декларации входных-выходных параметров - избавляет. Не совсем точно, но в целом соглашусь. Именно. При подходе "все на ХП" это требование чаще всего не выполняется. При подходе "разумного использования ХП" это требование чаще всего выполняется. Давайте рассмотрим два примера изменений: добавление в таблицу нового малозначимого поля (например, "комментарий") и изменение например логики учета какого-то документа. В случае "все на ХП" первый пример требует изменения таблицы на сервере, ХП на сервере (включая параметры 1 ) и изменения клиента. Второй пример требует изменения ХП на сервере, скорее всего без изменения параметров. В случае "часть sql-кода на клиенте" первый пример требует изменения таблицы на сервере и изменения клиента. Второй пример - как и в предыдущем случае, ХП на сервере. Таким образом, в случае "часть sql-кода на клиенте" оба патча могут быть сделаны на живой базе. В случае "все на ХП" первый из них потребует выгонять пользователей. Другой разницы между примерами нет. lockyСогласен. Дробить. До какого предела? Думаю, здесь невозможно сформулировать простое и универсальное правило. По сути, этот вопрос эквивалентен вопросу "что есть модуль", да и в целом вопрос - на поиск нечеткой границы. С моей точки зрения, критерий классический: набор функций, которые чаще всего используются совместно, тесно связаны друг с другом и относительно слабо связаны с другими функциями приложения. На практике оказывается, что такое разбиение в целом соответствует объектам раздачи прав [не знаю, как бы это удачно сформулировать]; если в администрировании предусмотрены элементарные роли A, Б и В (элементарные - то есть не содержащие других ролей), то разбиение на А.dll, Б.dll и В.dll в большинстве случаев будет неплохим выбором. Разумеется, есть детали - например, права на редактирование справочников идут отдельно, но общий принцип в целом такой. lockyзы у меня ок. 400 типов документов благополучно живут в одном унифицированном интерфейсе. за 1.5 года при изменении функционала документов ни разу не понадобилось обновлять клиента - всё укладывалось на серваке. Скажем так, для тех решений такого рода, которые я видел и щупал, качество меня не устраивало. Либо в части результата (откровенно убогие формы) либо в части сложности движка, удобства разработки этих форм итп. Но это уже переход к отдельной теме, которая много раз обсуждалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:19 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
lockyзы у меня ок. 400 типов документов благополучно живут в одном унифицированном интерфейсе . за 1.5 года при изменении функционала документов ни разу не понадобилось обновлять клиента - всё укладывалось на серваке.У Вас условно-тонкий клиент (я позволю себе ввести такой термин :-)) У меня, вероятно, тоже нечто похожее. Но уважаемого sotwarer не удовлетворяет качество конечного продукта при использовании унифицированного подхода, отсюда и весь этот флейм ;-) Хотя, я полагаю, что во всех случаях речь идет о некой технологии, которая, при необходимости, позволяет провести "тонкую" доработку/разработку любым традиционным способом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:21 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
PL99У Вас условно-тонкий клиент (я позволю себе ввести такой термин :-)) Я бы сказал, "серверно-конфигурируемый клиент". На определенном уровне абстракции все то же самое, но существенная количественная разница связана с тем, что обновление клиента требуется при доработке движка, а не при доработке прикладных форм, соответственно происходит много реже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:26 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
2 softwarer Большинство ваших возражений против "все через ХП" выглядят как "всегда есть ситуация, когда без ХП будет ничуть не хуже". И с этим нельзя не согласится. И я полностью согласен с тем, что работа через ХП в принципе не быстрее. Что строить фильтрацию черех них - громоздко и неудобно. Кстати, 2 igorolv авторДело в том, что конструкция "x.ID = @ID or @ID is null" оптимальнее, чем x.ID = isnull(@ID, ID). Так как некоторые оптимизаторы(MSSQL2005) в ДАННОМ КОНКРЕТНОМ случае "подменяют or на union". Вы сами-то проверяли данное утверждение? На 4-5 условиях OR? Или это надежда? :) ИМХО, насколько я помню, декларировалось только, что оптимизатор МОЖЕТ это делать в некоторых случаях) Но вот с последним утверждением я не согласен авторНа практике оказывается, что такое разбиение в целом соответствует объектам раздачи прав [не знаю, как бы это удачно сформулировать]; если в администрировании предусмотрены элементарные роли A, Б и В (элементарные - то есть не содержащие других ролей), то разбиение на А.dll, Б.dll и В.dll в большинстве случаев будет неплохим выбором Элементарное разбиение на права - это в общем случае, может быть разбиение до операций. Т.е. в примере locky - как раз те самые 400 модулей, по документу в модуле. Насколько это оправдано технологически - не мне вам обьяснять. Предположу больше - ХП практически всегда больше, чем функциональных модулей на клиенте. Возможно, вы найдете какой-то хитрое исключение из вашей практике, но это будет именно исключение. Отсюда следует, что изменение одного модуля на клиенте затронет больше функционала. Я вовсе не призываю становится по знамена "все только через ХП". Однако, как мне кажется - в большинстве "обычных" клиент-серверных систем, наиболее эффективным является сведение SQL кода на клиенте к простейшему минимуму. Т.е. выведение любых более-менее сложных запросов либо через ХП, либо через view. Отдельной строкой здесь стоят ИС, поддерживающие различные серверные платформы, но там требования совместимости перевешивают все остальное. Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 16:49 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > PL99 > У Вас условно-тонкий клиент (я позволю себе ввести такой термин :-)) > > > Я бы сказал, "серверно-конфигурируемый клиент". На определенном уровне > абстракции все то же самое, но существенная количественная разница > связана с тем, что обновление клиента требуется при доработке движка, а > не при доработке прикладных форм, соответственно происходит много реже. +1 Да, некоторые документы не слишком "гладко" ложаться на движок, но этим жертвуем в пользу унификации. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:11 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer Alexey KudinovТ.е. если у нас функционал в клиентских dll-ках пользователей выгонять не надо ? Чаще всего не надо. Отмечу, что я не слишком согласен с употреблением здесь слова "функционал". Ну давайте уточнять. Есть некий select, который возвращает сумму А и сумму Б, как 20% от суммы А. Но программист неправильно написал select и Б получается как 2% Вариант 1 - этот select прописан на сервере в ХП Вариант 2 - этот select прописан на клиенте в dll В обоих вариантах этот расчет используют 100 пользователй С моей т.з., для исправления ошибки в варианте 1 пользователей выгонять не обязательно, хотя и не плохо бы. В варианте 2 нужно все 100 выгнать, тем или иным способом обновить всем эту библиотеку и только потом продолжать работу. А как считаете вы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:22 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
aagЭлементарное разбиение на права Мне кажется, Вы не обратили внимание - я говорил не об элементарных правах, а об элементарных ролях. Действительно, если говорить о единичных правах, разбиение легко может получиться мельче, чем было бы оптимально. aag- это в общем случае, может быть разбиение до операций. Т.е. в примере locky - как раз те самые 400 модулей, по документу в модуле. Насколько это оправдано технологически - не мне вам обьяснять. Это оправдано куда как больше, нежели 400 документов в одном exe-шнике ;) При столь подробных входных данных, сами понимаете, трудно судить об оптимуме. В конце концов, документ бывает и бумажкой на одну простую форму, а бывают такие документы, что для их ввода я делал отдельное приложение и писал его три месяца. Если же говорить о технологии... цифра "400 модулей" сама по себе меня совершенно не пугает, модульная технология отлично масштабируется. Просто не приходилось проектировать приложение таких размеров; потребуется - будет интересно. aagОтсюда следует, что изменение одного модуля на клиенте затронет больше функционала. Это несколько бессмысленная фраза, имхо. Для иллюстрации удобно воспользоваться оракловым понятием пакета. Допустим, у нас есть 400 ХП. Мы можем сделать их независимыми, можем сгруппировать, например, в 40 пакетов. Если требуется изменить одну ХП - мы по-прежнему меняем одну ХП. Во втором случае при этом перекомпилируется один пакет (одно тело пакета), что "затрагиванием" можно назвать очень условно, проблем от этого никаких. aagЯ вовсе не призываю становится по знамена "все только через ХП". Однако, как мне кажется - в большинстве "обычных" клиент-серверных систем, наиболее эффективным является сведение SQL кода на клиенте к простейшему минимуму. Т.е. выведение любых более-менее сложных запросов либо через ХП, либо через view. Абсолютно согласен. На клиенте стоит оставлять простые запросы, ну и средства динамического конструирования запросов, в том числе фильтры. aagОтдельной строкой здесь стоят ИС, поддерживающие различные серверные платформы, но там требования совместимости перевешивают все остальное. Мне таких писать не доводилось. В целом есть некое представление о том, как я бы попробовал такое делать, но сугубо теоретическое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 17:29 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovВариант 1 - этот select прописан на сервере в ХП Вариант 2 - этот select прописан на клиенте в dll С моей т.з., для исправления ошибки в варианте 1 пользователей выгонять не обязательно, Тогда мы ставим под угрозу целостность БД. Почему: потому что этот селект может выполняться несколько раз в рамках одной бизнес-операции, одной транзакции. Также транзакция может существенно зависеть от его согласованности с другим элементом серверного кода, корректируемым в том же патче. Насколько мне известно, понятие уровней изоляции обычно не распространяется на ddl, то есть если мы поменяли ХП - начиная с этого мига текущие транзакции начинают использовать новую ХП. Соответственно, состояние данных по завершении транзакции просто непредсказуемо. Здесь я полагаю, что транзакция часто состоит более чем из одной ХП, включая вложенные вызовы. Конечно, если каждая транзакция - это вызов одной ХП, не вызывающей никаких других ХП и триггеров, соображение не действует, но я нетривиальных систем такой архитектуры не видел, а если и увижу, вряд ли назову хорошими. Именно поэтому я полагаю, что выгонять пользователей в этом случае строго обязательно [ну или как минимум - кто-то из ведущих разработчиков, отлично знающий всю систему целиком, должен трижды подумать и торжественно дать зуб, что проблем теоретически не может возникнуть]. Как я упоминал, у Oracle в этом случае есть еще и технические особенности, также стимулирующие такое решение, но это уже его персональные детали, а вот предыдущее соображение, полагаю, универсально. Alexey Kudinovхотя и не плохо бы. В варианте 2 нужно все 100 выгнать, Зачем именно? Безусловной необходимости в этом я не вижу. Хм. Я попробовал детально расписать варианты этой ситуации, и обнаружил, что получается пост очень нехилых размеров. Не готов сейчас столько писать :( Ключевой вопрос, который надо рассмотреть именно в случае патча на исправление ошибки - починка некорректных данных, которые уже лежат в БД, и тут начинается куча вариантов. Поэтому приведу простой пример - если это расчет, не требующий немедленных действий, скажем отчет о дебиторской задолженности, выгонять пользователей ну совершенно необязательно. Реально очень во многих случаях достаточно сказать пользователю: обновишься - начнешь работать по-новому, делай это когда тебе будет удобно. Также отметим, что хотя это некое излишество, но в клиента легко можно встроить механизм онлайнового апдейта по оповещению, и выгонять пользователей в этом случае также совершенно не потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 18:18 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > же патче. Насколько мне известно, понятие уровней изоляции обычно не > распространяется на ddl, то есть если мы поменяли ХП - начиная с этого > мига текущие транзакции начинают использовать новую ХП. Соответственно, > состояние данных по завершении транзакции просто непредсказуемо. в MS SQL DDL можно выполнять в serializable. тулзы от MS так и делают. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 18:30 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
авторМне кажется, Вы не обратили внимание - я говорил не об элементарных правах, а об элементарных ролях. Каюсь, не обратил. С ролями еще хуже - ибо в отличии от прав, само понятие роли может быть переменчиво. Сегодня наша роль включает такие-то права, а завтра - мы расширяем ее, или разбиваем ее на две или еще что-то. Причем связь с функционалом здесь... скажем так, она есть, но может быть очень косвенной. авторЭто оправдано куда как больше, нежели 400 документов в одном exe-шнике ;) При столь подробных входных данных, сами понимаете, трудно судить об оптимуме. Как вы любите писать " я легко могу представить обратный пример..." :) В самом деле, здесь могут быть самые разные ситуации и один ехе-шник на 400 документов - не похож на оптимальное решение. Но, для большинства случаев, в предположении хотя бы минимального наследования - иметь даже одну библиотеку мне кажется несколько более эффективным, чем 400 отдельных. авторЭто несколько бессмысленная фраза, имхо. Для иллюстрации удобно воспользоваться оракловым понятием пакета Я недостаточно знаком с оракловым понятием пакета; фраза о функционале возникла в предположении что одна ХП выполняет одну функциональную операцию (отчет, проводка и т.п.) В более сложных ситуациях, этих ХП может быть несколько, но предполагаем что время прописывания всего этого пакета невелико и им можно пренебречь. В тоже время функционал одного модуля - опять же, как правило, для большинства случаев - содержит несколько функциональных операций, пусть даже связанных. Следовательно, его замена в среднем может оказать более критична/неудобна. Еще раз хочу подчеркнуть - поскольку требования на разработку могут быть практически сколь угодно фантастическими, поскольку решаемые ситуации могут быть просто непредсказуемыми, я пытаюсь рассуждать о неком обширном пласте "обычных" ИС. С более-менее типовыми задачами. Отдельно хочется заметить - ваше рассуждение о том авторчем ниже технологический уровень изделия, тем более оправдана унификация и наоборот, чем выше требования к качеству результата, тем тщательнее нужно подходить к каждой детали. конечно, правильно, но... если надежность изделия (причем любого) сильно зависит от тщательности обработки его каждой детали, надежность выпуска таких изделий невысока. В приложении к этому спору - заранее отказываясь от любых ограничений в используемых программных решениях (там - ХП, сям - обработка на клиенте, а здесь вообще 3-й слой) мы можем получит большую эффективность, но она сильно будет зависить от опыта конкретного разработчика. Как мне кажется, такой подход удобен при разработке маленькой командой; для более крупных отделов - довольно опасно. авторМне таких писать не доводилось. В целом есть некое представление о том, как я бы попробовал такое делать, но сугубо теоретическое. Мне приходилось (на Оракле :)) и не понравилось. Об эффективности приходилось забывать и к тому решать массу странных проблем. авторТогда мы ставим под угрозу целостность БД. В общем случае - согласен авторПоэтому приведу простой пример - если это расчет, не требующий немедленных действий, скажем отчет о дебиторской задолженности, выгонять пользователей ну совершенно необязательно Довольно странно - почему-то для ХП вы сразу предполагаете угрозу целостности БД. (правильнее, впрочем целостности функционала). А для клиента допускаете что эта угроза может быть необязательной. А с моей точки зрения обе описанные вами ситуации ну ничем абсолютно не различаются. Точно также можно предположить, как из незамененного клиентского модуля уйдут на сервер 2% вместо 20%, и точно также, что эта ХП возвращает отчет по дебиторской задолженности. Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 18:52 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarerТогда мы ставим под угрозу целостность БД. Почему: потому что этот селект может выполняться несколько раз в рамках одной бизнес-операции, одной транзакции. Также транзакция может существенно зависеть от его согласованности с другим элементом серверного кода, корректируемым в том же патче. В т.ч. и поэтому я написал, что пользователей хорошо бы выгнать. Можно однако спорить (фактически беспредметно) о том, как часто встречается описанная вами ситуация. Ну и lockyв MS SQL DDL можно выполнять в serializable. тулзы от MS так и делают softwarerПоэтому приведу простой пример - если это расчет, не требующий немедленных действий, скажем отчет о дебиторской задолженности, выгонять пользователей ну совершенно необязательно. Реально очень во многих случаях достаточно сказать пользователю: обновишься - начнешь работать по-новому, делай это когда тебе будет удобно :) опять же (достаточно беспредметно) можно спорить о том насколько часто важно, чтобы один и тот же расчет на основании одних и тех же данных но у разных пользователей приводил к одним и тем же результатам. Мне кажется, что возможные коллизии в этом случае возникают чаще. Но опять таки без конкретного примера говорить не о чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 19:04 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
aag igorolvДело в том, что конструкция "x.ID = @ID or @ID is null" оптимальнее, чем x.ID = isnull(@ID, ID). Так как некоторые оптимизаторы(MSSQL2005) в ДАННОМ КОНКРЕТНОМ случае "подменяют or на union". Вы сами-то проверяли данное утверждение? На 4-5 условиях OR? Или это надежда? :) ИМХО, насколько я помню, декларировалось только, что оптимизатор МОЖЕТ это делать в некоторых случаях) Проверял. MS SQL 2005. На достаточном количестве or и достаточном количестве хранимок. Правда, использование было сплошь в однотипных ситуациях. Вариантов несколько: 1) x.ID = isnull(@ID, ID) 2) (x.ID = @ID or @ID is null) Вне зависимости от числа необязательных параметров , выявилось следующее: а) если параметр УКАЗАН (выполняется x.ID = @ID), то эффективнее Вариант1. б) если параметр НЕ УКАЗАН (выполняется @ID is null), то эффективнее Вариант2. Критично уменьшить время выполнения запроса, когда параметр НЕ УКАЗАН. Так как если этот параметр УКАЗАН, объем выборки уменьшается, следовательно, оптимальность запроса менее важна (Он и так быстро выполняется - грузит меньше). Следовательно, при использовании необязательных фильтрующих параметров в хранимых процедурах MS SQL 2005, используемых для загрузки данных, выгоднее использовать вариант (x.ID = @ID or @ID is null) Однако, хочется подчеркнуть, что входные параметры хранимой процедуры, в том числе необязательные, следует использовать прежде всего для отбора необходимых данных, а не для выстраивания ПОЛНОЦЕННОГО механизма фильтрации. При ТРЕБОВАНИИ использования только хранимых процедур для доступа к данным, решать проблему именно ФИЛЬТРАЦИИ на мой взгляд, предпочтительнее с помощью связок "фильтры на клиенте в dataset-е" ПЛЮС "динамический sql в связке с метаданными". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 21:13 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovВ т.ч. и поэтому я написал, что пользователей хорошо бы выгнать. Можно однако спорить (фактически беспредметно) о том, как часто встречается описанная вами ситуация. Спорить о частоте я не вижу смысла, заранее готов согласиться с "редко", "очень редко" итп. Вопрос - в последствиях такой коллизии, если она все же возникнет. Опять же я заранее согласен с тем, что мой подход с точки зрения "среднего программиста" изрядно параноидален. Причина этого в том, что во-первых, надежность софта - вообще одна из моих любимых тем, а во-вторых, я имею неплохой опыт разгребания последствий подобных проблем, и что самое главное - профилактики оных. Я на собственной шкуре знаю, сколько работы приходится сделать для ликвидации последствий таких вот нечасто встречаемых ситуаций, и насколько меньше усилий требуется, чтобы вычистить проблему прежде чем она по-настоящему заявит о себе. Alexey Kudinov Ну и lockyв MS SQL DDL можно выполнять в serializable. тулзы от MS так и делают Наверное, я не компетентен оценить все последствия, но на первый взгляд это не является лекарством от описанной проблемы. Нужно другое - нужно, чтобы транзакция с уровнем изоляции, например, RC, видела хранимки так, как должна была бы видеть их в SERIALIZABLE. Alexey Kudinovможно спорить о том насколько часто важно, чтобы один и тот же расчет на основании одних и тех же данных но у разных пользователей приводил к одним и тем же результатам. Если один из этих пользователей знает, что работает в устаревшей версии - имхо заведомо неважно. Но опять же незачем спорить - если помните, мы обсуждаем безоговорочную необходимость выгнать пользователей в этом случае. Если тема свелась к "насколько часто" - значит, безоговорочной необходимости нет. Ну а обсуждать на пальцах количественные показатели в данном случае, полагаю, бессмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 09:20 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
2 softwarer все-таки aagДовольно странно - почему-то для ХП вы сразу предполагаете угрозу целостности БД. (правильнее, впрочем целостности функционала). А для клиента допускаете что эта угроза может быть необязательной. А с моей точки зрения обе описанные вами ситуации ну ничем абсолютно не различаются. Точно также можно предположить, как из незамененного клиентского модуля уйдут на сервер 2% вместо 20%, и точно также, что эта ХП возвращает отчет по дебиторской задолженности. Если вы говорите softwarer надежность софта - вообще одна из моих любимых тем, а во-вторых, я имею неплохой опыт разгребания последствий подобных проблем, и что самое главное - профилактики оных. Я на собственной шкуре знаю, сколько работы приходится сделать для ликвидации последствий таких вот нечасто встречаемых ситуаций, и насколько меньше усилий требуется, чтобы вычистить проблему прежде чем она по-настоящему заявит о себе, то вы должны представлять себе что будет, если часть клиентов отправдяют в БД расчеты на основании правильных 20%, а часть нет. я думаю, мы согласимся в том, что и в случае ХП, так и в случае sql на клиенте существуют ситуации, когда одновременное обновление с отключением клиентов от БД критично и существуют ситуации когда это не обязательно. При этом где именно размещен данный sql не столь важно, важно что он делает и какие процессы затрагивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 11:07 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinovсуществуют ситуации, когда одновременное обновление с отключением клиентов от БД критично и существуют ситуации когда это не обязательно. softwarerЕсли один из этих пользователей знает, что работает в устаревшей версии - имхо заведомо неважно. Пожалуй, надо сказать еще пару слов. Здесь мы вступаем в несколько эфимерную область отношения пользователей к ПО. К сожалению, пользователи забывают и/или не обращают внимание даже на версию ПО, а уж на список исправлений и подавно. Человек просто печатает отчет и идет с ним к начальнику, который в своем отчете видит другие цифры. Некоторое время они выясняют кто тут дурак, а потом может быть вспомнят, что один из них не обновил свою систему. А может и не вспомнят, а начнут делать общие выводы относительно качества ПО и принимать какие-то решения. Т.е. с _технической_ точки зрения неприятных последствий нет. С точки зрения ситуации в целом - скорее есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 11:37 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinovвсе-таки aagДовольно странно - почему-то для ХП вы сразу предполагаете угрозу целостности БД. (правильнее, впрочем целостности функционала). А для клиента допускаете что эта угроза может быть необязательной. Хм. Мне казалось, это сказано, но видимо надо было проговорить более четко. Те проблемы целостности, о которых я говорю, возникают из-за того, что правила игры меняются посереди транзакции; половина транзакции работает "по старому", половина - "по новому". При реализации на клиенте такой ситуации возникнуть не может, ну разве что специально очень постараться. В обоих случаях также потребуется решить проблему "восстановления данных", то есть найти "некорректные по-старому данные", отделить их от "корректных по-новому" и привести в порядок. Здесь различия того и другого варианта малы, предлагаю считать эту задачу эквивалентной в обоих случаях. Я же фокусируюсь на том, что при обновлении ХП посереди транзакции может возникнуть третий вариант "данные, некорректные и не по-старому, и не по-новому, а неким труднопредсказуемым третьим образом", и поиск-лечение таких данных является отдельной непростой задачей. Alexey Kudinovто вы должны представлять себе что будет, если часть клиентов отправдяют в БД расчеты на основании правильных 20%, а часть нет. Зависит от того, как используются эти данные. Я уже сказал выше, попытался расписать детально, и обнаружил что вариантов слишком много. Alexey Kudinovсуществуют ситуации, когда одновременное обновление с отключением клиентов от БД критично .... Само собой. Alexey KudinovПри этом где именно размещен данный sql не столь важно, важно что он делает и какие процессы затрагивает. Вот с этим я уже не готов согласиться; выше, в http://sql.ru/forum/actualpost.aspx?bid=36&tid=341204&mid=3223860&p=4&act=quot#3221311 я приводил пример обратного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 11:48 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov К сожалению, пользователи забывают и/или не обращают внимание даже на версию ПО, а уж на список исправлений и подавно. Человек просто печатает отчет и идет с ним к начальнику, ..... Это уже в целом проблема технологии управления, для решения которой может потребоваться поддержка со стороны софта. Если - пользователю доходчиво сообщается о выходе новой версии, например появляется крупный баннер на главной форме - налажено превентивное информирование пользователей о значимых для них изменениях; мы не полагаемся на "пользователь полезет вот сюда и прочитает вот это, выбирая нужное для себя" - пользователь знает, что за "я дурак" его по головке не погладят то такая проблема не возникает. Проверено на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 11:54 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
aagС ролями еще хуже - ибо в отличии от прав, само понятие роли может быть переменчиво..... Скажем так, "устойчивые группы" существуют. Мало того, переменчивость роли в общем-то не приводит ни к каким страшным последствиям. В общем, предлагаю сойтись на том, что найти удобное разбиение можно, но задача это неочевидная. aagв предположении хотя бы минимального наследования - иметь даже одну библиотеку мне кажется несколько более эффективным, чем 400 отдельных. Я не очень понимаю, чем 400 отдельных библиотек мешают использовать наследование. Наоборот, могут и должны его использовать; соответственно я не вижу разницы между "1 и 400 библиотек". Возможно, здесь играет роль специфика инструмента. aagЯ недостаточно знаком с оракловым понятием пакета; Пакет... если Вы не знакомы с такой концепцией, проще всего сказать, что это экземпляр класса, существующий в единственном экземпляре для каждой использующей его сессии. То есть в самом простом случае - группа ХП, оформленных как методы одного класса. aagВ тоже время функционал одного модуля - опять же, как правило, для большинства случаев - содержит несколько функциональных операций, пусть даже связанных. Следовательно, его замена в среднем может оказать более критична/неудобна. Вот этого я и не понимаю. Если мы меняем одну функциональную операцию - мы меняем одну функциональную операцию вне зависимости от того, оформлена ли она отдельным модулем или собрана в группу с несколькими другими. Мы одинаково меняем одни и те же строки. Не вижу разницы. Фактически Ваше утверждение - как я его понимаю - соответствует следующей аналогии: если мы возьмем класс, например Vector, и развалим его на отдельные stand-alone подпрограммы, модификация одной из этих подпрограмм, например indexOf, окажется проще (менее критична/неудобна) чем аналогичная модификация в рамках исходного класса. aagесли надежность изделия (причем любого) сильно зависит от тщательности обработки его каждой детали, надежность выпуска таких изделий невысока. Хм. Если обсуждать эту тему, боюсь, мы уйдем в очень далекие дебри, причем, похоже, мы сейчас говорим о несколько разном значении термина "надежность". aagКак мне кажется, такой подход удобен при разработке маленькой командой; для более крупных отделов - довольно опасно. Проблема масштабирования для проектных команд, безусловно, никак не менее сложна и интересна, чем для программных продуктов, скорее наоборот. Мне не доводилось руководить большим коллективом, а что до тех проектов, в которых участвовал в более скромных ролях - с моей точки зрения, используемые технологии могли бы очевиднейше улучшены. Скажу так, общая история развития технологии ведет не в сторону унификации сотрудников. Какой пример ни возьми, от военного дела до производства пуговиц, мейнстрим выглядит примерно так: кустарщина (неунифицированный разброд) -> начало унификации (мануфактуры, внедрение машин) -> высшая точка унификации (тот же конвеер) -> вытеснение унифицированных сотрудников сложными техническими решениями, автоматизацией; выжившие сотрудники занимаются более эксклюзивными операциями. Возьмите, например, тестирование, где дешевый ручной труд медленно, но верно вытесняется автоматизированными решениями под управлением квалифицированных специалистов. aagДовольно странно - почему-то для ХП вы сразу предполагаете угрозу целостности БД...... Нет, именно целостности данных. Подробнее уже ответил выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 12:28 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarerТе проблемы целостности, о которых я говорю, возникают из-за того, что правила игры меняются посереди транзакции; половина транзакции работает "по старому", половина - "по новому". При реализации на клиенте такой ситуации возникнуть не может, ну разве что специально очень постараться. Я по прежнему не вижу принципиальной разницы. Как результат отсутствия своевременного обновления новые "правильные" клиенты могут в своей работе использовать данные введенные "неправильными" и наоборот. В данном случае не суть важно, меняются ли правила игры посередине транзакции или посередине одновременной работы различных пользователей с одними данными. Бардак будет и в том и в ином случае. Замечу еще, что растянутость процесса обновления во втором случае способствует бОльшей рассогласованности данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 12:36 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34033959&tid=1544980]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 470ms |

| 0 / 0 |
