3. Кодирование слов значений
Для устранения избыточности данных на физическом уровне в данной работе предлагается кодировать слова структурированных значений суррогатными кодами. Для поддержки кодирования слов значений предлагаются две дополнительные структуры хранения, одна из которых будет связывать слово значения с суррогатным кодом (прямой словарь значений), а другая – суррогатный код со словом значения (обратный словарь значений).
Обратный словарь предлагается реализовать как кластерный индекс слов значений, что позволит создавать характеристики слов значений. Такая характеристика может представлять собой некий синоним слова значения или обобщающее значение. Ключом кластерного индекса слов значений будет являться суррогатный код слова значения. Прямой словарь предлагается реализовать как некластерный индекс слов значений, который ссылается на суррогатные коды слов кластерного индекса (рис. 10).
Рис. 10. Прямой и обратный словари значений
При кодировании слов значений в кластерном индексе кодов экземпляров будут храниться не слова значений понятий, а коды слов значений (рис. 11). Для получения по кодам слов реальных значений используется обратный словарь.
Рис. 11. Кодирование слов значений
Как видно из сопоставления рис. 9 и 10 при одновременной индексации значений понятия и кодировании слов значений понятий некластерный индекс и прямой словарь могут быть объединены в рамках единой структуры (рис. 12).
Рис. 12. Некластеный индекс и прямой словарь
Таким образом, либо индексация слов значения понятия, либо кодирование слов значений понятия, либо их совместное применение приводит в процессе работы пользователей к созданию упорядоченного множества слов значений этого понятия – словаря значений понятия.
Помимо формирования словаря в процессе работы пользователей множество слов значений может быть явно введено заранее. Если слова значений должны кодироваться создаётся прямой и обратный словари, если не должны кодироваться – только словарь (рис. 13).
Рис. 13. Словарь значений понятий
Как видно из сопоставления рис. 9, 10 и 13 словарь значений понятия входит в состав некластерного индекса понятия при индексации и в состав прямого словаря понятия при кодировании слов значений.
Для любого понятия может быть указано, что оно может принимать значения только из своего словаря значений. Кроме того, для понятия может быть указано, что оно может принимать значения только из словаря значений некоторого другого понятия, при этом не важно, является ли такой словарь формируемым или предопределённым. В этом случае словарь значений представляет собой домен.
Возможность формирования словаря в процессе работы пользователей позволяет править множество значений и их характеристики не непосредственно в словаре, а в рамках некоторого высокоуровневого справочного отображения, доступного не только администратору базы данных, но и привилегированным пользователям.
4. Реализация физического уровня
Существует два возможных направления реализации физического уровня и системы в целом:
реализация с нуля;
реализация на основе какой-либо СУБД.
В первом варианте можно получить свободу и гибкость в принятии проектных решений, но при этом разработка потребует гораздо больше времени и усилий, кроме того, многие возможности существующих СУБД придётся реализовывать, по сути, заново.
Во втором варианте можно получить развитые возможности СУБД, например механизм управления транзакциями, средства защиты данных, на разработку которых были затрачены значительные усилия. Однако, если строить систему как надстройку над какой-либо SQL- или объектной СУБД, то не удастся получить необходимой гибкости в принятии проектных решений и неизбежно возникнут накладные расходы при взаимодействии «опорной» СУБД и надстройки. Эти системы не предоставляют непосредственный доступ к физическим структурам хранения, а предоставляют высокоуровневые SQL-ный или объектный интерфейсы. Так как физические структуры надстраиваемой СУБД не являются ни отношениями, ни объектами, то неизбежны потери в производительности при их представлении отношениями или объектами.
Соответственно, необходим компромиссный вариант, который с одной стороны предоставляет низкоуровневый интерфейс к структурам хранения, а с другой обладает развитыми средствами СУБД.
В данной работе в качестве такого компромиссного варианта предлагается использовать M-системы [10, 11]. Поэтому разрабатываемая система реализуется как надстройку на M-системой.
М – процедурный язык программирования без какой-либо жёсткой парадигмы. В M отсутствует декларирование переменных, единственный тип данных — это строка символов переменной длины. Идея отсутствия деклараций в М естественным образом распространяется и на массивы. Каждая переменная может представлять собой массив с переменным числом измерений, причем память занимают лишь те элементы массива, для которых определены значения, т.е. массивы являются разреженными. В качестве индексов массива разрешены любые строки символов. Индексы массивов сортируются автоматически. Переменные могут быть локальными (существующими лишь в оперативные памяти) и глобальными (существующими во внешней памяти). Глобальные переменные в М называются глобалами.
Координация доступа к глобальным переменным в многопользовательской среде осуществляется с помощью блокировок, М поддерживает обработку транзакций и сетевое взаимодействие. На этом языке могут быть реализованы все известные модели данных. Вместе с тем следует отметить, что M-системы – это, прежде всего, средство для разработки СУБД, а не собственно СУБД.
Главным достоинством М-систем является эффективный механизм управления внешней памятью в виде B*-деревьев, которые на логическом уровне представляются через глобалы. Глобалы – хранимые на диске, рассортированные по строковым индексам разреженные массивы произвольной размерности.
^G(Ind1,Ind2,...,IndN)=Value,
где
G – имя глобала;
Ind1, Ind2,..., IndN – индексы;
N – размерность массива;
Value – значение.
Основными преимуществами глобалов, используемыми в данной разработке, являются:
Сортировка элементов глобалов в момент записи, представляемая на логическом уровне (на уровне глобалов), что непосредственно позволяет использовать глобалы для построения индексов;
Сжатие ключей, что позволяет представлять логически связанные структуры, например, некластерный индекс и прямой словарь, совместно, при этом логическая избыточность на физическом уровне устраняется.
В качестве M-систем могут использоваться, система управления базами данных Cache’ от InterSystems Corporation [12, 13] или GT.M от Sanchez Computer Associates [14]. Эти СУБД обладают всеми характеристиками промышленных систем: высокой производительностью, надёжностью, масштабируемостью, открытостью и переносимостью.
Cache’ позиционируется разработчиком как постреляционная СУБД, сочетающая три модели данных и соответственно три доступа к данных: прямой (через глобалы), объектный и SQL-ный. «Постреляционность» реализована с помощью единой архитектуры данных. Она предусматривает единое описание объектов и таблиц, отображаемых непосредственно на многомерные структуры.
Cache’ является коммерческим продуктом и на сегодняшний день наиболее функциональной СУБД на основе М-технологии, к тому же хорошо документированной, в том числе на русском языке.
GT.M имеет открытую архитектуру. Реализация GT.M на x86 Linux является свободно распространяемой вместе с исходными кодами. По своим встроенным инструментальным возможностям GT.M уступает Cache’, однако благодаря открытости системы имеется возможность реализации собственных интерфейсов.
Инструментальные средства Cache’ в значительной степени ускоряют разработку приложений, однако, при эксплуатации информационной системы в качестве сервера можно использовать любую из систем.
