Byte/RE ИТ-издание

СУБД Cache

Олег Сиротюк,
инженер по контролю качества компании InterSystems
sirotyuk@intersystems.ru

Реляционные базы данных были очень популярны в 1980-х — казалось, что это идеальный инструмент для описания объектов окружающего мира. В конце века отношение к этой технологии стало более критическим.

Как оказалось, реляционные базы данных очень хороши для традиционных приложений, например, систем резервирования билетов или банковских систем. Однако использование реляционного подхода не столь эффективно в таких приложениях, как АСУП, геоинформационные системы, средства для хранения и извлечения документов, работы с аудио- и видеоинформацией, а также в системах, основанных на знаниях. Это связано с примитивностью структур данных, лежащих в основе реляционной модели. В нетрадиционных приложениях базы данных содержат сотни таблиц, над которыми постоянно выполняются дорогостоящие операции соединения, необходимые для воссоздания сложных структур данных.

Серьезное ограничение реляционных баз данных — их довольно слабые возможности по части представления семантики приложений. В результате на смену реляционным пришли объектно-ориентированные системы управления базами данных (ООСУБД). Первые публикации об ООСУБД появились довольно давно, в середине 80-х гг. Возникновение ООСУБД обусловлено в первую очередь потребностями практики — необходимостью разработки сложных информационных прикладных систем. Развитие ООСУБД тесно связано с развитием объектно-ориентированных языков программирования, которые сами по себе имеют свойства, присущие ООСУБД. Основное достоинство ООСУБД — повышение уровня абстракции. Так, разработчик теперь имеет дело уже не с полями БД, а с понятиями "класс", "объект" и "свойство".

И все же есть соображения, которые удерживают разработчиков от перехода с реляционной
технологии на объектную. Основное препятствие для такого перехода — значительный
объем существующих разработок на основе реляционных СУБД. При переходе на объектную
технологию необходимо многое начинать с нуля. Кроме того, объектная технология,
поддерживаемая в ряде постреляционных СУБД, не имеет развитого и стандартизированного
языка генерации отчетов и анализа данных, каким является структурированный язык
запросов SQL. Данные проблемы были решены в постреляционной СУБД Cache компании
InterSystems (http://www.intersystems.ru).
Cache обеспечивает реализацию основных возможностей объектно-ориентированной
технологии, позволяет во многом облегчить переход с реляционной технологии на
объектную и может выступать в роле шлюза к реляционным базам данных.

Отличительная особенность СУБД Cache — независимость хранения данных от способа их представления, что достигается с помощью так называемой единой архитектуры данных Cache. В рамках данной архитектуры существует единое описание объектов и таблиц, отображаемых непосредственно на многомерные структуры ядра базы данных, ориентированные на обработку транзакций*. При этом не используется многослойная структура обработки данных, присущая СУБД — наследникам реляционной или объектной парадигмы (рис. 1). Сокращение количества уровней обработки данных позволяет сэкономить вычислительные ресурсы и значительно повысить быстродействие разрабатываемых приложений.


* См. В. Кирстен, М. Ирингер и др. "СУБД Cache. Объектно-ориентированная разработка
приложений". СПб.: "Питер", 2001.

Fig.1 Рис. 1. Структуры обработки данных.


С помощью интегрированного с БД Cache RAD-инструментария разработки приложений Cache Server Pages (CSP) можно создавать Web-приложения любого уровня сложности. При этом можно использовать классы системной библиотеки %Net, которые реализуют все основные сетевые протоколы Интернета и интрасетей: SMTP, POP3, HTTP, FTP и т. д.

Основные компоненты

Рассмотрим подробнее назначение и функциональные возможности основных компонентов системы, архитектура которой представлена на рис. 2.

Fig.2 Рис. 2. Архитектура системы Cache.


TMDM — многомерное ядро Cache

Данные в Cache хранятся в виде разреженных многомерных массивов, называемых глобалями. Количество индексов массива может быть произвольным, что позволяет описывать и хранить структуры данных произвольного уровня сложности. Индексы глобалей не типизированы, т. е. могут принадлежать к любому литеральному типу данных. Синтаксис индексов глобалей достаточно прост: индексы заключаются в скобки и отделяются запятыми. Глобаль отличается от локальной переменной знаком ^. Например, с помощью следующей глобали можно описать количество машин Mercedes SL600 черного цвета на складе:

^car("Mercedes","SL600","black")=10

Скорость доступа к индексированным переменным не зависит от числа индексов, так как глобали хранятся в виде B*-деревьев.

Немного усложняя приведенную структуру описания данных, можно определить все доступные цвета для Mercedes SL600:

^car("Mercedes","SL600","colors")=3
^car("Mercedes","SL600" ,"colors",1)="black"
^car("Mercedes","SL600" ,"colors",2)="blue"
^car("Mercedes","SL600" ,"colors",3)="white"

Применение разреженных массивов позволяет оптимизировать использование
объема жесткого диска и сократить время выполнения операций ввода-вывода.

В Cache реализована развитая технология обработки транзакций и разрешения
конфликтов. Блокировка данных происходит на логическом уровне. Это позволяет
учитывать особенность многих транзакций, выполняющих изменения небольшого
объема информации. Кроме того, в Cache реализованы атомарные операции добавления
и удаления без проведения блокировки.

Сервер Cache Objects

Объектная модель Cache (рис. 3) соответствует объектной модели стандарта
ODMG (Object Data Management Group). В соответствии со стандартом в Cache
реализовано два типа классов — классы типов данных (литералы) и классы объектов
(объекты).

Классы типов данных определяют допустимые значения констант (литералов)
и позволяют их контролировать. Литерал не может существовать независимо
от своего значения, в то время как объекты имеют уникальную идентификацию.

Классы типов данных подразделяется на два подкласса — атомарные и структурированные.
К атомарным литеральным типам в Cache относятся традиционные скалярные типы
данных (%String, %Integer, %Float, %Date и др.). В Cache реализованы две
структуры классов типов данных — список и массив.

Fig.3 Рис. 3. Объектная модель Cache.


Различают два подтипа классов объектов — зарегистрированные и незарегистрированные.
Зарегистрированные классы обладают предопределенным поведением, т. е. набором
методов, наследуемых из системного класса %RegisteredObject и отвечающих
за создание новых объектов и за управление размещением объектов в памяти.
Незарегистрированные классы не обладают предопределенным поведением, разработка
функций (методов) для них целиком и полностью возлагается на разработчика.

Зарегистрированные классы бывают двух типов — встраиваемые и хранимые.
Встраиваемые классы наследуют свое поведение от системного класса %SerialObject.
Основная особенность хранения встраиваемого класса состоит в том, что объекты
встраиваемых классов существуют в памяти как независимые экземпляры, однако
могут быть сохранены в базе данных, только будучи встроены в другой класс.

Основное преимущество использования встроенных классов — минимум издержек,
связанных с дальнейшим изменением набора одинаковых свойств классов, представленных
в виде встраиваемого объекта.

Хранимые классы наследуют свое поведение от системного класса %Persistent,
который предоставляет обширный набор функций, в частности, создание объекта,
подкачку объекта из БД в память, удаление объекта и т. п. Каждый экземпляр
хранимого класса имеет два уникальных идентификатора — OID и OREF. OID (object
ID) характеризует объект, записанный в БД, т. е. на физическом носителе,
а OREF (object reference) характеризует объект, загруженный из БД, который
находится в памяти.

Cache в полном объеме реализует все основные концепции объектной технологии:
наследование, полиморфизм, инкапсуляцию.

Предусмотрено несколько стратегий хранения объектов в БД — автоматическое
хранение в многомерной базе данных Cache; хранение в структурах, определенных
пользователем; хранение в таблицах внешних реляционных баз данных, доступных
через шлюз Cache SQL Gateway.

Сервер Cache SQL

Наряду с реализацией в полном объеме основных принципов объектной технологии
в СУБД Cache поддерживается и структурированный язык запросов SQL для выполнения
запросов в соответствии с популярным стандартом. Кроме этого, с помощью
единой архитектуры данных Cache можно автоматически преобразовывать реляционные
таблицы в классы объектов. При поступлении на сервер Cache SQL DDL-описания
реляционной таблицы программа автоматически преобразует DDL-описание во
внутреннюю структуру хранения данных и сохраняет полученную структуру в
словаре данных. Затем с помощью поставляемых в стандартной комплектации
Java- или ODBC-драйверов данные из реляционных таблиц импортируются в многомерные
структуры ядра Cache. После этого можно работать с данными как в виде реляционных
таблиц, так и в виде классов объектов. Таким образом при переходе с реляционной
технологии на объектную разработка не начинается с нуля — Cache многое делает
автоматически.

Классы Cache также могут быть представлены в виде реляционных таблиц. Соотношение
между разнообразными понятиями объектного и реляционного подходов представлены
в табл. 1.

Таблица 1. Объектные и реляционные понятия в Cache

Объектное понятие Реляционное понятие
Класс Таблица
Экземпляр Строка
Идентификатор объекта (OID) ID-столбец в виде первичного ключа
Свойство-константа Столбец
Ссылка на хранимый объект Внешний ключ
Встраиваемые объекты Индивидуальные столбцы
Коллекция-список Столбец с полем-списком
Коллекция-массив Подтаблица
Поток данных BLOB
Индекс Индекс
Запрос Хранимая процедура или представление
Метод класса Хранимая процедура

В таблице не обозначены понятия параметров класса, многомерных свойств и методов
объекта, так как в реляционной технологии им нет аналогов. Кроме объектных понятий
в Cache поддерживаются еще и триггеры, присутствующие в реляционном представлении.

Доступ к данным с помощью языка SQL продолжает играть важную роль, так
как многие существующие приложения и инструменты используют SQL в качестве
языка запросов. Для облегчения разработки приложений БД в Cache предусмотрено
встраивание SQL в методы и программы. Встроенный SQL может быть использован
для реализации сложных запросов к базам данных и для представления полученных
результатов запросов в виде значений переменных встроенного языка разработки
приложений Cache Object Script (COS). Ниже приведен пример использования
встроенного SQL-запроса:

new id, Surname
set Surname="Ivanov"
&sql(SELECT Id into :id FROM Person where Surname=:Surname)

Приведенный код ищет по полю Surname таблицы Person поле со значением
Ivanov и сохраняет найденный OID объекта в локальной переменной id.
Пример демонстрирует использование встроенного SQL-запроса, не основанного
на курсоре. В данном случае запрос всегда возвращает только одну строку.

Если же необходимо получить несколько строк из результирующей выборки
запроса, следует использовать SQL, основанный на курсоре. Курсор в данном
случае служит указателем на одну строку, при выполнении операции FETCH
он передвигается к следующей строке.

Сервер прямого доступа к данным Cache Direct

Сервер Cache Direct дает разработчику доступ к многомерным структурам
ядра системы. Встроенный в Cache язык программирования COS предоставляет
ряд функций для работы с массивами данных, или глобалями, составляющими
ядро системы. Прямой доступ к данным позволяет оптимизировать время
доступа. Для прямого доступа и работы с многомерными структурами ядра
системы можно воспользоваться утилитой эмуляции ASCII-терминала Cache
Terminal (рис. 4).

Fig.4
Рис. 4. Утилита Cache Terminal.


Средства администрирования

В стандартной поставке Cache разработчику предлагается два средства
администрирования системы — Configuration Manager и Control Panel.

С помощью Configuration Manager можно выполнить следующие функции администрирования.

  • Создать новую БД, удалить или изменить настройки существующей БД
    (с точки зрения физического хранения БД Cache — это бинарный файл
    CACHE.DAT; для каждой БД создается свой файл CACHE.DAT в отдельном
    каталоге).
  • Определить область (Namespace) для существующей БД, т. е. логическую
    карту, на которой указаны имена многомерных массивов — глобалей и
    программ файла CACHE.DAT, включая имена каталога и сервера данных
    для этого файла. При обращении к глобалям используется имя области.
  • Определить CSP-приложение. Для использования CSP-приложений необходимо
    определить виртуальный каталог на Web-сервере, физический каталог
    хранения CSP-приложений, а также несколько специфических для CSP настроек,
    например, класс-предок для CSP-приложений (по умолчанию принимается
    системный класс %CSP.Page).
  • Определить сетевое окружение Cache. В Cache реализован собственный
    протокол DCP (Distributed Cache Protocol) для работы с сетью распределенного
    окружения БД. С помощью интерфейсов Configuration Manager можно определить
    источники данных в сети, а также определить связи между различными
    компонентами сети.
  • Настроить систему Cache. Разработчику предоставляется возможность
    конфигурирования различных компонентов системы, скажем, параметров
    журналирования, настроек теневых серверов, параметров сервера лицензий,
    параметров Cache-процессов и др.

Утилита Control Panel предоставляет схожий набор функций администрирования
и добавляет ряд новых:

  • управление процессами Cache;
  • настройку параметров защиты глобалей, в частности разрешения на
    редактирование, создание и чтение глобалей различными группами пользователей;
  • определение пользователей системы с присваиванием им имен, паролей
    и параметров доступа;
  • просмотр файлов журнала (журналирование в Cache выполняется на уровне
    глобалей);
  • определение теневых серверов системы;
  • создание резервных копий баз данных.

Средства разработки приложений

В Cache реализован собственный язык программирования Cache Object Script
(COS), представляющий собой расширенную и переработанную версию языка
программирования M (ANSI MUMPS).

В первую очередь COS предназначен для написания исходного кода методов
класса. Кроме того, в Cache существует понятие Cache-программы. Cache-программа
— это не есть составная часть классов, она предназначается для написания
приложений для текстовых терминальных систем.

Для создания Cache-программ и классов применяются утилиты Cache Studio
(рис. 5) и Cache Architect (рис. 6). С помощью утилиты Cache Studio
можно создавать Cache-программы. Для удобства в Cache Studio реализована
контекстная подцветка команд, функций и операторов COS.

Fig.5
Рис. 5. Cache Studio.


Утилита Cache Architect предназначена для работы с классами Cache.
Разработчику предоставляется ряд мастеров (wizard) для создания новых
и редактирования существующих классов, методов, свойств и прочих компонентов
классов Cache.

Fig.6
Рис. 6. Cache Architect.


Для доступа к многомерным структурам ядра Cache можно воспользоваться
утилитой Cache Explorer (рис. 7). Она предоставляет ряд интерфейсов
для просмотра, импорта, экспорта и печати глобалей, классов и программ
Cache.

Fig.7
Рис. 7. Cache Explorer.


Cache Server Pages

Концепция серверных страниц Cache (Cache Server Pages, CSP) предусматривает
автоматическое создание по запросу пользователя Web-страниц, содержащих
требуемую информацию из БД Cache. Вся бизнес-логика CSP-приложений выполняется
в непосредственной близости к хранилищу данных Cache. Благодаря этому
сокращается объем данных, которыми Web-сервер обменивается с сервером
БД, что приводит к выигрышу в производительности по сравнению с другими
технологиями создания Web-приложений. Для дополнительного увеличения
производительности CSP-приложений при обмене данными между сервером
Cache и Web-сервером используются высокоскоростные интерфейсы API.

Серверные страницы Cache представляют собой текстовые HTML-файлы, расширяемые
тегами приложений Cache (Cache Application Tags, или CATs). Можно создавать
CSP-приложения с помощью стандартных средств разработки HTML-страниц
(Cache предоставляет add-in модуль для полной интеграции с Macromedia
DreamWeaver) или обыкновенного текстового редактора.

В листинге 1 приведен пример небольшого CSP-приложения, которое выводит
значения свойств объекта, хранящегося в БД Cache.

Листинг 1

<html>
<head></head>
<body> 
  <script language="Cache" runat="Server">
    set obj=##class(Sample.Person).%OpenId(1)
    write obj.Name,"<br>"
    write obj.Age,"<br>"
    do obj.%Close()
  </script>
</body>
</html>

Разработчик также может создавать собственные теги приложений Cache.

При открытии CSP-страницы в браузере Cache автоматически преобразует CSP-страницу в класс Cache (по умолчанию классом-предком для CSP-классов выступает системный класс %CSP.Page). CSP-класс — это не просто способ представления кода. Это отражение полноценной объектной модели CSP-приложения — вы можете использовать все преимущества объектного подхода, в частности наследование и полиморфизм.

После преобразования CSP-страницы в класс Cache этот класс можно редактировать c помощью Object Architect.

Для изучения CSP рекомендуется рассмотреть примеры, содержащиеся в стандартном
комплекте Cache. Для этого необходимо установить Cache и в браузере обратиться
по адресу http://127.0.0.1:1972/csp/samples/menu.csp

Версии и поддерживаемые платформы

На момент написания статьи последними версиями СУБД Cache были 4.0 и 4.1.1. На рынке высокопроизводительных СУБД Cache позиционируется как eDBMS, т. е. как СУБД, ориентированная на работу в сети Интернет и интрасетях. Разработчику предоставляется обширный набор функций, реализующих большинство стандартных Интернет-протоколов, таких, как SMTP, HTTP и POP3, имеется также развитая технология разработки динамических Web-приложений CSP. При установке система проверяет наличие Web-сервера и выполняет автоматическое конфигурирование соответствующей подсистемы.

Утилиты администрирования и инструментарий разработки приложений в версиях 4.0. и 4.1.1. схожи, существенные различия касаются лишь формата хранения данных на диске и использования ОЗУ компьютера временными библиотеками. Так, в версии 4.1.1 блок данных, который считывается с диска, может иметь объем 8 Кбайт, в то время как в версии 4.0. максимальный размер блока равен 2 Кбайт. Разумеется, при считывании блоков данных большего размера с жесткого диска сокращается количество операций ввода-вывода, что приводит к повышению производительности системы. Кроме того, в версии 4.1.1 оптимизированы функции журналирования, использования блокировок и других функций.

Список платформ, поддерживаемых Cache 4.1.1, приводится в табл. 2.

Таблица 2. Совместимость Cache 4.1.1.

Платформа Операционная система Unicode ODBC SQL- шлюз
Alpha OpenVMS 7.2, 7.3 +    
Alpha True64 UNIX 5.1 +    
HP HP/UX 11i      
IBM P Series AIX 4.3.3, 5.1 +    
Red Hat Linux (Intel) Red Hat Linux 7.1 + +  
Sun Solaris (SPARC)* Solaris 2.8 +    
SuSE Linux (Intel) SuSE Linux 7.1 + +  
Microsoft Windows Windows 95/98/ME/NT 4 (SP4, SP5, SP6)/2000 + + +
*Только для 64-разрядных.

Cache поддерживает множество национальных языков как на уровне хранимых данных,
так и на уровне локализации утилит. Кроме того, специальная утилита CNLS позволяет
создавать собственные таблицы трансляции из одного набора символов в другой,
задавать различные способы вывода непечатаемых символов и предоставляет ряд
других возможностей. При инсталляции в среде Windows Cache автоматически определяет
региональные настройки ОС и устанавливает соответствующую схему локализации.
Также предоставляется возможность установки Unicode (16bit) версии Cache. Стоит
отметить, что для русского языка поддерживаются две таблицы кодировок — Windows-1251
и ISO 8859-5.

Серверные компоненты CSP работают с такими Web-серверами, как MS IIS/PWS, Apache 1.3.12, Netscape/Sun iPlanet 4.0, Compaq Secure Web Server 1.0.

Как уже было сказано, Cache может выступать в роли шлюза к реляционным базам данных (РБД). Официально поддерживаются РБД Microsoft SQL Server (7.0 и 2000) и Oracle 8,9i.

Минимальные требования к аппаратному обеспечению для работы под ОС Windows включают процессор Intel Pentium, 64 Мбайт ОЗУ, 100 Мбайт свободного места на диске, сконфигурированный протокол TCP/IP с фиксированным IP-адресом. Наличие Web-сервера необязательно. Для тестирования CSP-приложений можно воспользоваться встроенным в СУБД Cache Web-сервером. Однако применять его для реальной работы не рекомендуется.

При установке Cache под Windows можно выбрать один из следующих вариантов установки:

  • Standard. Устанавливаются сам сервер БД Cache, ActiveX-компоненты, CSP-компоненты,
    инструментарий разработки и администрирования СУБД, документация.
  • Client. Устанавливаются клиентские компоненты администрирования и разработки
    приложений Cache.
  • Custom. Выборочная установка компонентов СУБД Cache.

После выбора варианта установки программа инсталляции Cache запрашивает информацию о размерности кодировки — 8-битовая или Unicode (16 бит). Выбор кодировки целиком и полностью зависит от требований разработчика. Следует помнить, что Cache автоматически конвертирует БД из 8-битового формата в Unicode, однако обратную конвертацию придется проводить вручную.

Завершая знакомство

В статье описана лишь малая часть того, что реализовано в Cache. Помимо описанных интерфейсов система включает ODBC- и JDBC-драйверы для представления данных из СУБД Cache в виде реляционных таблиц и работы с ними. Имеются также стандартные ActiveX-компоненты, которыми можно воспользоваться при создании пользовательского приложения в среде Visual Basic. Кроме того, предоставляется мастер создания форм Cache Form Wizard, облегчающий разработку пользовательских форм в среде Visual Basic.

В Cache реализованы интерфейсы CALLIN/CALLOUT, предназначенные для прямого вызова функций СУБД Cache из программ на C и для вызова функций операционной системы из Cache. Предоставляется интерфейс для работы с функциями DLL- библиотек.

Комплект Cache содержит модуль интеграции со средой проектирования информационных систем Rational Rose. При этом UML-диаграмму классов можно экспортировать напрямую в БД Cache. Разработчик получает возможность создавать описания классов Cache на языках Java или С++.

На середину лета анонсирован выход новой, пятой версии Cache. Бета-версию продукта
можно загрузить с сайта InterSystems (http://www.intersystems.com).
В ней имеются следующие новшества:

  • интегрированная среда разработки Cache Studio с развитым графическим отладчиком.
    Функции Cache Studio и Object Architect предыдущих версий объединены в рамках
    единой среды разработки приложений. С помощью графического отладчика можно
    отлаживать методы классов и программ Cache, а также Web-страниц CSP;
  • поддержка XML, а также языков описания XML-структур Schema, DTD. Новая версия
    поддерживает обмен (экспорт-импорт) данных и структур данных с внешними XML/Schema/DTD-документами;
  • поддержка SOAP;
  • оптимизация времени выборки данных путем индексирования по технологии BitMap;
  • новый язык описания бизнес-логики приложений на сервере — Cache Basic.
Вам также могут понравиться