Софтпанорама, No.2, 1990                Составитель Н.Н. Безруков
*****************************************************************




                  С У Б Д   В Е С Т А



     ВЕСТА  -  это  система  управления  базами   данных
сетевой   организации,   основанная   на   рекомендациях
КОДАСИЛ, ориентированная на язык программирования  Си  и
обладающая высокими показателями мобильности.


        Н А З Н А Ч Е Н И Е   И   У С Л О В И Я
          П Р И М Е Н Е Н И Я   С И С Т Е М Ы


     СУБД ВЕСТА предназначена для использования  в  при-
ложениях,   требующих   высокой   скорости  обработки  и
эффективной организации постоянно обновляемой базы  дан-
ных  при относительной стабильности схемы базы и номенк-
латуры запросов к ней.  К  таким  приложениям  в  первую
очередь   относятся   комплексы   АСУ ТП  и  оперативно-
диспетчерского управления, подсистемы АСУП с непрерывной
обработкой  оперативной информации, локальные задачи АРМ
на базе персональных компьютеров.

     В меньшей степени ВЕСТА  применима  для  реализации
информационно-поисковых,  справочных и обучающих систем,
характеризуемых   постоянными   изменениями   требований
пользователя,   непредсказуемостью  типов  и  параметров
запросов, нестабильностью связей между данными и форм их
представления.   Для  подобных  приложений, где важны не
столько скорость обработки и эффективность хранения дан-
ных,  сколько  гибкость  и удобство организации диалога,
более подходят реляционные  СУБД  (INGRES,  ORACLE)  или
системы ассоциаторного типа (ADABAS, dBASE).

     СУБД ВЕСТА "ориентирована" на язык программирования
Си.  На нем написаны все ее программы, интерфейс манипу-
лирования данными представляет собой библиотеку  функций
языка  Си,  язык  описания  данных синтаксически подобен
языку Си.

     Использование  языка  Си  в  значительной   степени
предопределило  достоинства СУБД: мобильность и компакт-
ность.  ВЕСТА уже сейчас функционирует  в  среде  опера-
ционных  систем типа UNIX (ИНМОС, ДЕМОС, УНИКС-226), RSX
(RSX-11M, RSX-11M/PLUS, P/OS, ОС РВ, ПРОС-2)  и  MS-DOS.
Одна и та же СУБД может работать на самых разных ЭВМ: от
больших и мини- (СМ-1700, Электроника-79,  СМ-1420,  СМ-
1600,   СМ-4,  Электроника-100/25),  до  персональных  и
микрокомпьютеров (Электроника-85,  Искра-1030,  ЕС-1840,
Нейрон, Robotron-1910, СМ-1810, Искра-226).

     В  программах  СУБД  проведена  четкая  локализация
системно-  и  машинно-зависимых  частей.   С  небольшими
трудозатратами они могут быть перенесены на любую ЭВМ (и
операционную систему), где есть компилятор и стандартная
библиотека языка Си.

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      2                       ВЕСТА
--------------------------------------------------------


     В состав СУБД ВЕСТА входят: компилятор языка описа-
ния  данных  (ЯОД),  несколько вспомогательных программ-
утилит, библиотека функций языка Си.

     СУБД ВЕСТА поддерживает сетевую модель базы данных,
в  значительной  степени  соответствующую  рекомендациям
КОДАСИЛ.  Характерными особенностями СУБД являются:

      -индексируемые по многим ключам записи, в  которых
       ключами  могут  быть  любые  поля  данных или вся
       запись.  Допускаются как уникальные,  так  и  ду-
       блируемые ключи;

      -эффективный метод организации индексов,  основан-
       ный на алгоритме растущего В*-дерева;

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

      -отсутствие ограничений на типы наборов (иерархии,
       сети,  циклы,  петли).  Членами набора могут быть
       записи различных типов.  Тип записи-владельца на-
       бора может совпадать с типом записей-членов этого
       набора.  Запись может быть членом сразу  несколь-
       ких  наборов и одновременно владельцем одного или
       нескольких других наборов;

      -возможность манипулирования как целиком  записью,
       так  и  отдельными полями.  Полем может быть эле-
       мент данных любого допустимого в языке  Си  типа,
       массив  однотипных  элементов, структура или объ-
       единение разнотипных подполей и, наконец,  массив
       структур или объединений;

      -эффективное   управление   размещением    записей
       фиксированной  длины  в  странично-организованных
       файлах с  возможностью  повторного  использования
       пространства   страниц,   освобождающегося  после
       удаления записей;

      -ускорение обработки за счет использования  буфер-
       ного  пула  -  программно  управляемой кэш-памяти
       страниц, сокращающей число  обращений  к  внешней
       памяти на магнитных носителях;

      -возможность размещения базы данных  в  одном  или
       нескольких файлах, на нескольких томах.

     Ближайшим  аналогом  СУБД  ВЕСТА  является  система
db_VISTA  фирмы RAIMA Corp., функционирующая в среде MS-
DOS на персональных компьютерах IBM PC  и  им  подобных.
Обеспечение  программной  совместимости  с  аналогом  не
входило в  задачи  разработчика.   СУБД  ВЕСТА  обладает
более  развитыми  возможностями  организации баз данных,
согласованными   со   спецификациями   КОДАСИЛ,    имеет
расширенный  набор функций манипулирования и язык описа-

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      3                       ВЕСТА
--------------------------------------------------------

ния данных,  поддерживает  все  типы  данных  языка  Си,
функционирует на ЭВМ различной архитектуры и в различных
операционных системах.


                  Т Е Х Н О Л О Г И Я
           Р А Б О Т Ы   С   С И С Т Е М О Й


     Технология  работы  с  СУБД  ВЕСТА   иллюстрируется
следующим рисунком.


  +----------------------------+
  < описание схемы базы данных >
  +----------------------------+
                |
                v
       +----------------+
       | компилятор ЯОД |     +-----------------------+
       +----------------+     < исх. текст прикладной >
                |             < программы на языке Си >
       +--------+-------+     +-----------------------+
       |                |                         |
       v                v                         |
+----------------+  +-----------------+           |
< словарь данных >  < включаемый файл >           |
+----------------+  +-----------------+           |
    |   |                    |                    |
    |   |                    +----------------+---+
    |   |                                     |
    |   |                                     v
    |   |                             +---------------+
    |   |                             | Си-компилятор |
    |   |                             +---------------+
    |   |   +--------------------+            |
    |   |   < библиотека функций >            v
    |   |   <     СУБД ВЕСТА     >    +----------------+
    |   |   +--------------------+    < объектный файл >
    |   |             |               +----------------+
    |   |             |                       |
    |   |             +-----------------------+
    |   |                          |
    |   |                          v
    |   |                 +-----------------+
    |   |                 | редактор связей |
    |   |                 +-----------------+
    |   |                          |
    |   |                          v
    |   |               +----------------------+
    |   +-------------->| прикладная программа |
    |                   +----------------------+
    |                              |
    v                              v
+---------------------+     +-------------+
| утилиты базы данных |---->< база данных >
+---------------------+     +-------------+


     Первым делом на языке описания данных формулируется

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      4                       ВЕСТА
--------------------------------------------------------

описание  схемы  базы  данных, отражающее информационную
модель решаемой задачи.   Описание  обрабатывается  ком-
пилятором ЯОД, который порождает два файла: словарь дан-
ных, содержащий откомпилированное описание схемы в  виде
набора управляющих таблиц, и включаемый файл, содержащий
объявления структур и определения символических констант
на  языке  Си  и включаемый в текст прикладной программы
препроцессорным оператором #include.  Компилятор ЯОД  по
специальному  указанию может печатать содержимое словаря
данных.  Если в описании схемы обнаружены ошибки, компи-
лятор выдает диагностические сообщения и не создает сло-
варь данных и включаемый файл.

     Прикладная программа, работающая  с  базой  данных,
компилируется  и  объединяется  на  этапе редактирования
связей с библиотечными функциями  СУБД  ВЕСТА.   Функции
манипулируют данными, используя управляющие таблицы, ко-
торые читаются из словаря данных.

     Прежде чем выполнять прикладные программы, запуска-
ют  утилиту  инициализации базы данных, которая на осно-
вании словаря данных создает и заполняет  первоначальной
управляющей  информацией файлы базы данных.  Инициализа-
цию базы данных  можно  также  выполнить  из  прикладной
программы с помощью библиотечной функции.

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


       С Е Т Е В А Я   М О Д Е Л Ь   Д А Н Н Ы Х


     СУБД ВЕСТА поддерживает сетевую модель базы данных,
организованной в виде множества записей, содержащих поля
данных, и наборов, задающих  отношения  между  записями.
Определенные  поля  записей  могут  быть ключевыми и ис-
пользоваться  для  индексирования  (быстрого  доступа  к
записям по ключу).  Каждая запись однозначно идентифици-
руется адресом в базе данных, который не меняется в  те-
чение  всего времени существования записи в базе данных.
Адрес может сохраняться в поле данных  и  использоваться
для доступа к записи (позиционирование по адресу).

     Определение записи базы данных  подобно  объявлению
структуры  в языке Си и служит для группирования связан-
ных элементов данных, которыми программы СУБД  манипули-
руют как единым объектом.

     Множество записей (наборов) с одинаковой структурой
называется  типом  записи  (набора), а конкретная запись
(набор) определенного типа - экземпляром  записи  (набо-
ра).

     Тип набора определяется как отношение между  типами
записей,  в  котором один тип записи является владельцем
одного или нескольких типов  записей-членов.   Экземпляр
набора  содержит  один (и только один) экземпляр записи-
владельца набора и один или больше экземпляров  записей-
членов.   Таким образом, набор реализует отношение "один

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      5                       ВЕСТА
--------------------------------------------------------

ко  многим",  частным  случаем  которого  может  быть  и
отношение "один к одному".

     Между экземплярами записей-членов набора устанавли-
вается  отношение  порядка,  т.е.   определены  первая и
последняя записи в наборе, для каждой записи  (если  она
не  первая)  определена  предыдущая и (если она не посл-
едняя) следующая запись.

     Набор реализуется в СУБД ВЕСТА с помощью двунаправ-
ленной  цепочки  указателей между записями-членами, т.е.
каждый член набора связан  указателями  с  предыдущим  и
следующим  членами  и,  кроме  того,  имеет указатель на
запись-владельца набора.   Последняя,  в  свою  очередь,
имеет  указатели на первую и последнюю запись-член в на-
боре, т.е. на начало и конец  цепочки.   Программы  СУБД
автоматически  создают и корректируют цепочки указателей
в процессе манипулирования наборами.  Место для указате-
лей  неявно резервируется в записи, пpикладная программа
доступа к ним не имеет.  Реализация наборов  иллюстриру-
ется приведенным ниже рисунком.


      первая          +----------+       последняя
    +-----------------|  запись  |-----------------+
    |              -->| владелец |<--              |
    |             /   +----------+   \             |
    |            /         |          \ владелец   |
    |           /          |           \           |
    |          /           |            \          |
    |         /            |             \         |
    |        /             |              \        |
    |       /              |               \       |
    |      / владелец      | владелец       \      |
    |     /                |                 \     |
    |    /                 |                  \    |
    v   /                  |                   \   v
+--------+ следующая  +--------+              +--------+
| запись |----------->| запись |---- ... ---->| запись |
| член 1 |<-----------| член 2 |<--- ... -----| член N |
+--------+ предыдущая +--------+              +--------+


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

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

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      6                       ВЕСТА
--------------------------------------------------------

записей-членов     и    время    просмотра    возрастает
пропорционально количеству членов в наборе.

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

     Тип  набора  может   содержать   нескольких   типов
записей-членов.   Тип  записи может быть как владельцем,
так и членом нескольких типов  наборов,  причем  запись-
член  одного  набора  может  быть владельцем другого.  С
другой стороны, владельцем и членом  набора  могут  быть
записи одного типа.  Наконец, между двумя типами записей
может быть определено несколько  различных  отношений  -
типов  наборов.   Таким образом, СУБД ВЕСТА поддерживает
сетевые структуры общего вида,  включающие  многочленные
наборы, циклы и петли.

     Особый класс составляют сингулярные  наборы,  влад-
ельцем  которых объявляется системная запись предопреде-
ленного типа system.  Такие наборы моделируют традицион-
ные упорядоченные последовательные файлы.  В базе данных
может существовать только одна системная запись и только
по одному экземпляру каждого из сингулярных наборов.


      Ф И З И Ч Е С К А Я   О Р Г А Н И З А Ц И Я
                 Б А З Ы   Д А Н Н Ы Х


     База данных размещается в нескольких файлах  опера-
ционной  системы  на  устройствах  прямого доступа.  Как
минимум, используются два файла - словарь и файл данных.
В   словаре   хранится  описание  схемы  в  виде  набора
управляющих таблиц.

     Собственно информационные файлы базы разделяются на
две   категории:  файлы  данных,  содержащие  экземпляры
записей,  и  файлы  ключей,  содержащие  значения   всех
ключевых полей записей.

     База данных может объединять до 255 файлов.  Далеко
не  всякая  операционная  система  позволяет  прикладной
программе  одновременно  работать  с  таким  количеством
файлов.   Поэтому  программы  СУБД  динамически, по мере
необходимости, открывают одни файлы и  закрывают  другие
так,  что  общее  число  открытых  файлов  не  превышает
предельного значения, зависящего от реализации.

     Файлы разбиты на страницы  фиксированного  размера.
Страница   является   единицей  обмена  между  файлом  и
программой, поэтому  ее  размер  выбирается  равным  или
кратным размеру блока файловой системы в конкретной реа-
лизации (обычно 512  или  1024  байта).   В  оперативной
памяти размещается буферный пул - программно реализован-
ная кэш-память страниц.  Механизм подкачки и  вытеснения
страниц  из  пула,  использующий  информацию  о  частоте

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      7                       ВЕСТА
--------------------------------------------------------

обращений к страницам, позволяет  значительно  сократить
число физических операций ввода-вывода.  Размер буферно-
го пула (количество страниц в нем) может устанавливаться
программистом.   Чем  больше страниц в пуле, тем быстрее
работает  программа,  но  и   тем   больше   расходуется
оперативная память.

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

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

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

     Каждый  экземпляр  записи  содержит  данные   полей
записи  и  предшествующую  им  служебную информацию: код
типа записи, указатели наборов, указатели членов наборов
(см. рисунок).

                 +--------------------+
                 |   код типа записи  |
                 +--------------------+
                 | указатель набора 1 |
                 +--------------------+
                         ......
                 +--------------------+
                 | указатель набора N |
                 +--------------------+
                 | указатель члена 1  |
                 +--------------------+
                             ......
                 +--------------------+
                 | указатель члена M  |
                 +--------------------+
                 |                    |
                 |    поля  записи    |
                 |                    |
                 +--------------------+


     Код типа записи - это целое число, идентифицирующее
тип  записи и являющееся индексом элемента в управляющей

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      8                       ВЕСТА
--------------------------------------------------------

таблице словаря данных, где определен тип записи.

     Если тип записи является  владельцем  N  типов  на-
боров,  то  экземпляр записи имеет N указателей наборов.
Каждый из  указателей  содержит  адреса  в  базе  данных
первой  и  последней  записи  в  цепочке членов набора и
счетчик числа членов набора.

     Если тип записи определен в качестве члена M  типов
наборов,  то  экземпляр записи имеет M указателей членов
наборов.  Каждый из указателей  содержит  три  адреса  в
базе    данных:   записи-владельца,   предшествующей   и
следующей записи в цепочке членов набора.

     Для логического упорядочивания однотипных записей в
СУБД  ВЕСТА используется механизм индексирования записей
по ключевым полям.  Для каждого ключевого поля  в  файле
ключей  организуется индекс - набор страниц, увязанных с
помощью цепочек указателей в древовидную структуру.  Ин-
формационные  элементы  страниц  нижнего (терминального)
уровня содержат значения ключевых полей и адреса в  базе
данных  записей, содержащих эти поля.  Элементы отсорти-
рованы  по  возрастанию  значений  ключевых  полей.   На
нетерминальных  страницах  индекса  размещаются информа-
ционные элементы, каждый из которых содержит  наибольшее
значение  ключевого поля на странице нижележещего уровня
и указатель на эту страницу.

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


                     Ф У Н К Ц И И
     М А Н И П У Л И Р О В А Н И Я   Д А Н Н Ы М И


     Интерфейс манипулирования данными реализован в СУБД
ВЕСТА  в  виде  библиотеки  функций языка Си.  Ниже при-
водится  перечень  функций,  сгруппированных  по   видам
выполняемых ими действий.


     Функции управления доступом к базе данных

d_setfiles   - установить   число   доступных   файловых
               дескрипторов
d_setpages   - установить число буферов в буферном пуле
d_rousage    - запретить обновление базы данных
d_rwusage    - разрешить обновление базы данных

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      9                       ВЕСТА
--------------------------------------------------------

d_open       - открыть базу данных
d_close      - закрыть базу данных
d_sync       - принудительно записать страницы буферного
               пула в файлы базы данных
d_initialize - инициализировать новую базу данных
d_destroy    - уничтожить содержимое базы данных


     Функции манипулирования полями данных

d_crread     - прочитать данные из поля текущей записи
d_crwrite    - записать данные в поле текущей записи
d_cmread     - прочитать данные из поля  текущего  члена
               набора
d_cmwrite    - записать данные в поле текущего члена на-
               бора
d_coread     - прочитать данные из поля  текущего  влад-
               ельца набора
d_cowrite    - записать данные в поле текущего владельца
               набора
d_ctread     - прочитать данные из поля текущего экземп-
               ляра типа записи
d_ctwrite    - записать данные в поле текущего экземпля-
               ра типа записи


     Функции манипулирования записями

d_crget      - прочитать текущую запись
d_crput      - поместить данные в текущую запись
d_cmget      - прочитать запись-текущий член набора
d_cmput      - поместить данные  в  запись-текущий  член
               набора
d_coget      - прочитать запись-текущего владельца набо-
               ра
d_coput      - поместить данные в запись-текущего  влад-
               ельца набора
d_ctget      - прочитать текущий экземпляр типа записи
d_ctput      - поместить данные в текущий экземпляр типа
               записи
d_fillnew    - создать и заполнить данными новую запись
d_makenew    - создать новую запись
d_setkey     - установить значение ключевого поля
d_delete     - удалить текущую запись


     Функции доступа по ключу

d_kyfind     - найти запись по ключу
d_kyfrst     - найти запись с наименьшим значением ключа
d_kylast     - найти запись с наибольшим значением ключа
d_kyend      - позиционироваться в конец индекса  ключе-
               вого поля
d_kynext     - найти запись со следующим значением ключа
d_kycurr     - найти запись с текущим значением ключа
d_kyprev     - найти запись с предыдущим значением ключа
d_kycmp      - сравнить текущее значение ключа с  задан-
               ным значением
d_kyread     - прочитать текущее значение ключа


--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      10                      ВЕСТА
--------------------------------------------------------



     Функции манипулирования наборами

d_connect    - включить текущую запись в набор
d_discon     - исключить запись-текущий член из набора
d_members    - получить количество членов набора
d_isowner    - проверить,  является  ли  текущая  запись
               владельцем набора
d_ismember   - проверить,  является  ли  текущая  запись
               членом набора


     Функции навигации в наборах

d_owner      - найти текущего владельца набора
d_first      - найти первый член набора
d_last       - найти последний член набора
d_next       - найти следующий член набора
d_prev       - найти предыдущий член набора


     Функции назначения текущих записей

d_asro       - назначить текущей записью текущего  влад-
               ельца набора
d_asrm       - назначить текущей  записью  текущий  член
               набора
d_asor       - назначить текущую  запись  текущим  влад-
               ельцем набора
d_asmr       - назначить текущую запись  текущим  членом
               набора
d_asom       - назначить  текущий  член  набора  текущим
               владельцем другого набора
d_asoo       - назначить   текущего   владельца   набора
               текущим владельцем другого набора
d_asmo       - назначить   текущего   владельца   набора
               текущим членом другого набора
d_asmm       - назначить  текущий  член  набора  текущим
               членом другого набора
d_asrt       - назначить   текущей    записью    текущий
               экземпляр типа записи
d_asmt       - назначить текущим членом  набора  текущий
               экземпляр типа записи
d_asot       - назначить   текущим   владельцем   набора
               текущий экземпляр типа записи
d_astm       - назначить  текущий  член  набора  текущим
               экземпляром типа записи
d_asto       - назначить   текущего   владельца   набора
               текущим экземпляром типа записи


     Функции манипулирования адресами текущих записей

d_crsave     - сохранить адрес текущей записи
d_crset      - установить адрес текущей записи
d_cmsave     - сохранить адрес текущего члена набора
d_cmset      - установить адрес текущего члена набора
d_cosave     - сохранить адрес текущего владельца набора
d_coset      - установить адрес текущего владельца набо-

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      11                      ВЕСТА
--------------------------------------------------------

               ра

d_ctsave     - сохранить адрес текущего экземпляра  типа
               записи
d_ctset      - установить адрес текущего экземпляра типа
               записи


     Функции получения типа записей

d_crtype     - получить тип текущей записи
d_cmtype     - получить тип текущего члена набора
d_cotype     - получить тип текущего владельца набора


     Вспомогательные функции

d_error      - диагностировать ошибочную ситуацию
dbacmp       - сравнить значения двух адресов базы  дан-
               ных
fldcmp       - сравнить значения двух полей данных
null_dba     - проверить, не является ли адрес базы дан-
               ных нулевым


             В К Л Ю Ч А Е М Ы Й   Ф А Й Л


     СУБД  ВЕСТА  является  (по  терминологии   КОДАСИЛ)
системой с включающим языком, а именно - языком програм-
мирования Си.  Связь прикладной программы  с  конкретной
базой  данных  обеспечивается динамически, через словарь
данных и  вызовы  библиотечных  функций,  и  статически,
через   включаемый  файл  и  макросредства  стандартного
препроцессора языка Си.

     Включаемый  файл  создается  компилятором  ЯОД  при
обработке  описания  схемы  базы  данных.   Он  содержит
объявления структур языка Си, соответствующие всем типам
записей  в базе данных.  Имена структур совпадают с име-
нами типов, а имена элементов структур - с именами полей
данных.  Компилятор ЯОД обеспечивает адекватность предс-
тавления и размещения данных в структурах в  оперативной
памяти и в записях базы данных, с учетом правил выравни-
вания и размера типов данных в конкретной реализации.

     Включаемый файл содержит также ряд  препроцессорных
операторов #define, определяющих символическими констан-
тами коды типов записей,  полей  и  наборов.   Идентифи-
каторы  констант получаются из имен типов записей, полей
и наборов  заменой  строчных  букв  соответствующими  им
прописными   буквами.   Символической  константой  VESTA
определяется строка символов - имя базы данных.

     В начало  текста  прикладной  программы  помещается
препроцессорный оператор

              #include "имя_базы_данных.h"

и, таким  образом,  становится  доступной  информация  о

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      12                      ВЕСТА
--------------------------------------------------------

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

     Использование   включаемого   файла    обеспечивает
определенную  независимость  программ  от данных.  Можно
изменить тип числового поля (например, float на  double)
или  добавить  новые поля в запись и при этом достаточно
будет просто перетранслировать программы, поскольку  все
изменения  отразятся  только на включаемом файле.  Более
серьезные изменения спецификаций данных (например, заме-
на  числового  поля  символьной  строкой)  могут повлечь
корректуры в тексте прикладной программы.


         У П Р А В Л Е Н И Е   Д О С Т У П О М


     Работа с базой данных  начинается  вызовом  функции
d_open, а заканчивается вызовом d_close.  Функция d_open
"открывает" базу данных, т.е.  читает файл-словарь  дан-
ных,  размещает в оперативной памяти управляющие таблицы
и буфера, выполняет их инициализацию.   Функция  d_close
"закрывает" базу данных, т.е. записывает страницы буфер-
ного пула  в  файлы  базы  данных,  освобождает  память,
занятую таблицами и буферами.

     Завершение работы прикладной программы  без  вызова
функции  d_close чревато неприятными последствиями, чему
виной  использование  буферного   пула   с   дисциплиной
отложенного  вывода.   Алгоритмы,  по  которым  работают
программы СУБД, весьма сходны с алгоритмами  супервизора
ввода-вывода  в  операционных  системах типа UNIX: обмен
данными с файлами  производится  порциями  фиксированной
длины - страницами; в оперативной памяти отводится место
для хранения некоторого числа страниц  -  буферный  пул;
изменения информации на страницах выполняются в буферном
пуле, физическая же запись в файлы может произойти  зна-
чительно позже.  Такой механизм буферизации резко снижа-
ет количество операций ввода-вывода,  но  он  же  вносит
рассогласование между содержимым базы данных и фактичес-
ким содержимым файлов в момент обработки.  Вызов функции
d_sync,   которая  принудительно  записывает  измененные
страницы буферного пула в файлы,  устраняет  такое  рас-
согласование.

     Имеется несколько функций, которые  можно  вызывать
до   открытия   базы   данных.    Функции  d_setfiles  и
d_setpages устанавливают параметры (количество доступных
файловых  дескрипторов  и  количество страниц в буферном
пуле),  отличные  от  значений  по  умолчанию.   Функция
d_rousage   устанавливает  режим  открытия  базы  данных
только на чтение, при котором не будут выполняться функ-
ции,   изменяющие   содержимое   базы  данных.   Функция
d_rwusage восстанавливает  режим  работы  по  умолчанию,
разрешающий как чтение, так и обновление базы данных.

     Для работы с временными базами  данных,  содержимое
которых  не нужно сохранять по завершении программы, ис-
пользуются функции d_initialize  (инициализировать  базу

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      13                      ВЕСТА
--------------------------------------------------------

данных) и d_destroy (уничтожить базу данных).

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


              Т Е К У Щ И Е   З А П И С И


     Навигация и манипулирование данными в  СУБД  ВЕСТА,
как и в любой другой сетевой СУБД, основаны на механизме
текущих записей (по терминологии КОДАСИЛ  -  индикаторов
текущего  состояния).   Функции  манипулирования данными
сохраняют  и  используют  значения  адресов   нескольких
записей, называемых текущими.  К ним относятся:

      -текущая запись;

      -текущий владелец  набора  (по  одному  адресу  на
       каждый тип набора);

      -текущий член набора (по одному адресу  на  каждый
       тип набора);

      -текущий экземпляр типа записи (по  одному  адресу
       на каждый тип записи).

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

     В момент открытия базы данных текущей записью явля-
ется  системная  запись,  если  она определена в базе, в
противном случае адрес текущей записи  нулевой.   Адреса
текущих членов и владельцев всех наборов нулевые.  Адре-
са  экземпляров  всех  типов  записей,  кроме  системной
записи,  также  нулевые.   Нулевой  адрес  означает, что
соответствующая текущая запись не определена.

     Адреса текущих записей используются для  доступа  к
данным.   Так,  функции навигации в наборах и доступа по
ключу неявно изменяют адреса  текущих  записей,  функции
назначения  и  манипулирования адресами делают это явным
образом.  Функции манипулирования полями и записями  чи-
тают и изменяют информацию в текущих записях.


             М А Н И П У Л И Р О В А Н И Е
           З А П И С Я М И   И   П О Л Я М И


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

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      14                      ВЕСТА
--------------------------------------------------------

ции, позволяющие прочитать из  записи  или  поместить  в
запись  содержимое  указанного поля.  Эти операции можно
выполнить с любым полем любой из текущих записей.   Иск-
лючение составляют только подполя ключевого структурного
поля.  Их значения нельзя менять иначе, как изменяя зна-
чение  целиком всей структуры.  Если изменяется содержи-
мое ключевого  поля,  то  автоматически  перестраивается
индекс этого поля в файле ключей.

     Функции второй группы манипулируют  записями  цели-
ком.   Можно  прочитать  или  изменить  текущую  запись,
текущего владельца  или  текущий  член  набора,  текущий
экземпляр  типа  записи.   Удалить  можно только текущую
запись, при этом необходимо, чтобы запись не была членом
или владельцем набора.

     Существует два  способа  помещения  в  базу  данных
новых записей.  Программист может подготовить содержимое
записи в  какой-нибудь  структуре  (рабочей  области)  и
вызвать   функцию   d_fillnew,  передав  ей  в  качестве
аргумента адрес этой  структуры.   Функция  разместит  в
базе  данных  новую  запись и скопирует в нее содержимое
адресуемой  структуры.   Значения  всех  ключевых  полей
записи  будут внесены в соответствующие индексы в файлах
ключей.

     Альтернативный  подход  основан  на   использовании
функции   d_makenew,   которая  создает  в  базе  данных
"пустую" запись.  Все неключевые  поля  в  такой  записи
будут  иметь  нулевые значения.  Для их заполнения можно
использовать функции манипулирования  полями.   Ключевые
поля  вновь  создаваемой  записи должны быть определены,
чтобы можно было внести  ссылки  на  запись  в  индексы.
Поэтому,  перед  вызовом  d_makenew  с  помощью  функции
d_setkey каждому ключевому полю присваивается значение.

     Для  правильного  использования  функции   d_setkey
следует  знать  принцип ее работы.  Функция организует в
памяти список, каждый элемент которого содержит значение
ключевого  поля.   Первоначально  список  пуст.   Каждый
вызов d_setkey либо отводит в памяти (с помощью  функции
calloc)  новый  элемент списка, либо заменяет содержимое
существующего  элемента.   Память,  занятая   элементами
списка, освобождается при закрытии базы данных.  Функция
d_makenew просматривает список и использует значения тех
ключевых  полей, которые входят в создаваемую ею запись.
Если создается несколько записей с одинаковыми значения-
ми  (неуникального) ключевого поля, функцию d_setkey для
этого поля можно вызвать только один раз.

     Функцией   d_setkey   нельзя   назначить   значение
ключевому  подполю  - элементу ключевого же структурного
поля.  Такое ограничение введено во избежание  ситуаций,
когда  подполе  в составе структурного поля получит одно
значение и оно же в качестве отдельного ключевого поля -
другое  значение,  в  результате чего в индексы ключевых
полей занесется противоречивая информация.

     При создании новых записей и обновлении  существую-
щих для всех входящих в запись уникальных ключевых полей

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      15                      ВЕСТА
--------------------------------------------------------

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


             Д О С Т У П   П О   К Л Ю Ч У


     Для работы с  индексами  ключевых  полей  программы
СУБД  организуют  в  памяти управляющую структуру, в ко-
торой отражается траектория движения по иерархии страниц
в  файле  ключей от верхней страницы индекса конкретного
ключевого поля до терминальной страницы, содержащей зна-
чение  поля.   Функции  доступа  к  записям по ключу ис-
пользуют индексы для определения адреса  в  базе  данных
искомой записи.  Найденная запись становится текущей.

     Одна группа функций осуществляет прямое  позициони-
рование  в  индексе,  т.е.  просматривает его с верхнего
уровня и  настраивает  управляющую  структуру.   Функция
d_kyfind   отыскивает   в  индексе  элемент  с  заданным
значением ключевого поля, а если таковой не найден -  то
элемент  с наибольшим из значений, не превышающих задан-
ное.  В последнем случае текущая запись не  устанавлива-
ется.   Функции  d_kyfrst  и  d_kylast позиционируются в
индексе на первый (с наименьшим значением)  или  на  по-
следний   (с  наибольшим  значением)  элемент.   Функция
d_kyend  подобно  d_kylast  делает  текущей   запись   с
наибольшим  значением ключевого поля, но позиционируется
в индексе за последним элементом.  Позицонирование перед
первым   элементом  может  выполнять  функция  d_kyfind,
устанавливая в  качестве  текущей  запись  с  наименьшим
значением ключевого поля.

     После позиционирования в индексе, его можно  скани-
ровать  в  прямом  или  обратном  направлении  функциями
d_kynext и d_kyprev.

     Текущее позиционирование в индексе конкретного клю-
чевого  поля  сохраняется  до тех пор, пока оно не будет
перенастроено  вызовом   функций   d_kyfind,   d_kyfrst,
d_kylast,  d_kyend  или аннулировано функциями создания,
удаления или  обновления  записей,  содержащих  ключевые
поля.   Функции, манипулирующие наборами, типами и адре-
сами записей не меняют позиционирование в индексе.

     Функция d_kycurr делает текущей запись,  адресуемую
текущим элементом индекса.  Функция d_kyread читает зна-
чение ключевого поля из  текущего  элемента  индекса,  а
функция d_kycmp - сравнивает его с заданным значением.


           Р А Б О Т А   С   Н А Б О Р А М И


     В СУБД ВЕСТА с помощью наборов  задаются  отношения
между  записями.  Если механизм индексирования позволяет
упорядочить все экземпляры однотипных записей по возрас-
танию  значений  ключевых  полей, то наборы обеспечивают

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      16                      ВЕСТА
--------------------------------------------------------

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

     Функция d_connect  осуществляет  включение  текущей
записи в набор указанного типа, идентифицируемый адресом
текущего владельца набора.  Включаемая запись не  должна
быть членом какого-либо экземпляра указанного типа набо-
ра.  Позиция, которую займет включаемая запись в цепочке
записей-членов  набора, определяется дисциплиной включе-
ния в набор, заданной в описании схемы базы данных.

     Функция d_discon исключает из  набора  его  текущий
член.   Используя  последовательности  вызовов d_discon,
d_connect можно перемещать записи из  одного  экземпляра
набора в другой.

     Функция d_owner находит  запись,  которая  является
владельцем экземпляра набора, включающего текущую запись
в качестве члена.  Найденная запись становится текущей.

     Функции  d_first   и   d_last   предназначены   для
позиционирования  в  наборе.   Они  отыскивают, соответ-
ственно, первую или последнюю запись  в  цепочке  членов
текущего экземпляра набора и делают эту запись текущей.

     Функции d_next и d_prev предназначены для  сканиро-
вания  наборов.   Они отыскивают, соответственно, следу-
ющую или предыдущую запись в цепочке членов набора и де-
лают ее текущей записью и текущим членом набора.

     Функция  d_members  позволяет  получить  количество
записей-членов  в  текущем  экземпляре набора, а функции
d_ismember и d_isowner - проверить, является ли  текущая
запись членом или владельцем одного из экземпляров набо-
ра указанного типа.


             М А Н И П У Л И Р О В А Н И Е
   А Д Р Е С А М И   И   Т И П А М И   З А П И С Е Й


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

     Функции d_crsave, d_cmsave, d_cosave, d_ctsave поз-
воляют  получить  (запомнить  в переменной типа DB_ADDR,
поместить в поле типа db_addr) значения  адреса  текущей
записи,  текущего  члена  или владельца набора, текущего
экземпляра типа записи.

     Функции d_crset, d_cmset, d_coset, d_ctset присваи-
вают адресам текущих записей сохраненные ранее значения.

     Работа функций назначения текущих записей фактичес-

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      17                      ВЕСТА
--------------------------------------------------------

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

   ***********  d_asrt                 **************
   *         *<------------------------*  текущие   *
   * текущая *                         * экземпляры *
   * запись  *  d_asro         d_astm  *   типов    *
+->*         *<---------     --------->*  записей   *<-+
|  ***********          \   /          **************  |
|         |              \ /               |           |
|d_asrm   |d_asmr         \/          d_asot|     d_asto|
|         v              / \               v           |
|  ***********  d_asmt  /   \  d_asor  **************  |
+--* текущие *<---------     --------->*  текущие   *--+
   *  члены  *                         * владельцы  *
+->* наборов *<----------------------->*  наборов   *<-+
|  ***********  d_asmo         d_asom  **************  |
|         |                                |           |
|  d_asmm |                                |   d_asoo  |
+---------+                                +-----------+


     Получить  в  программу  код  типа  текущей  записи,
текущего  члена  или  владельца набора позволяют функции
d_crtype, d_cmtype и d_cotype.  Поскольку для типа набо-
ра  однозначно  определен  тип записи-владельца, функцию
d_cotype имеет смысл использовать  только  в  программах
обработки ошибочных ситуаций.


      О Г Р А Н И Ч Е Н И Я   Р Е А Л И З А Ц И И


     Ниже дается сводка всех количественных  ограничений
и параметров реализации СУБД ВЕСТА:

 Размер страницы
       -равен или кратен размеру блока файловой системы.
       Для  реализаций в операционных системах типа UNIX
       и MS-DOS обычно равен 1024 байтам, для  УНИКС-226
       и RSX-11M - 512 байтам.  Размер страницы является
       параметром настройки и может  иметь  произвольное
       значение;

 Максимальный размер записи
       -определяется размером страницы, поскольку запись
       должна целиком помещаться на странице, а именно:

             размер записи <= размер страницы - 6;

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

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      18                      ВЕСТА
--------------------------------------------------------

       затели наборов и/или указатели членов,  то  соот-
       ветственно   уменьшается  ее  "полезный"  размер.
       Каждый указатель  набора  занимает  8  байтов,  а
       каждый указатель члена набора - 9 байтов;

 Размер ключевого поля
       -зависит от размера страницы.  Должно выполняться
       соотношение:

       размер ключевого поля <= (размер страницы - 48)/4

       В частности,  при  размере  страницы  512  байтов
       ключевое  поле  не  может быть больше 116 байтов,
       при размере 1024 - не более 244 байтов;

 Количество полей в записи,
 подполей в структурном поле
       -ограничивается только размером записи;

 Количество элементов в поле-массиве
       -ограничивается  размером  записи.   Кроме  того,
       массивы  структур  и  объединений  не могут иметь
       более 256 элементов;

 Количество записей в одном файле
       -не может быть больше 65535;

 Количество записей-членов в наборе,
 записей-владельцев набора
       -ограничивается количеством записей в файле;

 Количество файлов в базе данных
       -не может превышать 255;

 Суммарная емкость базы данных
       -не более 16711425 записей.  При среднем  размере
       записи  в 100 байтов объем базы данных может сос-
       тавлять более полутора миллиардов байтов;

 Количество полей, типов записей и наборов
       -практически неограниченное.   В  описании  схемы
       базы  данных  может  быть  объявлено  32767 типов
       записей и столько же  типов  наборов.   Суммарное
       количество  полей во всех типах записей не должно
       превышать 32767.  Столько  же  может  быть  полей
       упорядочивания  и типов членов наборов.  Реальные
       ограничения накладывает объем доступной оператив-
       ной  памяти.  При открытии базы данных резервиру-
       ется память под управляющие таблицы, причем, рас-
       ходуется:

          10 байтов - на каждый файл,
          14 байтов - на каждый тип записи,
          16 байтов - на каждое поле,
          10 байтов - на каждый тип набора,
           8 байтов - на каждый член набора,
           4 байта  - на каждое поле упорядочивания;

 Количество буферов в буферном пуле
       -по   умолчанию   20.    Может   переопределяться

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      19                      ВЕСТА
--------------------------------------------------------

       функцией  d_setpages.   Минимальное значение - 5.
       Максимальное   значение   определяется    объемом
       доступной  оперативной  памяти.   Размер  каждого
       буфера равен размеру страницы плюс 10 байтов;

 Количество доступных файловых дескрипторов
       -может    назначаться    функцией     d_setfiles.
       Минимальное  значение - 5.  Максимальные значения
       по умолчанию:

          16 - для систем типа UNIX и RSX-11M,
          12 - для ОС УНИКС-226,
          16 - для системы MS-DOS.

 Размеры типов полей
       -поле типа db_addr занимает 3 байта.  Поля  типов
       char,  int,  long,  unsigned, float, double имеют
       точно такие же размеры,  правила  выравнивания  и
       формы  представления, что и одноименные типы дан-
       ных языка Си в конкретной реализации.

     Из вышеизложенного видно, что принципиальное значе-
ние  имеют  только  два  ограничения  реализации: размер
страницы и максимальное количество записей в файле.  Все
прочие  параметры  либо  производные  от этих двух, либо
столь велики, что практически недостижимы.

     Не представляет труда  увеличить  размер  страницы.
Для  этого  достаточно перетранслировать программы СУБД.
На ЭВМ с большим адресным пространством  (например,  СМ-
1700) такая версия СУБД может оказаться полезной.

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


          К О М П Л Е К Т Ы   П О С Т А В К И


     В настоящее время заказчику могут  быть  поставлены
следующие реализации СУБД ВЕСТА:

      -для мини-ЭВМ, архитектурно совместимых с семейст-
       вом  PDP-11 (СМ-4, СМ-1420, СМ-1600, Электроника-
       100/25, Электроника-79 и др.), оснащенных  опера-
       ционными системами типа UNIX (ИНМОС, ДЕМОС).  По-
       ставка на магнитной ленте.  Ориентировочная стои-
       мость 4000-5000 руб. в зависимости от комплекта.

      -для мини-ЭВМ, архитектурно совместимых с семейст-
       вом  PDP-11  и оснащенных операционными системами
       типа  RSX  (RSX-11M  версии  не  ниже  3.2,  RSX-
       11M/PLUS, ОС РВ версии не ниже 3.0).  Поставка на
       магнитной   ленте.    Ориентировочная   стоимость
       4000-7000 руб. в зависимости от комплекта.

      -для персональной ЭВМ  Электроника-85,  оснащенной
       операционной  системой ПРОС-2 или P/OS версии 2 и

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      20                      ВЕСТА
--------------------------------------------------------

       выше.   Поставка  на  дискетах.   Ориентировочная
       стоимость  4000-7000  руб.  в зависимости от ком-
       плекта поставки.

      -для персональной ЭВМ "Искра-226", оснащенной опе-
       рационной  системой  УНИКС-226.  Поставка на маг-
       нитной ленте.  Стоимость 1500 руб.

      -для персональных  ЭВМ  типа  IBM PC  (Искра-1030,
       ЕС-1840,  Нейрон, Robotron-1910), оснащенных опе-
       рационной системой MS-DOS.  Поставка на дискетах.
       Ориентировочная  стоимость  1500-2000  руб. в за-
       висимости от комплекта поставки.

      -для  персональных  ЭВМ  типа  IBM PC-AT,  AT-386,
       PS/2,  работающих  в  среде  UNIX/XENIX System V.
       Поставка на дискетах.  Ориентировочная  стоимость
       2000 руб.

      -для АРМ и персональных ЭВМ на базе микропроцессо-
       ра  MC680X0  (БЕСТА-88),  оснащенных операционной
       системой UNIX System V.   Поставка  на  дискетах.
       Ориентировочная стоимость 2000 руб.

     Комплекты поставки включают исполнимые модули  ком-
пилятора ЯОД и команд-утилит, библиотеки объектных моду-
лей функций манипулирования данными,  включаемые  файлы,
контрольный  пример и документацию ("Руководство пользо-
вателя")  на  магнитном   носителе.    Исходные   тексты
программ не поставляются.

     Базовый комплект поставки для систем ИНМОС и  ДЕМОС
включает библиотеки объектных модулей для компоновки как
обычных, так и оверлейных программ, работающих  с  базой
данных.

     Для среды RSX и P/OS имеются два комплекта  постав-
ки: базовый и расширенный, включающий монитор управления
базой  данных,   вынесенный   в   отдельную   задачу   и
взаимодействующий   с   прикладной  задачей  посредством
транспортной службы межзадачного обмена (PI-драйвер).  С
III  квартала  планируется  поставка  версии  "с  полным
мультидоступом", обеспечивающей работу  многих  задач  с
одной   базой  данных  в  режиме  коллективного  доступа
(нынешние версии  СУБД  разрешают  только  одновременное
чтение данных).

     П_Р_И_М_Е_Ч_А_Н_И_Е

     Для функционирования СУБД ВЕСТА в среде RSX и  P/OS
необходимо,  чтобы  на  ЭВМ пользователя была поставлена
инструментальная система RSiX-C, хотя бы  в  минимальной
конфигурации,  включающей  компилятор  полного языка Си,
библиотеку  стандартных  системно-независимых   функций,
Си-интерфейс  с  управляющей  программой RSX, PI-драйвер
транспортной службы  межзадачного  обмена  и  библиотеку
поддержки системных вызовов UNIX.

     Следует отметить, что система RSiX-C ценна сама  по
себе (не только как средство поддержки СУБД ВЕСТА).  Эта

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      21                      ВЕСТА
--------------------------------------------------------

система   создает   в   RSX   среду    программирования,
функционально  подобную  среде UNIX и включающую (помимо
указанных  выше  компонент):   средства   проектирования
программ  (make,  lex,  yacc),  документирования (nroff,
rio), обработки текстов (grep, awk, m4), редакторы  (ed,
sed),  утилиты (tar, dd, cpio) и др.  Компонентом RSiX-C
является также пакет SCREEN - средство  организации  по-
лиэкранного  режима работы с терминалом - включающий би-
блиотеку интерфейсных функций языка Си,  редактор  форм,
монитор  управления  окнами.  Имеющаяся в составе RSiX-C
библиотека функций Си-интерфейса СУБД КАРС (ORACLE) поз-
воляет  применять в крупных АСУ комплексные базы данных,
где   уровень    оперативно-диспетчерского    управления
поддерживается средствами сетевой СУБД ВЕСТА (скорость),
а информационно-поисковые и аналитические задачи решают-
ся  средствами реляционной СУБД КАРС (гибкость, удобство
диалога).

     Стоимость системы RSiX-C 3000-7000 руб.  в  зависи-
мости от состава поставляемых средств.


            У С Л О В И Я   П О С Т А В К И


     СУБД ВЕСТА поставляется на  основе  заключения  до-
говоров  на  передачу научно-технической продукции.  Вне
зависимости  от  срока  действия  договора  разработчики
осуществляют сопровождение программного продукта в тече-
ние  всего  времени  его  эксплуатации.    Сопровождение
подразумевает  безвозмездную  поставку пользователю всех
исправленных и модифицированных версий системы, а  также
всех   улучшений   и   расширенных   средств   в  рамках
приобретенного комплекта.

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

     Пользователю оказывается консультативная помощь при
внедрении  и  эксплуатации системы.  Передача системы на
дистибутивном носителе  и  консультации  производятся  в
Киеве,  т.к.   разработчики  лишены возможности ездить в
командировки к своим пользователям.

     При заказе системы необходимо дать точные  сведения
о типе и модификации ЭВМ, версии и редакции операционной
системы, указать требуемый комплект поставки, свои  поч-
товые и финансовые реквизиты, телефоны.

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






--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
ВЕСТА                      22                      ВЕСТА
--------------------------------------------------------


        О П Ы Т   И С П О Л Ь З О В А Н И Я   И
        П Е Р С П Е К Т И В Ы   Р А З В И Т И Я


     Опыт эксплуатации СУБД ВЕСТА  пока  еще  небольшой.
Однако,  уже  можно  говорить  о  ее  высоких скоростных
характеристиках.  Так, проводившиеся на  ЭВМ  СМ-1420  в
среде RSX-11M сравнительные испытания производительности
СУБД КАРС и ВЕСТА показали на однотипных тестовых задач-
ах выигрыш в скорости последней в 35-40 раз при загрузке
базы и в 30-35 раз при  выборке  из  базы.   СУБД  ВЕСТА
выполнила  3000  обращений  к базе данных за 73 секунды.
Причем, резервы увеличения реактивности  системы  далеко
не исчерпаны.

     СУБД ВЕСТА постоянно развивается.   Сейчас  ведется
работа  по  совершенствованию физических структур хране-
ния,  что  помимо  ускорения  доступа  должно   повысить
емкость   базы  данных.   Планируется  выделить  функции
низкоуровнего обмена в отдельный пакет  методов  доступа
(менее ресурсоемкий, чем "полная" СУБД).  Представляется
полезной  возможность  хранения   и   обработки   данных
переменной длины.

     Направления развития системы во многом определяются
требованиями  пользователей.   Разработчики  будут  рады
получить от пользователей "обратную связь" - предложения
по  совершенствованию  и  расширению  возможностей СУБД,
замечания о выявленных в процессе эксплуатации ошибках и
неэффективностях.  Нам очень интересна информация о кон-
кретных приложениях, объеме и  структуре  информационной
базы, скоростных характеристиках.

     Среди явно недостающих компонент СУБД надо отметить
генератор  отчетов,  средства  загрузки, архивирования и
копирования баз данных, диалоговый манипулятор,  который
обеспечил   бы   возможности  оперативного  просмотра  и
корректировки данных.  К сожалению, у  разработчиков  не
хватает сил оснастить СУБД сервисными и инструментальны-
ми средствами.  Мы с удовольствием будем сотрудничать  с
программистами, которые возьмутся за такую работу.


     Р_Е_К_В_И_З_И_Т_Ы   Д_Л_Я   С_В_Я_З_И

По техническим вопросам звонить
Арпаксыду Валерию Михайловичу,
тел. (8-044) 290-82-56.

По организационным вопросам звонить
Андрияш Татьяне Кондратьевне,
тел. (8-044) 290-82-56.

По вопросу приобретения системы RSiX-C и реализаций СУБД
ВЕСТА для среды RSX и P/OS (ОС РВ, ПРОС) звонить:
Мединцу Андрею Юрьевичу,
тел. (8-044) 263-78-04 (дом), 295-77-58 (сл);
Кириевскому Леониду Абрамовичу,
тел. (8-044) 224-78-28 (дом), 295-77-58 (сл).

--------------------------------------------------------
СУБД ВЕСТА      ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ          1/2/90
