Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Вниз

скорость   Найти похожие ветки 

 
race1   (2002-12-30 14:38) [0]

если писать процедуру в дельфях и писать ХП, то разница в производительности будет заметна? количество записей не большое - около 200


 
Max Zyuzin   (2002-12-30 14:41) [1]

Все зависит от того, что будет делать процедура :)
Но априоре считается, что сервер более мощная машина + не нужно тащить информацию на клиента, затем ее обрабатывать, -> ХП будет работать быстрее...


 
Delirium^.Tremens   (2002-12-30 14:42) [2]


> если писать процедуру в дельфях и писать ХП, то разница
> в производительности будет заметна? количество записей не
> большое - около 200

Еще один крендель, который потом еще начнет брыкаться и говорить, что здесь "НЕПРОГРАММЕРЫ"


 
passm   (2002-12-30 14:43) [3]

race1 © (30.12.02 14:38)> IMHO определяется задачей в частном порядке.


 
Digitman   (2002-12-30 16:35) [4]


> race1


Только один комментарий - в run-time blr-код SP/view/триггера исполняется сервером в режиме интерпретации. Имей это ввиду.


 
passm   (2002-12-30 16:43) [5]

Digitman © (30.12.02 16:35)> Зависит от СУБД!


 
Digitman   (2002-12-30 17:54) [6]


> passm


Назови СУБД, в которой SP исполняется не интерпретатором


 
ORACLE   (2002-12-30 18:00) [7]

>Digitman © (30.12.02 17:54)

ORACLE


 
passm   (2002-12-30 18:05) [8]

Digitman © (30.12.02 17:54)> DB2


 
OlegE   (2002-12-30 18:06) [9]

У меня при конкретной реализации в 4 случаях - процедура быстрее, а в 4 четырех - медленнее.
Поэтому первые 4 - реализация - в ХП,
вторые 4 - реализация на клиенте.
Дошел до этого опытным путем, т.е. через 4 месяца 2 ХП заменил на обработку на клиенте, 1 обработку - с клиента перенес в ХП.
Рекомендую проверить твою реализацию и так и так, уверен выбирешь правильное решение.
...Опыт - сын ошибок трудных...


 
Prooksius   (2002-12-30 18:07) [10]

>Digitman ©
IB/FB/YA
Там сразу компилится.


 
Digitman   (2002-12-31 08:28) [11]

"Компилится" не значит, что в результате формируется "исполняемый" код. Результатом такой "компиляции" явл-ся некий токенизированный код (в IB/FB/YA - т.н. BLR-код, Binary Lanquage Representation), на основе которого в run-time строится дерево запроса, токен-узлы которого, собственно, и интерпретируются. Более того, в run-time перед исполнением запроса его хранимый blr-код преобразуется в request tree тоже в результате "компиляции")
С достаточной долей уверенности могу предположить, что эти механизмы присутствуют в том или ином виде и в DB2 и ORACLE и в MS SQL. Разница лишь во внутреннем представлении токенизированного кода запроса в той или иной СУБД (и терминах, фигурирующих по воле разработчиков для прямого и обратного преобразования кода запросов)

Посудите сами - разве можно восстановить текст SP (например, для резервного хранения скрипта базы), если эта самая SP "скомпилирована" до уровня "безымянных" маш.п/программ ?
По аналогии можно сказать, что т.н. "компилятор" для VisualBasic-проектов тоже вроде бы "компилит"-"линкует" (как и положено для генерации PE-модулей), но в любой момент времени такой VB PE-модуль можно декомпилировать до уровня практически идентичного исх.тексту. Для подобного рода сред это лишний раз говорит о том, что результатом такой "компиляции" явл-ся именно токен-код, интерпретируемый в run-time с той или иной степенью производительности и эффективности (зависит от конкр.платформы и "изобретательности" ее разработчиков, будь то ORACLE или IB или черт те что и сбоку бантик :) )


 
Sergey Masloff   (2002-12-31 08:51) [12]

>Digitman
>Посудите сами - разве можно восстановить текст SP (например, >для резервного хранения скрипта базы), если эта самая >SP "скомпилирована" до уровня "безымянных" маш.п/программ ?
ну вот тут Вы не правы. Какое "восстановление" текста при b/r? В базе хранится как blr так и сам текст процедуры в текстовом виде. И текс процедуры можно из базы удалить, оставив только blr. По которому восстановить исходный текст может и можно, но это будет практически декомпиляция, и полученый текст (если удастся декомпилировать) будет весьма далек от исходного.
Кстати, удаление текста процедуры никак не повлияет на возможность backup/restore, а вот extract metadata для нее сделать уже не удастся.

А в остальном, конечно, я согласен - blr исполняется интерпретатором.


 
Digitman   (2002-12-31 09:03) [13]


> Sergey Masloff


Я имел ввиду именно extract metadata, а не bakup/restore


> По которому восстановить исходный текст может и можно, но
> это будет практически декомпиляция, и полученый текст (если
> удастся декомпилировать) будет весьма далек от исходного


Ненамного дальше, чем в результате декомпиляции того же VB токен-кода. Здесь важно, что идент-ры из исх.текста запроса после "компиляции" хранятся и в blr-коде. А это - оч важный момент для декомпиляции. Другой вопрос, что blr-код хранит и технологические токены, такие, например, как "begin savepoint/end savepoint", которые, разумеется, в исх.тесте PSQL-предложений не фигурируют. Но это отнюдь не говорит о том, что, имея лишь blr, исходный PSQL-текст нельзя восстановить в оригинале - с тестовыми идентификаторами, ссылками и пр.)


 
Johnmen   (2002-12-31 09:13) [14]

"Преподавателю приятно говорить о том, что он хорошо знает, а не отвечать на поставленный вопрос" © (А.А. Нечаев)


 
Digitman   (2002-12-31 10:15) [15]

А для ответа на поставленный вопрос необходимо знать, какая логика и какие вспомогательные прогр.технологии используются на кл.стороне, а также, наличие возможного выноса части логики в UDF. Например, какие компоненты прямого доступа задействованы, как организовано получение рабочих НД и насколько эффективно организован доступ к ним в ВАП кл.процесса. Ибо здесь всплывает вопрос оптимального баланса между траффиком (хост клиента - хост сервера) и производительностью того или иного кода, исполняемого на той или иной стороне.

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

Минимизация кл.логики с соотв. ее переносом в ВАП сервера (в SP/Views/триггеры) минимизирует траффик, но и влечет за собой уменьшение произв-ти кода, реализующего ту же логику, но исполняемого уже в режиме интерпретации.

Оптимальное решение во многих случаях дает 3-хзвенная архитектура построения распред.приложений БД. Если AppServer процесс (2-е, промеж.звено) работает на той же машине и в том же сеансе ОС, что и сервер СУБД, то во многих случаях потери на траффике удается неплохо скомпенсировать установкой лок.коннекта между AppServer"ом и сервером СУБД (при этом транспорт между этими процессами в случае, например, с IB/FB/YA организуется с ипользованием memory mapping - механизма, что значительно эффективней любого сетевого транспорта). В то же время код AppServer"a централизует бизнес-логику и способен исполнять ее непосредственно в маш.коде (если, конечно, AppServer построен в каком-нибудь VB), избавляя тем самым сервер СУБД от необходимости исполнять ту же "навороченную" логику в режиме интерпретации.


 
Prooksius   (2002-12-31 10:16) [16]

> Johnmen © (31.12.02 09:13)
;)
А вообще-то то, о чем Digitman говорит, как о выполнении ХП интерпретатором, будет выполняться достаточно быстро, тем более, что сервер быстрый.

Всех с НОВЫМ ГОДОМ!!!


 
Digitman   (2002-12-31 10:19) [17]


> если, конечно, AppServer построен в НЕ каком-нибудь VB


))


 
Novice   (2002-12-31 10:57) [18]

2 Digitman © (31.12.02 10:15)

> при этом транспорт между этими процессами в случае, например,
> с IB/FB/YA организуется с ипользованием memory mapping

Нельзя ли по-подробнее. Очень интересно.


 
Digitman   (2002-12-31 12:11) [19]

Что "поподробней" ? Как это реализовано изнутри (1) или как задействовать этот режим программно (2)?

(1) - тебя как прикладного программера это волновать не должно, этим занимается run-time-связка между загруженными (в ВАП взаимодействующих процессов) модулями ib/fb/yaserver.exe + gds32.dll(fbclient.dll)

(2) - в кл.приложении просто используй строку коннекта, соответствующую требованиям лок.коннекта, т.е. без использования префиксов (\\ComputerName\.... - для NetBios, HostName:... - для TCP и т.д. в соответствии с док-цией на конкр.СУБД). Включение в строку коннекта префикса, указывающего координаты IB-сервера в сети, заставляет кл.часть СУБД выполнить попытку коннекта к серв.части с использованием конкретного сетевого протокола (зависит от конкретного формата строки коннекта)

Пример :
"LOCALDEVICE:\LOCALPATH\SOMEBASE.GDB" - попытка лок.коннекта

"LOCALHOST:LOCALDEVICE:\LOCALPATH\SOMEBASE.GDB" - попытка коннекта c использованием протокола TCP, несмотря на то, что LOCALHOST = 127.0.0.1 - т.е. один и тот же лок.хост, где работают и кл. и серв. части







 
Novice   (2002-12-31 12:44) [20]

Меня как прикладного программера волнует пункт 1.
Если знаешь, как это сделано, расскажи.


 
Digitman   (2002-12-31 12:51) [21]

Так ведь исходники-то открыты !)
По кр.мере - IB6 и FB

Как тебе в 2-х словах-то сказать ?

Бери WinCVS, качай их под "anonymous" с sourceforge.net да изучай на здоровье)... Все там ясно и понятно, комментариев хватает

FB RootPath = cvs.sourceforge.net/cvsroot/firebird



 
Novice   (2002-12-31 15:33) [22]

2 Digitman © (31.12.02 12:51)

Спасибо. С новым годом!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.011 c
14-72458
Pat
2003-01-04 23:34
2003.01.23
Странные вещи...


3-72037
Rule
2003-01-05 01:07
2003.01.23
Помогите с синхронизацией данных


3-72157
Behem
2003-01-04 11:55
2003.01.23
Как проще из поля int сделать автоинкрементное!!!


3-72147
ironwit
2002-12-26 10:18
2003.01.23
как проще всего отсортировать dbgrid по щелчку на колонке?


14-72466
Fantasist.
2003-01-05 07:00
2003.01.23
Хочу программировать на VCL без Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский