|
Программирование >> Проектирование баз данных
представлением или интерфейсами), которые свободно могли содержать SQL-предложения и вызовы процедур базы данных. Поскольку возможности SQL*Forms версии 2 в плане трансформации данных были ограничены, программисты также сочли необходимым встраивать правила форматирования в код управления данными (на SQL). Эта практика все еще преобладает сегодня в триггерах Oracle Forms, и они содержат, например, такие предложения: SELECT INITCAP(cust name) INTO cust name FROM custs WHERE cust id = :cust id; В этом примере смешаны требование к представлению данных (интересующее только клиент) и операция управления данными (которая должна выполняться на сервере). Если теперь инкапсулировать выборку данных на сервере с помощью следующего вызова процедуры: :cust name := CUSTOMERS.FETCH NAME(:cust id); TO окажется, что мы прячем трансформацию данных внутри пакета или стоим перед необходимостью передавать форматирующий код на сервер. Гораздо проще просто возвращать данные с сервера в той форме, в которой они там хранятся, и выполнять необходимое форматирование на клиенте. Кроме того, на рис. 11.2 не отражены п-уровневые архитектуры. В этих архитектурах уровни управления приложениями, содержащие прикладную логику, находятся между клиентом и сервером данных. Важность тонких клиентов О различиях между интерфейсом и процессом мы поговорим в главе 16. Наш подход к вычислениям клиент/сервер полностью соответствует изложенной там концепции. В приложении клиент/сервер на базе Oracle нам следует стремиться к чему-то среднему между распределенной логикой и удаленным представлением данных (см. рис. 11.2) и попытаться добиться, чтобы клиент решал только непосредственно относящиеся к пользовательскому интерфейсу задачи, а сервер - все остальные, включая всю обработку запросов и обновлений, а также внедрение правил обработки данных и бизнес-правил. Ясно, что клиент сведущ в управлении представлением данных пользователю, будь то данные в графической форме, электронная таблица или экран на базе форм. Клиент обрабатывает все события, связанные с клавиатурой и мышью, рисует изображение экранной формы и позволяет манипулировать объектами, представленными на экране, и перемешаться по ним. Конечно, вы не захотите, чтобы клиентское ПО запрашивало с сервера массу необработанных данных (например, целые таблицы), а затем отбирало нужные вам данные. Это не только приведет к увеличению трафика в сети. но и значительно увеличит нагрузку на сервер. Тем не менее, мы встречали многих проектировщиков с иррациональной верой в то, что данные можно извлекать из базы данных и передавать по сети, не создавая сколько-нибудь значительной нагрузки на сервер. Сервер БД Oracle оптимизирован для селективной выборки, т.е. для выполнения реляционных операций, таких как фильтрация, проецирование и соединение, над больщими объемами данных. Серверное ПО рассчитано на прием запросов, их обработку и возвращение статуса и (или) данных за минимальное время. Не нужно, чтобы сервер рещал такие задачи, как рисование экранных изображений и выполнение программ повыщения производительности клиента. Никто, находясь в здравом уме, не порекомендовал бы такой подход. Однако просто удивительно, как много мы встречали организаций, где все клиентское ПО содержат на совместно используемом диске сервера. Почему? Потому что это облегчает распространение ПО и гарантирует, что все клиенты используют одну и ту же версию. Клиентское ПО обычно состоит из ядра, выполняющего базовые функции (оно реализовано в исполняемом файле), и набора подпрограмм в библиотеках связей (в Microsoft Windows они называются динамически загружаемыми библиотеками, или DLL). Если при обращении к подпрограмме DLL не находится в памяти, приходится загружать с сервера довольно большой двоичный файл. Это может происходить регулярно, если на клиенте недостаточно памяти. Здесь мы говорим о том, что проблема с подгрузкой исполняемых файлов характерна для ПК, однако необходимо признать, что именно в этом направлении движется компьютерная индустрия. Сначала это движение стимулировала World Wide Web, а теперь - поддержка, которую Oracle оказывает концепции сетевого компьютера. Традиционные системы клиент/сервер, как правило, включают клиентов только одного типа, но все чаще и чаще возникает потребность в оказании прикладных услуг как традиционным рабочим станциям, так и через Web-броузеры. В среде такого типа лучше вообще не иметь на клиенте никакой прикладной логики. Сетевой компьютер Oracle Что представляет собой сетевой компьютер? Идея состоит в том, что если вы используете Web-броузер, поддерживающий Java, то устройство-клиент может содержать только программы для загрузки клиента. Остальная часть нужного кода поступает по сети вместе с данными в форме апшетов. Для успешной работы размер апплетов должен соответствовать пропускной способности сети, а устройство-клиент должно энергично кэшировать принимаемые им апплеты, чтобы, когда они потребуются, их не пришлось загружать вновь. При этом возникает вопрос о непротиворечивости кэша, т.е. об обеспечении того, чтобы кэш клиента всегда содержал самую последнюю информацию. Если вы используете Netscape, то это обычно делается путем установки времени, по истечении которого элементы кэша считаются устаревшими, равным одним суткам Таким образом, клиент будет использовать устаревшую страницу максимум 24 часа. Основы SQL*Net Высокоуровневый протокол, с которым работает SQL*Net, очень прост. По сути дела, клиент передает SQL-предложения или анонимные блоки PL/SQL на сервер для выполнения, сервер обрабатывает их и посылает данные обратно клиенту. Если предложением является SELECT, то возвращаются строки (в ответ на команду FETCH, посланную клиентом). Для DML-операторов и блоков PL/SQL возвращаемые данные представляют собой код заверщения оператора и выходные параметры, если они есть. Это показано на рис. U.3. I I Клиент ВРЕМЯ
SQL и PUSQL Код завершения и данные Рис. 113. Высокоуровневый протокол архитектуры клиент/сервер Oracle В Oracle полная архитектура клиент/сервер реализована начиная с версии 5, и эта архитектура используется даже в случае, если клиент и сервер находятся на одной мащине. Как правило, Oracle применяет двухзадачную архитектуру, в которой клиент и сервер представляют собой два отдельных процесса (даже если они расположены на одной мащине). На некоторых платформах их можно объединить в один процесс, хотя обычно это не рекомендуется из-за того, что прикладная программа может повредить SGA и, следовательно, саму базу данных. Многие операционные системы, включая MVS разработки IBM и VMS разработки Digital, допускают использование привилегированных библиотек. При их наличии приложение может вызвать библиотечную программу, например сервер БД, которая обладает привилегией просматривать SGA, даже несмотря на то, что вызывающая программа этого права не имеет. Отметим, что при оперативной обработке транзакций однозадачная архитектура Oracle во многих случаях работает приблизительно на 20% быстрее, чем двухзадачная, благодаря существенному сокращению числа переключений контекста в операционной системе. В Oracle? разработчики корпорации сделали ряд важных щагов для повыщения эффективности своей архитектуры клиент/сервер. Во многих
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |