|
|
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Задача зарплаты при соответствующем :) проектировании и реализации грубо тупо выполняется последовательным выполнением запросов (массовым запросам так вообще Бог велел на серве выполняться) Изменения логики в большинстве своем реализуются без изменения клиентской части Потому тащить расчеты на клиента смысла не вижу. Было бы познавательно послушать примеры необходимости в оном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 04:41 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
mcureenab Alex_Toms При получении запросов select, insert, update, delete сервак: 1: сначала призводит синтаксический разбор текста 2: затем компилирует 3: производит оптимизацию плана запроса 4: и только после этого выполняет сам запрос. При использовании ХП, первые 3 пункта выполняются после изменении текста ХП, а при вызове сразу пункт 4, при этом при экономятся ресурсы сервера, и выигрыш от этого бывает очень значительный. В Оракле и при использовании ХП всё происходит точно так же с п.1 по п.4. Может в MSSQL это не так? Но тогда после изменения данных останется старый план запроса.В MSSQL всё так, как описал Alex_Toms. Если нужно чтобы план выполнения ХП при каждом запуске строился заново, то это можно указать дополнительной "галочкой". mcureenab, ты бы хоть книжку какую прочитал бы, перед тем как тут выступать. Рекомендую начать с этого . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 07:14 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Ржунимагу Наконец-то за последние 3 месяца появилось желание прийти на sql.ru, чтоюы посмеяться Молодец, mcureenab, позабавил! С такой решительностью биться не имея никаких знаний и опыта работы с СУБД - это медаль надо, большую, чугунную, на цепи И грамоту, даже две - одну за неграмостность в сфере СУБД и систем, использующих СУБД, вторую - за развод лохов заказчеков. И все же расскажи, что за трава - сорт необычный, контрабанда? :)) Продолжай, запасся чипсами, пивом и деффками -- Tygra's -- Мои фотогалереи тут и тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 09:04 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Алексей К mcureenab Alex_Toms При получении запросов select, insert, update, delete сервак: 1: сначала призводит синтаксический разбор текста 2: затем компилирует 3: производит оптимизацию плана запроса 4: и только после этого выполняет сам запрос. При использовании ХП, первые 3 пункта выполняются после изменении текста ХП, а при вызове сразу пункт 4, при этом при экономятся ресурсы сервера, и выигрыш от этого бывает очень значительный. В Оракле и при использовании ХП всё происходит точно так же с п.1 по п.4. Может в MSSQL это не так? Но тогда после изменения данных останется старый план запроса.В MSSQL всё так, как описал Alex_Toms. Если нужно чтобы план выполнения ХП при каждом запуске строился заново, то это можно указать дополнительной "галочкой". Что-то мне кажется, что вы о разных вещах говорите. Не знаю как в MSSQL, но в Oracle возвращение данных с помощью ХП - это два запроса вместо одного. Первый запрос - это собственно вызов ХП, второй - select, написанный внутри ХП. Ну так вот выполнение первого из этих запросов требует ровно тех-же действий, что и выполнение обычного select (правда чем у Alex_Toms различаются п.1 и п.2 я не понял). Ну а второй запрос (тот что внутри ХП), естественно, уже скомпилирован. А кстати, повтороное выполнение одного и того же запроса (что вызова ХП, что select) уже не приводит к повторному анализу и оптимизации - производится тупое сравнение строк с имеющимися в кэше. Так неужели MSSQL получив строку с именем процедуры от клиента, не делает ее анализа? Хотя бы наличие такой процедуры он должен проверить? Или он сразу эту строку "выполняет"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 10:04 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyА кстати, повтороное выполнение одного и того же запроса (что вызова ХП, что select) уже не приводит к повторному анализу и оптимизации - производится тупое сравнение строк с имеющимися в кэше.По моему да, точно не помню. У меня статистика как правило одинаковая. Для меня это не актуально. Bogdanov AndreyТак неужели MSSQL получив строку с именем процедуры от клиента, не делает ее анализа? Хотя бы наличие такой процедуры он должен проверить? Или он сразу эту строку "выполняет"?Можно поставить "галочку", чтобы он её каждый раз перекомпилировал. По умолчанию она не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 10:26 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
ЯМожно поставить "галочку", чтобы он её каждый раз перекомпилировал. По умолчанию она не стоит.Ну и вручную можно установить признак, чтобы при следующем запуске процедура перекомпилировалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 10:28 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
atv_13Потому тащить расчеты на клиента смысла не вижу. Смысл очень простой - разгрузить процессоры сервера БД.(алтернатива - добавлять процессоры, но тогда перестанет справляться ОС) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 10:57 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Alex_TomsНа сколько я правильно помню, старый добрый Access запросы всё же выполнять не мог, их за него выполнял механизм Jet. А почему всё это работало полностью на клиенте. Всё очень просто, при инсталяции офиса, Jet автоматом садится. И при работе с ADO рекомендуют выбирать для работы с MDB именно Jet с ним выше скорость, и поэтому функции он может выполнить которые есть только в Access.Может старый аксес и не умел выполнять, но современный - вполне адекватно реагирует на SQL. по поводу того, что Jet - это сервер. Это неверно. Jet - это библиотека, которая подключается к программе. Точно так же как в старые времена, когда не было windows - была куча оконных графических и не очень графических библиотек, используя которые програмист мог писать свой интерфейс. Библиотеки эти работали непосредственно с видеокартами минуя всякие ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:04 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
>tygra ... Ржунимагу А почему собственно? SQL server строит выборку состоящую из последовательности нескольких таблиц и передаёт её серверу приложения, который преобразует её в формат DataSet. В DataSet имею возможность напрямую получить доступ к значению любого поля, любой строки, любой таблицы. Т.е. вполне допустима проверка: если (<поле k><строки j><таблицы i>) истина, то ... Предполагается, что DataSet размещается в оперативной памяти СП. Я не уверен, что в среде SQL сервера подобные операции будут идти быстрее, да и даеко не все работают с Oracle. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:04 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
ВМоисеевЯ не уверен, что в среде SQL сервера подобные операции будут идти быстрее, да и даеко не все работают с Oracle.Вот именно потому что, немногие работают с Ораклом - эти многие думают, что на клиенте подобные операции будут быстрее :) Загрузку между клиентом и сервером надо распределять тоже с умом, а не пихать все в одну кучу. PS: есть такая библиотечка в дельфях - EhLib. позволяет в гридах делать фильтрацию на клиенте с помощью языка условий, задаваемого пользователем. Оч удобно! но когда количество принимаемых данных стало большим - эти гриды стали просто захлебываться перед фильтрацией. При добавлении фильтрации на сервере - все стало летать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:20 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
ВМоисеевПредполагается, что DataSet размещается в оперативной памяти СП. Я не уверен, что в среде SQL сервера подобные операции будут идти быстрееDataSet, это который из ADO.Net? А не настораживает, что там managed-среда? Проверка границ массивов и контроль типов и прочее... Вы серьёзно полагаете, что там будет работать быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:21 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
BelyВот именно потому что, немногие работают с Ораклом - эти многие думают, что на клиенте подобные операции будут быстрееПапрашу не обобщать... :-)) MSSQL forever... :-)) модСмысл очень простой - разгрузить процессоры сервера БДДавайте вообще уберём процессор с сервера, оставим один HDD. :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:28 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Может быть не в тему, но все-таки. Ни для кого не секрет, что SQL-ная версия 1С 7.7 реализована в виде толстого клиента, при этом мы имеем возможность создания и использования в ее интерфейсе запросов в самом SQL-сервере, т.е. как тонкого клиента. так вот практика: время создания специфического отчета средствами самого клиента, а там были и расчеты и группировки и т.д., резко колебалась и естественно зависела от компьютера на котором он запускался, от минуты до 20 минут, после оформления его в виде вызываемой ХП, пользователь получал его в течении 20 секунд и при этом не было зависимости от компьютера пользователя, по крайней мере на глаз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:45 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Алексей КДавайте вообще уберём процессор с сервера, оставим один HDD. :-)) Который из 32-х ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 12:11 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
мод Алексей КДавайте вообще уберём процессор с сервера, оставим один HDD. :-)) Который из 32-х ?Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 12:14 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Алексей К wrote: > Давайте вообще уберём процессор с сервера, оставим один HDD. :-)) > > > Который из 32-х ? > > Все. зачем? Ведь все данные и так уже локально скэшированы на клиента... Причем у каждого клиента - своя, уникальная копия общих данных, не имеющих ничего общего с данными других клиентов! Долой уравниловку! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 13:01 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Насчёт расчёта зарплаты на клиенте хотел поделиться опытом эксплуатации одной системы. Случай классический - толстый клиент и файл-серверная БД. Вся логика расчётов (а она несколько специфична для угледобывающей отрасли, поскольку количество видо начислений, удержаний гораздо больше среднего по другим отраслям) вшита в клиентское приложение. Итак, расчёт зарплаты для 12000 сотрудников длится около 40 минут. Вышедшая новая версия продукта хранит данные на MSSQL, но на производительности это никак не сказывается (точнее, сказывается, но в худшую сторону), поскольку обработка данных по-прежнему на клиенте. Конечно, возможно, что низкая производительность обусловлена кривыми руками разработчиков, но простейшие эксперименты с переносом расчётов на сервер в виде ХП, показывают увеличение производительности на порядок при той-же численности народа и сложности расчётов. При этом не производилась сколь-нибудь серьёзная оптимизация зпросов. Вотъ. ------ Всех благ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 13:48 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
ВМоисеев>tygra ... Ржунимагу А почему собственно? SQL server строит выборку состоящую из последовательности нескольких таблиц и передаёт её серверу приложения, который преобразует её в формат DataSet. В DataSet имею возможность напрямую получить доступ к значению любого поля, любой строки, любой таблицы. Т.е. вполне допустима проверка: если (<поле k><строки j><таблицы i>) истина, то ... Предполагается, что DataSet размещается в оперативной памяти СП. Я не уверен, что в среде SQL сервера подобные операции будут идти быстрее, да и даеко не все работают с Oracle. Я боюсь, что не понял смысла в этом. Смысла в делании чего-то там в СП с данными, для которых существует специально предназначенный для данных сервер БД. Не понял, какие операции будут не быстрее - операции выборки данных? :)) -- Tygra's -- Мои фотогалереи тут и тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 14:05 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Алексей К модСмысл очень простой - разгрузить процессоры сервера БДДавайте вообще уберём процессор с сервера, оставим один HDD. :-)) Идея не нова, и более того, уже реализована. В частности нонфигурация, где БД назмещена в NAS, а СУБД на отдельном сервере. NAS обеспечивает доступ к данным на уровне файлов, СУБД, на уровне реляционных, объектных и т.п. отношений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 14:47 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
>tygra ...Смысла в делании чего-то там в СП с данными ... Хочу заострить внимание коллег на тот факт, что не всегда! удобно реализовывать обработку данных выборки в среде сервера данных. В свое время приводил ситуацию - выборка заказанная клиентом представляет собой таблицу из двух столбцов - x (значение переменной) и у (значение функции) за некоторый период. Выборку можно было передавать клиенту, но сеть плохая. Решено было осуществить сплайн интерполяцию (кубическую) и передавать клиенту только коэффициенты сплайна. Не думаю, что эту задачу надо (и можно ли) делать в среде SQL-сервера. Выборка вполне может представлять собой данные для линейного программирования. Опять таки, реализовывать подобные задачи в ХР? Считаю, что это должен делать СП. Он располагается в высокоскоростной сети с сервером данных, или вообще может быть запущен на компьютере сервера данных. Клиентский же комп может быть удален на географическое расстояние от локальной сети сервера данных - качать туда большой объем данных вряд ли целесообразно по низкоскоростной ненадежной сети. В задачах, что приходилось решать, требовался доступ к заданным полям таблиц выборки. Что Oracle умеет выполнять операции Fox-а типа Seek или Locate? С уважением, Владимир. ------------------------------------ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 14:49 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Sergey OrlovМожет быть не в тему, но все-таки. Ни для кого не секрет, что SQL-ная версия 1С 7.7 реализована в виде толстого клиента, при этом мы имеем возможность создания и использования в ее интерфейсе запросов в самом SQL-сервере, т.е. как тонкого клиента. так вот практика: время создания специфического отчета средствами самого клиента, а там были и расчеты и группировки и т.д., резко колебалась и естественно зависела от компьютера на котором он запускался, от минуты до 20 минут, после оформления его в виде вызываемой ХП, пользователь получал его в течении 20 секунд и при этом не было зависимости от компьютера пользователя, по крайней мере на глаз... Ясен пень, что скорость завивит от оборудования. Серверы приложений и созданы, чтобы с одной стороны разгрузить СУБД, с другой стороны не нагружать клиента, ресурсы которого могут оказаться недостаточными для решения задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 14:53 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyНе знаю как в MSSQL, но в Oracle возвращение данных с помощью ХП - это два запроса вместо одного. ... Ну так вот выполнение первого из этих запросов требует ровно тех-же действий, что и выполнение обычного select (правда чем у Alex_Toms различаются п.1 и п.2 я не понял). Ну а второй запрос (тот что внутри ХП), естественно, уже скомпилирован. А кстати, повтороное выполнение одного и того же запроса (что вызова ХП, что select) уже не приводит к повторному анализу и оптимизации - производится тупое сравнение строк с имеющимися в кэше. ХМ. Я не знаю, что вы понимаете под компиляцией SQL запроса, но во время компиляции ХП PL/SQL, происходит только проверка синтаксиса и семантики статического запроса (наличие и доступности таблиц и колонок) в объёме необходимом для создания соответствующего запросу p-кода, например структуры буфера для выборки строк. Исполнимый код SQL запроса не создаётся. На этапе выполнения текст запроса восстанавливается и в почти исходном виде отправляется в SQL машину для разбора, построения плана (т.е. исполнимого кода) и выполнения, т.е. по сути компилируется повторно, но уже полностью. Среди разработчиков Oracle бытует миф, о магическом ускорении статических SQL запросов по сравнению с динамическими. Считается, что ускорение связано с некой компиляцией SQL запроса в ХП. Но, источник этого мифа не компилятор, а кэш курсоров PL/SQL, который позволяет исключить повторный разбор (parse) SQL запроса, если он выполнялся ранее. С тем же успехом программист может сам отслеживать часто используемые курсоры и не закрывать их без нужды. В добавок компилятор причёсывает SQL запросы, удаляя из них ненужные коментарии, и прочие пробельные символы, переименовывает переменные привязки, поднимает регистр идентификаторов, понижая вероятность жёсткого разбора из-за несущественных различий в тексте разных запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 15:38 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
lockyзачем? Ведь все данные и так уже локально скэшированы на клиента... Причем у каждого клиента - своя, уникальная копия общих данных, не имеющих ничего общего с данными других клиентов! Долой уравниловку! С кэшем или без оного в общем случае каждая транзакция видит своё состояние БД отличное от других транзакций, ибо изоляцию транзакций никто не отменял. Только в БД открытой на чтение (или блокированной) все транзакции видят один и тот же образ данных. В большинстве случаев обработка данных выполняется в буфере процесса, а затем результат сохраняется в БД. Естественно за время работы процесса данные в буфере могут устареть. В одних случаях это не критично, в других - критично, приходится использовать блокировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 15:52 |
|
||
|
Тонкий или толстый клиент
|
|||
|---|---|---|---|
|
#18+
mcureenabИдея не нова, и более того, уже реализована. В частности нонфигурация, где БД назмещена в NAS, а СУБД на отдельном сервере. NAS обеспечивает доступ к данным на уровне файлов, СУБД, на уровне реляционных, объектных и т.п. отношений.Это особенности реализации дисковой подсистемы конкретного сервера БД, не более того. К "толщине" клиента или "нужности" сервера приложений с бизнес логикой на нём это не имеет никакого отношения. ВМоисеевВ свое время приводил ситуацию - выборка заказанная клиентом представляет собой таблицу из двух столбцов - x (значение переменной) и у (значение функции) за некоторый период. Выборку можно было передавать клиенту, но сеть плохая. Решено было осуществить сплайн интерполяцию (кубическую) и передавать клиенту только коэффициенты сплайна. Не думаю, что эту задачу надо (и можно ли) делать в среде SQL-сервера. Выборка вполне может представлять собой данные для линейного программирования. Опять таки, реализовывать подобные задачи в ХР?Даже если это и неудобно реализовывать на SQL (не факт, надо проверить), то может расширенную хранимую процедуру на C++/Java/C# к СУБД сбоку прикрутить проще? ВМоисеевЧто Oracle умеет выполнять операции Fox-а типа Seek или Locate?T-SQL умеет гораздо больше, про PL/SQL даже заикаться боюсь, я его не знаю, но где-то слышал, что он умеет вообще всё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 16:35 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34636875&tid=1544417]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 454ms |

| 0 / 0 |
