Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
У нас следующая конфигурация, MS-SQL 2005 и бухгалтерская программа (написана на Delphi), позволяющая прям на клиенте задавать отработку событий - при нажатии или редактировании поля или ещё чего-нибудь, обрабатывается событие, в котором выполняется sql-код (который программист сам напишет прям в редакторе программы, зайдя под админскими правами), т.е. это может быть вызов процедуры или прям t-sql код с его обработкой, хоть джойны, хоть delete/update хоть создание базы данных можно выполнить (если права пользователя позволяют).
Возник вопрос, при такой конфигурации системы, где лучше писать операторы DDl, update, delete: в процедуре на сервере, с вызовом её с клиента или можно DDL только на сервере, а update и delete на клиенте, или можно всё на клиенте делать, соблюдая права доступа?
11 май 16, 09:36    [19156369]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

автор
или можно DDL только на сервере, а update и delete на клиенте,
а это вы что подразумеваете?
а вообще читать про +/- ad hoc, parameter sniffing. Тут всё зависит чего вы хотите в результате, ни и обновлять бесконечно клиентскую часть исправив вставку/удаление то ещё занятие :)
11 май 16, 09:41    [19156407]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015,

автор
или можно DDL только на сервере, а update и delete на клиенте,
а это вы что подразумеваете?
а вообще читать про +/- ad hoc, parameter sniffing. Тут всё зависит чего вы хотите в результате, ни и обновлять бесконечно клиентскую часть исправив вставку/удаление то ещё занятие :)


Я хочу повышение производительности
в дополнение - поля, в которых программист пишет код "на клиенте" (зайдя в кнопку и написав join) хранятся в таблице sqlvalid, которая расположена на том же сервере БД, и эти поля типа text
11 май 16, 09:47    [19156430]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
_djХомяГ
Guest
Я хочу повышение производительности

А у вас наблюдается падение производительности ?
Если да, с чем оно связано ?
11 май 16, 09:50    [19156440]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

если у вас 5 человек мучают сие, то ломать нужно если есть проблемы, если нет проблем и ломать от нечего делать не стоит :)
11 май 16, 09:51    [19156446]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015,

если у вас 5 человек мучают сие, то ломать нужно если есть проблемы, если нет проблем и ломать от нечего делать не стоит :)


это понятно, что если работает, не трогай, но нам надо разработать стандарт, где и что и как писать, что бы работало быстрее и безопаснее.
я тут прочитал, что если update делать на сервере, то оно безопаснее, мало ли что может пойти не так с клиентом во время выполнения самойго update, а в случае с процедурой, от клиента пойдёт только выхов процедуры и всё
- Но возникают подозрения, ведь этот апдейт проходит в рамках неявной транзакции, которая должна откатиться, случись что с клиентом, если так, то получается можно писать update на клиенте
- Но с другой стороны, не совсем понятен механизм получения клиентом данных о том, какую строку надо апдейтить, (обмен данными между сервером и клиентом), так ли это работает:
- клиент получает сразу всю таблицу, потом в ней делает поиск по where, производит update, выводит результат
- в случае с процедурой, клиент вызывает процедуру, на сервере она делает поиск по where, делает update, возвращает изменённую строку клиенту, клиент выводит результат
Если я правильно понял механизмы в данном случае, что будет работать быстрее?
11 май 16, 10:04    [19156508]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

автор
что если update делать на сервере,
ничего не происходит на клиенте, всё только на сервере
11 май 16, 10:09    [19156527]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
_djХомяГ
Guest
RMagistr2015
а в случае с процедурой, от клиента пойдёт только выхов процедуры и всё

А в этом случае процедура должна поддерживать логику подтверждения/отката транзакции + при возникновеннии ошибок кидать exception, кот должен перехватываться на клиенте
11 май 16, 10:14    [19156552]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015,

автор
что если update делать на сервере,
ничего не происходит на клиенте, всё только на сервере


т.е. получается если код написан "на клиенте", он всё равно выполняется на сервере, ясно, спасибо
Но в этом случае какой трафик проходит между сервером и клиентом?
если например выполнять:
update table set t=1 where t=0

не будет ли это работать медленнее чем тот же самый update в процедуре с опцией NOCOUNT ON ?
11 май 16, 10:45    [19156773]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
И каким образом происходит обмен информации между сервером и клиентом в обоих случаях?
11 май 16, 10:47    [19156783]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

а что мешает ставить NOCOUNT ON не в процедуре?
11 май 16, 10:49    [19156797]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015,

а что мешает ставить NOCOUNT ON не в процедуре?


Бухгалтерская программулина имеет слегка изменённый синтаксис, который на 93% похож на t-sql, но на остальные 7% - нет ((
и использование этой опции прям "в тексте кнопки" вызывает ошибку - инкорект синтаксис неа - NOCOUNT ON
11 май 16, 10:57    [19156837]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015
TaPaK
RMagistr2015,

а что мешает ставить NOCOUNT ON не в процедуре?


Бухгалтерская программулина имеет слегка изменённый синтаксис, который на 93% похож на t-sql, но на остальные 7% - нет ((
и использование этой опции прям "в тексте кнопки" вызывает ошибку - инкорект синтаксис неа - NOCOUNT ON


партизаны всё толще... может надо писать SET NOCOUNT ON
11 май 16, 10:58    [19156845]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015
пропущено...


Бухгалтерская программулина имеет слегка изменённый синтаксис, который на 93% похож на t-sql, но на остальные 7% - нет ((
и использование этой опции прям "в тексте кнопки" вызывает ошибку - инкорект синтаксис неа - NOCOUNT ON


партизаны всё толще... может надо писать SET NOCOUNT ON


Ну да, сработало, спасибо за это. Чесно говоря не пробовал это, т.к. думал, что это опция только для процедур.

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

И последний вопрос, какая информация проходит между сервером и клиентом при попытке выполнить код написанный "на клиенте"? Если без опции NOCOUNT ON
11 май 16, 11:14    [19156955]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
iljy
Member

Откуда:
Сообщений: 8711
RMagistr2015,

серверу передается команда, которую требуется выполнить. SET NOCOUNT - тоже команда. Если хотите подробностей, запустите профайлер и посмотрите.
11 май 16, 11:18    [19156981]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015
TaPaK
пропущено...


партизаны всё толще... может надо писать SET NOCOUNT ON


Ну да, сработало, спасибо за это. Чесно говоря не пробовал это, т.к. думал, что это опция только для процедур.

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

И последний вопрос, какая информация проходит между сервером и клиентом при попытке выполнить код написанный "на клиенте"? Если без опции NOCOUNT ON


такая же как и с вызовом процедур.
при написания кода "на клиенте" оптимизатор будет строить/искать планы из сохранённых - читать про ad hoc
вообще в первом сообщении я писал, что читать...
11 май 16, 11:19    [19156993]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
o-o
Guest
TaPaK
И последний вопрос, какая информация проходит между сервером и клиентом при попытке выполнить код написанный "на клиенте"? Если без опции NOCOUNT ON

такая же как и с вызовом процедур.
[/quot]
да прям.
если я сейчас вызываю процедуру в 10.000 строк, то передаю только ее имя.
а если я все 10.000 строк буду запросом передавать, то это будут переданы именно 10.000 строк
вместо одного имени процедуры
11 май 16, 11:53    [19157281]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
o-o
Guest
криво отцитировалось.
вот так должно было быть
TaPaK
RMagistr2015
И последний вопрос, какая информация проходит между сервером и клиентом при попытке выполнить код написанный "на клиенте"? Если без опции NOCOUNT ON

такая же как и с вызовом процедур.
11 май 16, 11:54    [19157295]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o,

ну что тут сказать, комментарий стоящий. тем более что все тексты, исходя из описания хранятся на том же скл сервере. А если текст сначала на клиент, потом обратно на сервер это уже огогоо
11 май 16, 12:01    [19157362]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
o-o
Guest
TaPaK
все тексты, исходя из описания хранятся на том же скл сервере.

в смысле?
где-то ТС написал, что это все один физический комп?
если у него между прогой и сервером сеть, то это его случай.
и в каком смысле "сначала на клиент, потом обратно на сервер"?
он не "потом обратно", он "с клиента прямым ходом на сервер"
11 май 16, 12:13    [19157471]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o,

можно я не буду больше поддерживать вашу ветку обсуждения? Мене лень :)

автор
дополнение - поля, в которых программист пишет код "на клиенте" (зайдя в кнопку и написав join) хранятся в таблице sqlvalid, которая расположена на том же сервере БД, и эти поля типа text
11 май 16, 12:17    [19157503]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
RMagistr2015,

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

В общем, надо смотреть логику.
а update и delete думаю тут не причём. Обычные команды DDL
11 май 16, 12:17    [19157513]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
o-o
Guest
TaPaK
o-o,

можно я не буду больше поддерживать вашу ветку обсуждения? Мене лень :)

автор
дополнение - поля, в которых программист пишет код "на клиенте" (зайдя в кнопку и написав join) хранятся в таблице sqlvalid, которая расположена на том же сервере БД, и эти поля типа text

ну допустим супер дополнение я сейчас читаю впервые.
только что-то я не сильно вею в написанное.
мало того, что там "заходят в кнопку",
там еще и текст лежит в поле "типа text".
значит, его выполняют через EXEC,
ибо неюникод sp_executesql просто выплюнет обратно, не выполняя.
ну а раз EXEC, то какие нафиг параметры?
они там конкатенируют значения прямо в текст запроса,
тогда какой же PARAMETER SNIFFING, если параметров в принципе нет?
TaPaK
а вообще читать про +/- ad hoc, parameter sniffing

там сплошные константы в запросах,
так что вы вовремя слились
11 май 16, 12:34    [19157638]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
o-o
TaPaK
o-o,

можно я не буду больше поддерживать вашу ветку обсуждения? Мене лень :)

пропущено...

ну допустим супер дополнение я сейчас читаю впервые.
только что-то я не сильно вею в написанное.
мало того, что там "заходят в кнопку",
там еще и текст лежит в поле "типа text".
значит, его выполняют через EXEC,
ибо неюникод sp_executesql просто выплюнет обратно, не выполняя.
ну а раз EXEC, то какие нафиг параметры?
они там конкатенируют значения прямо в текст запроса,
тогда какой же PARAMETER SNIFFING, если параметров в принципе нет?
TaPaK
а вообще читать про +/- ad hoc, parameter sniffing

там сплошные константы в запросах,
так что вы вовремя слились


В принципе когда я смотрю профилёр, то на сервер идут запросы в которых указаны конкретные числа (как константы) от клиента до сервера, видимо так и работает эта бухгалтерская программулина
Получается текст запроса программулина берёт из поля таблицы sqlvalid, подставляет в него константы и шлёт потом на сервер, и если это 10.000 строк, то шлются все 10.000 строк, что как говорили выше не очень хорошо, надо слать только имя процедуры, Я правильно понял, уважаемые специалисты?
11 май 16, 12:49    [19157743]     Ответить | Цитировать Сообщить модератору
 Re: обмен данными между клиентом и сервером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,
автор
В принципе когда я смотрю профилёр, то на сервер идут запросы в которых указаны конкретные числа (как константы) от клиента до сервера, видимо так и работает эта бухгалтерская программулина
Получается текст запроса программулина берёт из поля таблицы sqlvalid, подставляет в него константы и шлёт потом на сервер, и если это 10.000 строк, то шлются все 10.000 строк, что как говорили выше не очень хорошо, надо слать только имя процедуры, Я правильно понял, уважаемые специалисты?

проблемы надо решать, а не создавать. Если есть проблема с сетевым трафиком - решайте, если проблема с производительностью/оптимизацией - решайте, одно другое не решает в общем смысле слова.
11 май 16, 12:53    [19157766]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить