Для более точного понимания этого текста необходимо прочитать разделы документации расширения языка и особенно внимательно разделОО-модель. Если вы там ничего не поймете - дальше лучше не читать вообще, потому-что вопросов будет больше чем знаний.
CODB состоит из словаря (хранилище метаданных) и нескольких депозитариев для хранимых объектов.
CODB не является объектно ориентированным хранилицем как это принято в классическом ОО программировании (C++,SmallTalk,...). CODB - это объектная база данных, т.е. хранилище объектов с некоторыми элементами ориентированности.
В частности не поддерживаются "private" аттрибуты, по той простой причине, что ядро ОБД должно знать обо всех свойствах объекта. Но вместо "private" имеется возможность хранения объектов с неописанными в метаданных атрибутами.
Т.е. если в метод depository:append(obj) будет передан объект с лишними аттрибутами, то такой объект будет сохранен полностью как есть, но контроль типов и содержимого лишних атрибутов, а также индексация производится не будет.
При чтении такого объекта он будет выдан тоже полностью и всю отвественность за содержимое лишних аттрибутов берет на себя прикладной программист. Если он их не опишет в своей документации, значит эти аттрибуты будут считаться "private" :)
Наследование имеется, но только от одного суперкласса, и наследуется только состав аттрибутов и индексов. .
Полиморфизм не поддерживается, потому-что методы объектов в настоящее время не хранятся, возможно в следующих версиях CODB будет поддерживать и методы и полиморфизм. В настоящее время имеются только обработчики событий(аналоги триггеров в РСУБД), при необходимости некоторую часть полиморфизма можно реализовать через них.
Понятия:
Класс | совокупность сущностей с одинаковыми свойствами. |
Объект | сущность принадлежащая какому-то классу. |
Хранимый объект | объект предметной области, есть другое название таких объектов - "перманентный" или "постоянный". |
Комментарий: | |
В некоторых ODB, особенно основанные на C++, метаданные не являются перманентными. В таких ODB метаданные известны только во время компиляции и не хранятся в словарях. В CODB и метаданные и хранимые данные являются перманентными, потому-что храняться в БД и доступны во время выполнения. | |
Свойство | часть объекта, хранящая данные какого-то типа. |
Метод | действие, которое может производить объект. |
Метаобъект | объект, описывающий характеристики других объектов. |
Словарь | хранилище метаданных |
Депозитарий | место для хранимых объектов, структура которых описана в словаре. |
Суть | строкове значение, по которому можно легко понять содержимое хранимого объекта. |
Пространство | часть депозитария, предназначеная для хранения родственных объектов,принадлежащих разным классам. Разбивка депозитария на пространства зависит от предметной области, количества хранимых объектов, похожести объектов и, возможно, другим параметрам. Определяется на этапе проектирования предметной области. |
Если рассматривать эти понятия с точки зрения РСУБД, то:
CODB | RDBMS |
Словарь | место хранения описаний БД,таблиц,полей,пользователей, представлений,триггеров и других данных, требуемых для работы SQL-сервера |
Метаобъект | данные используемые SQL-сервером для своих внутренних нужд. |
Депозитарий | база данных |
Пространство | этого понятия в РСУБД нет, но, например, это может быть часть БД, которая хранит несколько таблиц. Например, таблицы, имена которых начинаются на букву "A",на букву "B",..... |
Класс | таблица |
Объект | строка таблицы |
Свойство | часть строки таблицы, поле записи. |
Теоретически CODB может хранить данные в любом низкоуровневом хранилище данных: TXT,SDF,XML,DBF,SQL, других ODB, CORBA,...В настоящий момент реализован только драйвер для хранения объектов в DBF+CDX файлах. Драйвер написан на CLIP и занимает примерно 60k исходного текста.
Идентификация всех объектов глобальная, т.е. по идентификатору объекта можно определить к какому словарю и депозитарию он относится.Длина идентификатора объекта определяется на этапе компиляции, конфигурация находится в codbcfg.ch. В стандартной конфигурации идентификатор любого объекта(мета или хранимого) занимает 12 байт и состоит из:
идентификатор словаря - 5 байт
идентификатор депозитария - 2 байта
идентификатор объекта в депозитарии - 5 байт.
В идентификаторе используются только читаемые английские символы и цифры,поэтому кол-во словарей ограничено 32^5 = 2^25 = ~32 000 000 словарей. У каждого словаря может быть 32^2 = ~1000 депозитариев. Количество пространств внутри депозитария практически неограничено, ограниченотолько кол-вом файлов в каталоге или кол-вом таблиц в БД SQL-сервера. Количество объектов в одном депозитарии ограничено 32^5 = ~32 000 000.
Скорость записи объектов на Cel400/128M в БД с драйвером DBF около 500в секунду, немного зависит от размера объекта. Скорость чтения безкеширования 3000 в секунду. В случае, если сделать сервер приложений и включить кеширование объектов, скорость чтения возрастет предположительно раза в 3-4.