Extra Systems Database Server

Предлагаемая версия сервера БД предназначена для работы на платформе Win32: Windows 95, 98, ME, NT, 2000, XP. Рекомендуется однако использование исключительно серверных платформ: Windows NT, XP, 2000 Server. Также рекомендуется, чтобы сервер, на котором работает данная программа был выделенным (то есть не использовался в качестве рабочей станции).

Данный сервер реализован в виде сервиса. Для его установки в систему необходимо запустить на исполнение файл esdb.exe с параметром командной строки INSTALL, а для устранения данного сервиса из системы - тот же файл, но с параметром командной строки UNINSTALL. Имеется также еще один параметр командной строки - APPLICATION, предназначенный для запуска (без предварительной установки) данного сервера в качестве приложения, а не сервиса. Однако, использование этого параметра не рекомендуется - запускать сервер как приложение, а не как сервис, является нарушением общепринятых правил.

Рассматриваемая база данных постоена по однофайловому принципу - все таблицы содержатся в одном файле. В каждый момент времени сервер Extra Systems Database может работать с большим числом таких файлов (баз данных), но каждое соединение (поток) может работать только с одной базой данных одновременно (что, впрочем, не препятствует переключению с одной базы данных на другую без разрыва соединения). В контексте любого потока при этом возможна одновременная работа с большим количеством таблиц, которые открываются и закрываются клиентом в любой момент времени (по мере необходимости) в текущей базе данных. При этом общее количество таблиц в отдельной базе данных сервером ESDB никак не ограничивается.

Файл базы данных Extra Systems построен по страничному принципу. Размер страниц в текущей реализации равен 1024 байта. В целом каждая база данных состоит из трех файлов:

При создании новой базы данных размеры всех указанных файлов минимальны и автоматически увеличиваются по мере наполнения базы данных полезной информацией. Для сохранения текущего состояния базы данных ESDB имеет процедуры удаленного и локального backup и restore.

Общее количество страниц одной базы данных ограничено величиной около двух миллиардов. Таким образом, полный размер базы данных имеет предел около двух миллиардов килобайт (поскольку размер каждой страницы равен одному килобайту). При этом следует отметить, что ESDB использует страницы для размещения информации весьма экономно: записи таблиц полностью занимают каждую отведенную таблице страницу без каких бы то ни было промежутков; если в текущей странице недостаточно места для размещения новой записи целиком, то будет размещено столько первых байт записи, сколько возможно, а оставшиеся байты будут расположены в начале новой страницы.

Сервер имеет команды для создания БД, соединения с БД, уничтожения БД, ее резервного копирования и восстановления, получения информации о сервере БД (а также таблицах и индексах), создания и удаления таблиц и индексов, чтения, удаления и изменения записей в таблицах и т.п.

Каждая таблица БД физически представляет собой массив записей, длина которых равна сумме длин полей таблицы (BLOB поля хранятся отдельно) плюс четыре байта на поле статуса каждой записи (содержащее, например, признак того, является ли данная запись актуальной или удаленной). В данное время количество записей в таблице ограничено числом приблизительно в два миллиарда. Размер каждой записи может иметь любое значение (архитектурой ESDB этот показатель не ограничивается). При открытии клиентом любой таблицы ему возвращается количество записей на момент открытия (включающее в себя и удаленные записи) и структура таблицы (размер структуры при этом ограничен числом примерно два миллиарда байт). В дальнейшем от клиента отрабатываются запросы на чтение записи с определенным номером (от единицы до текущего количества записей в таблице), изменение записи с определенным номером (ограничения на номер те же, что и при чтении), добавление новой записи и удаление записи по ее номеру (ограничения на номер те же, что и при чтении).

Для ускорения доступа к записям таблицы, создаются индексы. Их структура в ESDB является комбинированной: каждый индекс одновременно представляет собой и дерево (для быстрого двоичного поиска нужного значения ключа), и линейную последовательность, расположенную в порядке роста значения ключа (для выполнения последовательного доступа к записям таблицы). При изменении записей, удалении, добавлении индексы таблицы автоматически актуализируются. Сервер ESDB обеспечивает в любой момент времени целостность всех индексов и их полное соответствие данным самой таблицы, в том числе при аварийных отключениях клиентов. Для ускорения доступа к данным, структура индексов ESDB использует специальные методы свертки записей с одинаковым значением ключа.