Глава 12. CODB- CLIP Object Data Base.

Для более точного понимания этого текста необходимо прочитать разделы документации расширения языка и особенно внимательно разделОО-модель. Если вы там ничего не поймете - дальше лучше не читать вообще, потому-что вопросов будет больше чем знаний.

CODB состоит из словаря (хранилище метаданных) и нескольких депозитариев для хранимых объектов.

CODB не является объектно ориентированным хранилицем как это принято в классическом ОО программировании (C++,SmallTalk,...). CODB - это объектная база данных, т.е. хранилище объектов с некоторыми элементами ориентированности.

В частности не поддерживаются "private" аттрибуты, по той простой причине, что ядро ОБД должно знать обо всех свойствах объекта. Но вместо "private" имеется возможность хранения объектов с неописанными в метаданных атрибутами.

Т.е. если в метод depository:append(obj) будет передан объект с лишними аттрибутами, то такой объект будет сохранен полностью как есть, но контроль типов и содержимого лишних атрибутов, а также индексация производится не будет.

При чтении такого объекта он будет выдан тоже полностью и всю отвественность за содержимое лишних аттрибутов берет на себя прикладной программист. Если он их не опишет в своей документации, значит эти аттрибуты будут считаться "private" :)

Наследование имеется, но только от одного суперкласса, и наследуется только состав аттрибутов и индексов. .

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

Понятия:

Класссовокупность сущностей с одинаковыми свойствами.
Объектсущность принадлежащая какому-то классу.
Хранимый объектобъект предметной области, есть другое название таких объектов - "перманентный" или "постоянный".
 Комментарий:
 В некоторых ODB, особенно основанные на C++, метаданные не являются перманентными. В таких ODB метаданные известны только во время компиляции и не хранятся в словарях. В CODB и метаданные и хранимые данные являются перманентными, потому-что храняться в БД и доступны во время выполнения.
Свойствочасть объекта, хранящая данные какого-то типа.
Методдействие, которое может производить объект.
Метаобъектобъект, описывающий характеристики других объектов.
Словарьхранилище метаданных
Депозитарийместо для хранимых объектов, структура которых описана в словаре.
Сутьстрокове значение, по которому можно легко понять содержимое хранимого объекта.
Пространствочасть депозитария, предназначеная для хранения родственных объектов,принадлежащих разным классам. Разбивка депозитария на пространства зависит от предметной области, количества хранимых объектов, похожести объектов и, возможно, другим параметрам. Определяется на этапе проектирования предметной области.

Если рассматривать эти понятия с точки зрения РСУБД, то:

CODBRDBMS
Словарьместо хранения описаний БД,таблиц,полей,пользователей, представлений,триггеров и других данных, требуемых для работы SQL-сервера
Метаобъектданные используемые SQL-сервером для своих внутренних нужд.
Депозитарийбаза данных
Пространствоэтого понятия в РСУБД нет, но, например, это может быть часть БД, которая хранит несколько таблиц. Например, таблицы, имена которых начинаются на букву "A",на букву "B",.....
Класстаблица
Объектстрока таблицы
Свойствочасть строки таблицы, поле записи.

12.1. Основные понятия

  1. Теоретически CODB может хранить данные в любом низкоуровневом хранилище данных: TXT,SDF,XML,DBF,SQL, других ODB, CORBA,...В настоящий момент реализован только драйвер для хранения объектов в DBF+CDX файлах. Драйвер написан на CLIP и занимает примерно 60k исходного текста.

  2. Идентификация всех объектов глобальная, т.е. по идентификатору объекта можно определить к какому словарю и депозитарию он относится.Длина идентификатора объекта определяется на этапе компиляции, конфигурация находится в codbcfg.ch. В стандартной конфигурации идентификатор любого объекта(мета или хранимого) занимает 12 байт и состоит из:

    В идентификаторе используются только читаемые английские символы и цифры,поэтому кол-во словарей ограничено 32^5 = 2^25 = ~32 000 000 словарей. У каждого словаря может быть 32^2 = ~1000 депозитариев. Количество пространств внутри депозитария практически неограничено, ограниченотолько кол-вом файлов в каталоге или кол-вом таблиц в БД SQL-сервера. Количество объектов в одном депозитарии ограничено 32^5 = ~32 000 000.

  3. Скорость записи объектов на Cel400/128M в БД с драйвером DBF около 500в секунду, немного зависит от размера объекта. Скорость чтения безкеширования 3000 в секунду. В случае, если сделать сервер приложений и включить кеширование объектов, скорость чтения возрастет предположительно раза в 3-4.