InterBase - статьи


Подробный формат страницы данных и записи


Рассмотрим формат страницы данных и записи более подробно.

Выборочно информацию возьмем из файла ods . h ( on disk structure ) из поставки Interbase ( firebird ) и опишем ее более подробно.

/* Page types */

#define pag_data 5 /* Data page */

Указывается, что страница данных идентифицируется номером 5.

#ifdef _CRAY

#define MIN_PAGE_SIZE 4096

#else

#define MIN_PAGE_SIZE 1024

#endif

#define MAX_PAGE_SIZE 16384

#define DEFAULT_PAGE_SIZE 4096

В данном листинге определяются размеры страницы: её максимальный и минимальный размер, а так же размер по умолчанию.

/* Basic page header */

Основной заголовок страницы

typedef struct pag {

SCHAR pag_type;

SCHAR pag_flags;

USHORT pag_checksum;

ULONG pag_generation;

ULONG pag_seqno; /*WAL seqno of last update*/

ULONG pag_offset; /*WAL offset of last update*/

} *PAG;

Определяется: тип страницы, флаги, контрольная сумма, номер последней измененной последовательности и смещение последнего изменения.

/* Data Page */

Определяется заголовок страницы данных

typedef struct dpg {

struct pag dpg_header;

SLONG dpg_sequence;

USHORT dpg_relation;

USHORT dpg_count;

struct dpg_repeat

{

USHORT dpg_offset;

USHORT dpg_length;

} dpg_rpt [1];

} *DPG;

Сначала идет стандартный заголовок страницы, далее следует номер последовательности в отношении, номер отношения, количество записей на странице. Далее следует повторяющаяся структура { смещение, длина } фрагмента записи.

/* Record header */

Заголовок записи

typedef struct rhd {

SLONG rhd_transaction;/* transaction id */

SLONG rhd_b_page; /* back pointer */

USHORT rhd_b_line; /* back line */

USHORT rhd_flags; /* flags, etc */

UCHAR rhd_format; /* format version */

#ifdef _CRAY

UCHAR rhd_pad [7];

#endif

UCHAR rhd_data [1];

} *RHD;

В заголовке записи определен номер транзакции, указатель на старую версию записи, флаги, версию формата записи и непосредственно данные.

Так же из файла ods . h можно узнать структуру фрагментированных записей и структуру записей поля blob . Но в данной статье мы не будем их рассматривать.

Далее определяются флаги записей

# define rhd _ deleted 1

Запись логически удалена

#define rhd_chain 2

Запись является старой версией

#define rhd_fragment 4

Запись является фрагментом

#define rhd_incomplete 8

Запись неполная

#define rhd_blob 16

Поле типа blob

#define rhd_delta 32

Предыдущая версия, различия только

#define rhd_large 64

Объект является большим

#define rhd_damaged 128

Объект известен , как поврежденный

#define rhd_gc_active 256

Мусор, мертвая версия записи




- Начало -  - Назад -  - Вперед -