Ссылка и UUID

Ссылка и UUID — это разные вещи. Но при этом существует однозначное преобразование UUID в ссылку и наоборот. Ссылка представляет собой массив из 16 байт. Если рассматривать UUID как последовательность байт, то получается что в ссылке те же самые байты переставлены в другом порядке. Определение структуры GUID можно найти в файле Guiddef.h Windows SDK. Выглядит она следующим образом:

typedef struct _GUID {

   unsigned long  Data1;

   unsigned short Data2;

   unsigned short Data3;

   unsigned char  Data4[ 8 ];

} GUID;

В ссылке данные переставлены следующим образом:

— Data4 — 8 байт

— 1-й байт Data3

— 0-й байт Data3

— 1-й байт Data2

— 0-й байт Data2

— 3-й байт Data3

— 2-й байт Data3

— 1-й байт Data3

— 0-й байт Data3

 

 При автоматической генерации ссылок, UUID’ы, используемые для получения ссылок, генерируются в Windows с помощью функции Win32 API UuidCreateSequential().

Такой алгоритм генерации ссылок дает очень компактные индексы по ссылкам в файловой базе данных, так как в терминальных страницах индекса (листьях дерева) для упаковки ключей используется общий префикс. Другими словами, на терминальной странице индекса целиком обязательно записывается только первый ключ. Если последующий ключ имеет общий префикс с предыдущим, то для последующего ключа записываются только отличающиеся хвостовые байты.