Формат базы данных

Основные понятия базы данных.
1. База данных - хранилище именных строк, директорий и файлов с произвольным содержанием. Размер базы данных теоретически может изменяться от 56 байт (пустая база) до 264 байт.
2. Файл - объект тело которого это произвольные бинарные данные.
3. Директория - объект тело которого это массив 8-байтных номеров индексов вложенных объектов.
4. Строка - объект тело которого это текст не содержащий символов '/' и '\' и ограниченный нулевым байтом. Используется в качестве имени для директорий и файлов.
5. Номер индекса - уникальное 8-байтное число идентификатор, у каждого объекта и строки есть свой номер индекса.
6. Индекс - не большая структура содержащая краткие данные об объекте, и дающая возможность им управлять. Для строк используются более компактные индексы, чем для директорий и файлов. У каждой такой структуры есть поле Index, которое содержит номер индекса.
7. Директория владелец - директория в которую вложены другие объекты, в индексах которых есть номер индекса данной директории в поле OBJ_INDEX.HostInd. 

База данных начинается с заголовка, в котором первые 8 байт это обязательная сигнатура "DSMBASE",0.
BASE_HEADER struc
    Signature  CHAR "DSMBASE",0 ;сигнатура
    RootIndex  ULONG64 ?        ;номер индекса корневой директории
    IndStrCnt  ULONG64 ?        ;количество индексов строк
    IndDirCnt  ULONG64 ?        ;количество индексов директорий
    IndFileCnt ULONG64 ?        ;количество индексов файлов
    ErasedCnt  ULONG64 ?        ;количество индексов удалённых объектов
    MaxIndex   ULONG64 ?        ;самый большой используемый номер индекса
BASE_HEADER ends
После заголовка идет массив индексов именных строк. Все строки уникальные, копии строк с разными индексами не допускаются. 
Всего IndStrCnt структур STR_INDEX.
STR_INDEX struc
    Index      ULONG64;номер индекса именной строки
    BaseOffset ULONG64 ? ;оффсет именной строки
    UseCount   ULONG64 ? ;количество объектов использующих строку в качестве имени
STR_INDEX ends
После массива индексов именных строк располагается массив индексов директорий. Всего IndDirCnt структур OBJ_INDEX.
OBJ_INDEX struc
    Index      ULONG64;номер индекса директории
    BaseOffset ULONG64;оффсет тела директории, тело содержит массив 8-байтных(тип ULONG64) номеров индексов вложенных объектов
    NameInd    ULONG64;номер индекса именной строки
    HostInd    ULONG64;номер индекса "директории владельца"
    FileSize   ULONG64 ? ;размер директории, всегда кратен 8
OBJ_INDEX ends
После массива индексов директорий следует массив индексов файлов. Всего IndFileCnt структур OBJ_INDEX.
OBJ_INDEX struc
    Index      ULONG64 ? ;номер индекса файла
    BaseOffset ULONG64 ? ;оффсет тела файла, тело содержит произвольные бинарные данные
    NameInd    ULONG64 ? ;номер индекса именной строки
    HostInd    ULONG64 ? ;номер индекса "директории владельца"
    FileSize   ULONG64 ? ;размер файла
OBJ_INDEX ends
После массива индексов файлов следует массив 8-байтных(тип ULONG64) номеров индексов ранее удаленных строк, директорий и файлов.
При создании новых строк, директорий и файлов они используются в первую очередь.
Далее распологаются тела директорий. Они отделены от тел файлов и строк потому-что они всегда выровнены на границу 8-байт.
Все остальное в базе приходится на тела файлов и строк. Они ни каким образом не упорядочены и не требуют выравнивания.

 

Сайт управляется системой uCoz