Шаг 94.
Visual Prolog.
Стандартные предикаты для В+ деревьев

    На этом шаге мы рассмотрим стандартные предикаты для В+ деревьев.

Предикаты bt_create/5 и bt_create/6

    Новое В+ дерево создается с помощью предиката bt_create:

   bt_create(Dbase,BtreeName,Btree_Sel,KeyLen,Order) % (i,i,o,i,i)
   bt_create(Dbase,BtreeName,Btree_Sel,KeyLen,Order,Duplicate) % (i,i,o,i,i,i)

    Аргумент BtreeName определяет имя нового дерева. Это имя используется в дальнейшем в качестве аргумента для bt_open. Аргументы KeyLen и Order задаются в момент создания В+ дерева. После этого их изменять нельзя. Если вы вызываете bt_create/5 или bt_create/6 с аргументом Duplicates, установленным в 1, то в B+ дереве можно использовать повторяющиеся ключи. Если вы вызовите bt_create/6 с аргументом Duplicates, установленным в 0, то нельзя включать дублирующиеся ключи в В+ дерево.

Предикат bt_open/3

    Этот предикат открывает уже созданное В+ дерево, идентифицированное именем, данным в bt_create:

   bt_open/3(Dbase,BtreeName,Btree_Sel) % (i,i,o)

    В момент открытия или создания В+ дерева возвращается значение селектора В+ дерева Btree_Sel. Селектор В+ дерева принадлежит к предопределенному домену db_selector и указывает на В+ дерево, когда система выполняет операции поиска или позиционирования. Связь между именем В+ дерева и его селектором такая же, как связь между физическим именем файла и соответствующим ему символическим именем.

    Вы можете открыть данное В+ дерево более чем один раз для выполнения нескольких одновременных просмотров. Всякий раз, когда В+ дерево открыто, устанавливается описатель, и каждый описатель соответствует своему внутреннему указателю В+ дерева.

Предикаты bt_close/2 и bt_delete/2

    Предикат bt_close используется для закрытия В+ дерева, a bt_delete - для его удаления:

   bt_close(Dbase,Btree_Sel) % (i,i)
   bt_delete(Dbase,BtreeName) % (i,i)

    Обращение к bt_close высвобождает внутренние буферы с именем BtreeName.

Предикат bt_copyselector

    Предикат bt_copyselector выдает новый указатель на уже открытый селектор В+ дерева:

   bt_copyselector(Dbase,OldBtree_sel,NewBtree_sel) % (i,i,o)

    Новый селектор указывает на то же место В+ дерева, что и уже существующий. После создания оба селектора В+ дерева могут свободно перемещаться, не влияя друг на друга.

Предикат bt_statistics/8

    Предикат bt_statistics возвращает статистическую информацию для В+ дерева, указывает Btree_Sel:

   bt_statistics(Dbase,Btree_Sel,NumKeys,
            NumPages,Depth,Order,PgSize) % (i,i,o,o,o,o,o,o)

    Аргументы предиката bt_statistics описаны в таблице 1.

Таблица 1. Аргументы предиката dе_statistics
Аргумент Описание
Dbase Селектор, определяющий базу данных
Btree_Sel Селектор В+ дерева
NumKeys Общее число ключей в В+ дереве Btree_Sel
NumPages Общее число страниц в В+ дереве
Depth Глубина В+ дерева
KeyLen Длина ключа
Order Порядок В+ дерева
PgSize Размер страницы (в байтах)

Предикаты key_insert/4 и key_delete/4

    Стандартные предикаты key_insert и key_delete используются для обновления В+ дерева:

   key_insert(Dbase,Btree_Sel,Key,Ref) %(i,i,i,i)
   key_delete(Dbase,Btree_Sel,Key,Ref) % (i,i,i,i)

    Задавая предикату key_delete оба аргумента: Key и Ref - можно удалить в В+ дереве определенный элемент с двойным ключом.

Предикаты key_first/3, key_last/3 и key_search/4

    Каждое В+ дерево поддерживает внутренние указатели на свои узлы. Предикит key_first и key_last позволяют установить указатель на первый или последний узел в В+ дереве соответственно. Предикат key_search устанавливает указатель на данный ключ:

   key_first(Dbase,Btree_Sel,Ref) % (i,i,o) 
   key_last(Dbase,Btree_Sel,Ref) % (i,i,o)      
   key_search(Dbase,Btree_Sel,Key,Ref) % (i,i,i,o) (i,i,i,i)

    Предикат key_search завершается успешно, если ключ найден, в противном случае - неудачно, а внутренний указатель В+ дерева устанавливается на ключ, дующий после того, где должен был бы быть расположен ключ Key. Можно испозовать key_current, чтобы указать ключ и указатель базы данных на этот ключ. Если вы хотите указать на точную позицию в В+ дереве с двойными ключами, то можите предоставить Ref в качестве входного параметра.

Предикаты key_next/3 и key_prev/3

    Предикаты key_next и key_prev используются для перемещения указателя B+ дерева вперед или назад:

   key_next(Dbase,Btree_Sel,NextRef) % (i,i,o)
   key_rev(Dbase,Btree_Sel,PrevRef) % (i,i,o)

    Если указатель находится на одном из концов В+ дерева, то попытка передвинуть указатель далее завершится неудачно, а указатель В+ дерева будет работать так, как бы он был помещен на одну позицию вне дерева.

Предикат key_current/4

    Предикат key_current возвращает ключ с указателем базы данных, соответствующей текущему положению указателя В+ дерева:

   current(Dbase,Btree_Sel,Key,Ref) % (i,i,о,о)

    Предикат key_current завершается неудачно после обращения к предикатам bt_open, bt_create, key_insert или key_delete, а также, если указатель находится первым (используется key_prev) или после последнего ключа (key_next).

    На следующем шаге мы рассмотрим программирование внешних баз данных.




Предыдущий шаг Содержание Следующий шаг