СТАТЬЯ | 06.08.01 |
Обзор объектно-ориентированной СУБД Jasmine
Александр Зашихин,
Computer Associates
Статья была опубликована на сайте www.citforum.ru
Ранее, рассматривая методы, мы говорили о том, что их можно вызывать в запросах. Но в запросах можно вызывать и свойства. Именно через вложенные вызовы свойств реализуется так называемая навигация.
Проведем некоторые сравнения реляционной и объектной баз данных. Допустим надо извлечь данные из таблицы реляционной базы данных используя в качестве критерия данные из этой же таблицы.
SQL-запрос может выглядеть следующим образом:
SELECT a1 FROM R1 WHERE b1 = "abc";
означая, что мы извлекаем из таблицы R1 реляционной базы данных набор значений атрибута a1 только тех записей, у которых значения атрибута b1 являются символьной строкой abc.
В объектной базе данных ODQL-запрос может выглядеть следующим образом:
Bag <String> BS; (коллекция значений типа String ) BS = R1. a1 from R1 where R1. b1 = = "abc";
Означая, что мы извлекаем из класса R1 объектной базы данных коллекцию значений свойства a1 только тех экземпляров, у которых значения свойства b1 являются символьной строкой abc. Все очень похоже, если не считать объявления переменной BS.
Но все будет выглядеть иначе, если потребуется извлечь данные из одной таблицы, используя в качестве критерия выборки данные из другой таблицы.
SQL-запрос может выглядеть следующим образом:
SELECT a1 FROM R1 WHERE name = (SELECT a2 FROM R2 WHERE b2 = "abc");
означая, что сначала выполняется подзапрос, который извлекает из таблицы R2 значения атрибута a2 только тех записей, у которых значение атрибута b2 является символьной строкой abc, а потом выполняется запрос, который извлекает из таблицы R1 значение атрибута a1 только тех записей, у которых значение атрибута name (первичного ключа) равно значению атрибута a2 записей, выбранных из таблицы R2 подзапросом, т.е. все идет сзаду наперед. Понятно, что значение атрибута a2 может ссылаться только на значение другого атрибута, но не на кортеж или запись! Процесс можно ускорить, если атрибут name проиндексировать.
В объектной базе данных, в этом случае, второй запрос не нужен. Необходимо только уточнить, что значение свойства b2 нужного экземпляра должно быть символьной строкой abc. Это возможно потому, что любое значение свойства r2 уже является объектным идентификатором (адресом) целого экземпляра в классе R2.
ODQL-запрос может выглядеть следующим образом:
Bag <String> BS; BS = R1. a1 from R1 where R1. r2. b2 = = "abc";
Четвертая строка запроса - это пример использования вложенных вызовов свойств, т.е. навигации. Как видим, не надо никаких дополнительных запросов.
Сторонники реляционных баз данных могут ответить, что они тоже могут обойтись без дополнительных запросов используя механизм объединений. Да, этот пример можно с помощью реляционного объединения записать следующим образом (пояснить):
SELECT R1. a1 FROM R1, R2 WHERE R2. b2 = "abc" AND R1. name = R2. a2 GROUP BY R1. a1;
Но представьте, что Вам надо извлечь значения не одного атрибута нужных записей, а целых записей, используя в качестве критерия значение атрибута не из второй таблицы, а из N-й. Это значит, что в запросе за словом SELECT надо дописать все недостающие атрибуты, за словом FROM дописать все объединяемые таблицы, за словом WHERE поменять левую и правую части равенства, за словом AND поменять равенство и дописать еще N-1 равенство объединения, за словом GROUP BY дописать все недостающие отрибуты в нужном для вывода порядке.
В объектной же базе данных достаточно в объявлении переменной сменить коллекцию значений на коллекцию экземпляров и за словом where просто вложить (вставить через точку) имена свойств-связей всех добавленных классов:
Bag <R1> BR1; (коллекция экземпляров класса R1) BR1 = R1 from R1 where R1. r2. . . . = = "abc";
Надо заметить, что в объектных базах данных тоже можно использовать механизм объединений. Еще в самом начале было сказано, что в Jasmine можно делать все, что и в реляционных базах данных. Но в данном случае у нас в руках журавль навигации. Хотя синица объединения тоже может пригодиться.
Можно сделать то же самое, вызвав уже готовый метод:
. . . where R1. r2. b2. like("abc");
Если все-таки нужно выбирать кортежи, то надо поступить так:
Bag <[String r2, Integer a1]> BSI; (коллекция кортежей) BSI = [R1. r2, R1. a1] from R1 where R1. r2. b2. like("abc");
Метод like( ) выбирает все значения конкретного свойства, удовлетворяющие условию в скобках (пояснить). Кроме того, этот метод легко можно заменить другим, более совершенным (это может быть и собственный метод). Замена метода не требует каких-либо изменений в запросе, а следовательно не влияет на алгоритм приложения в целом. Нам не надо знать, как взаимодействует метод с запросом. Если Вы попробуете в SQL-запросе заменить N-й подзапрос, то Вам наверняка придется переписывать весь запрос заново и непременно проанализировать работу всего приложения.
Вот здесь надо говорить об инкапсуляции. Объект всегда инкапсулирует (скрывает) в себе какие-то детали. В Jasmine, не вдаваясь в детали объектов, мы можем заменять одни объекты другими и при этом не думать о том, как эти объекты взаимодействуют с какими-то еще объектами. Например, Вам сверху спустили новый алгоритм начисления премии, это значит, что надо создать новый метод. После того как новый метод создан можно идти следующими путями:
Методы могут быть, как мы помним, четырех уровней, т.е. на любой вкус и на все случаи жизни. Методы, как и свойства наследуется, значит их не надо переписывать. Методы, как мы видели, легко меняются. А отсюда - простота эволюции приложений. Методы заметно снижают головную боль в процессе эволюции приложений! Это к вопросу о частой смене законодательства.
Сторонники объектных баз данных считают, что именно методы наиболее сильно отличают объектную базу данных от других СУБД. А наследования, а агрегации, а абстрактные типы данных, а объектные идентификаторы, а указатели в памяти, а инкапсуляция? А мы еще будем говорить об абстрактных классах, о полиморфизме и т.д.
3.6. Возможность оптимизации при работе в узкополосных средах
Использование Web-приложений предполагает работу в узкополосных средах. Для оптимизации работы в этих случаях CA предлагает:
Для наших линий связи этого недостаточно. Хотя не всегда понятно, что подразумевают под плохой связью:
Что еще можно найти или вспомнить сегодня:
Относительно последнего: в Jasmine возможно совмещение на одном компьютере сервера и клиента. Более того, возможно совмещение до семи(!) серверов Jasmine на одном компьютере.
Если не собирать всю информацию с удаленных клиентов на центральном сервере, для последующей ее обработки, а сразу обрабатывать ее на сервере удаленного клиента (теперь клиент и сервер могут быть совмещены на удаленном компьютере), а результаты передавать на центральный сервер: с одной стороны - снизив нагрузку на линии связи, а с другой - переложив вопросы связи на плечи центрального и удаленного серверов Jasmine, т.к. они оба хорошо приспособлены для работы в узкополосных средах.
3.7. Ограничения на число одновременно обслуживаемых пользователей и масштабируемость
Представители CA утверждают, что Jasmine, благодаря многопоточности и поддержке SMP-архитектур практически не имеет ограничений на число одновременно обслуживаемых пользователей и хорошо масштабируется.
4.1. Администрирование Jasmine
В администрировании система Jasmine достаточно проста. Все, что Вам нужно, так это:
1. Знать, что в процессе инсталляции, а она начинается с запуска файла SETUP.EXE из каталога Intelnt Вашего CD с Jasmine (речь идет о версии 1.21 для платформы NT), необходимо выбрать тип инсталляции Custom и:
а) отмечать птичкой все, что имеется, только один раз отметив либо Netscape Navigator либо MS Internet Explorer.
б) оставлять все, что предлагается, выбрав только временную зону GMT3 и таблицу символов ISO88595.
в) не забыть нажать на кнопку Finish, после чего и начнется процесс инсталляции.
Имеется:
Предлагается:
2. Знать, что для настройки в каталоге . . . Jasmine\Jasmine\files> имеются 2 файла:
3. Уметь создавать пользовательские области хранения (User Store). Умение заключается в том что, при запущенном Jasmine, в окне DOS-сеанса Вам необходимо с учетом регистра ввести команду createStore указав в ней число страниц, размер страницы, имя создаваемой области хранения, каталог, в котором она должна располагаться с именем сегмента.
. . . > createStore -numberOfPages 2048 -pageSize 8 UserStore01 C:\Jasmine\Jasmine\data\us_extent01
Надо сказать, что в Jasmine есть еще три области хранения:
Причем все три области хранения создаются автоматически; системная расширяется автоматически, а рабочая и транзакционная и удаляются автоматически. Кроме того, их размер можно корректировать. Это те самые интеллектуальные кэши.
4. Уметь создавать семейства классов в пользовательских областях хранения. Умение заключается в том что, при запущенном Jasmine, в окне DOS-сеанса Вам необходимо с учетом регистра ввести команду createcf указав в ней имя создаваемого семейства классов и имя пользовательской области хранения, в которой оно должно располагаться.
. . . > createcf Cl_Family01 UserStore01
5. Уметь подключать пользователей к базе данных Jasmine используя утилиту Jasmine Connections . . . Jasmine\Jasmine\bin\conman . exe. Это можно выполнять как с помощью учетной записи, так и с помощью инсталляционного пароля. Для этого необходимо знать:
Отличие заключается в том, что при использовании инсталляционного пароля, последний по сети не передается и нет нужды в учетной записи на сервере Jasmine, поэтому вместо учетной записи используется символ *.
6. Знать, что для контроля за системой Jasmine можно использовать средства самой ОС:
Пуск > Настройка > Панель управления > Администрирование и далее Просмотр событий, Системный монитор, Службы компонентов, Управление компьютером и т.д. (Start > Settings > Control Panel > Administrative Tools).
7. Помнить, что самой надежной защитой от потери данных является их архивирование и хранение в надежном месте. Поскольку ARCserve (Управление системами архивирования и резервирования данных) поставляется отдельно, то необходимо помнить: все, что необходимо архивировать, находится в каталоге . . . Jasmine\data>, кроме файла идентификаторов (symbol.tbl) и файла конфигурации (config.dat), которые находятся, как мы знаем, в каталоге . . . Jasmine\files>. Тогда средствами резервного копирования операционной системы все это очень просто архивируется. Архивируются:
Дополнительную информацию Вы можете получить в компании Interface Ltd.
Отправить ссылку на страницу по e-mail
Обсудить на форуме Computer Associates
Interface Ltd. Отправить E-Mail http://www.interface.ru |
|
Ваши
замечания и предложения отправляйте
автору По техническим вопросам обращайтесь к вебмастеру Документ опубликован: 06.08.01 |