
Диплом К
.pdfКод ошибки |
Описание ошибки |
|
|
btTREE_DelKeyNotFound |
Не найден удаляемый элемент |
btTREE_dsError |
Ошибка в DS-файле |
btTREE_ErrorCreateRes |
Ошибка при создании результата поиска |
btTREE_InternalDelKeyError |
Внутренняя ошибка при удалении |
btTREE_InvalidAddItem |
Неверный элемент для добавления |
btTREE_InvalidDelItem |
Неверный элемент для удаления |
btTREE_InvalidParameters |
Неверные параметры при создании |
btTREE_InvalidSearchItem |
Неверный элемент для поиска |
btTREE_InvalidSeekMode |
Неверный режим позиционирования |
btTREE_ItemAlreadyExist |
Элемент уже существует |
btTREE_NoMemory |
Мало памяти |
btTREE_NotFoundNullKey |
Не найден нулевой ключ |
btTREE_SeekBeforSearch |
Позиционирования перед поиском |
btTREE_TreeIsEmpty |
Удаление из пустого индекса |
btTREE_UniqKeyValueAlreadyExist |
Есть значение при уникальном ключе |
btTREEPATH_dsError |
Ошибка в DS-файле |
btTREEPATH_ErrorCreateCtrlBlock |
Ошибка при создании управляющего |
|
блока |
btTREEPATH_ErrorCreateResBlock |
Ошибка при создании блока данных |
btTREEPATH_NoMemory |
Мало памяти |
btTREEPATH_ParamOutOfRange |
Неверные входные параметры |
btTREEPATH_TreeOverflow |
Переполнение дерева |
btTREERES_dsError |
Ошибка в DS-файле |
btTREERES_FileReadOnly |
Режим только для чтения |
btTREERES_InvalidMode |
Неверный режим позиционирования |
btTREESTACK_NoMemory |
Нехватка памяти |
|
|
Табл. 5. Список стандартных типов ключей
Символическая константа |
Тип ключа |
|
|
btKEY_STRING |
Строка текста постоянной длины |
btKEY_LSTRING |
Строка текста переменной длины |
btKEY_CHAR |
Символ |
btKEY_WORD |
Целое число в интервале 0..215-1 |
btKEY_LONG |
Целое число в интервале 0..231-1 |
btKEY_FLOAT |
Вещественное число одинарной точности |
btKEY_DOUBLE |
Вещественное число двойной точности |
btKEY_DATE |
Дата |
btKEY_TIME |
Время |
btKEY_MONEY |
Деньги |
btKEY_SPN |
ВСН |
btKEY_TELEPHONE |
Телефон |
btKEY_USER_TYPE |
Пользовательский тип |
|
|
Табл. 6. Список стандартных типов значений
Символическая константа |
Тип значения |
|
|
btVAL_STRING |
Строка переменной длины |
btVAL_NUMBER |
Целое число |
btVAL_CHAR |
Символ |
btVAL_WORD |
Целое число в интервале 0..215-1 |
btVAL_LONG |
Целое число в интервале 0..231-1 |
btVAL_FLOAT |
Вещественное число одинарной точности |
btVAL_DOUBLE |
Вещественное число двойной точности |
btVAL_DATE |
Дата |
btVAL_TIME |
Время |
btVAL_MONEY |
Деньги |
btVAL_SPN |
ВСН |
btVAL_TELEPHONE |
Телефон |
btVAL_USER_TYPE |
Пользовательский тип |
|
|
3.5.Заключение
Входе дипломного проектирования был создан работающий макет инструмента для разработки систем обработки документов (СОД). Разработанный инструмент удо-
влетворяет заданным в техническом задании требованиям.
Выделим наиболее важные возможности разработанного комплекса:
хранение в одной БД документов различного формата;
поддержку полноценного текстового поиска по текстовым полям документов;
открытость системы для новых типов полей документов;
поддержку сетевой работы в соответствии с архитектурой клиент-сервер;
изменение одного документа несколькими пользователями одновременно.
Эти возможности стали доступны благодаря новому подходу к организации хра-
нения документов в БД и новым методам взаимодействия документов с БД и между со-
бой.

БД теперь не имеет логической структуры, которая перенесена на уровень доку-
ментов, и представляет собой “рабочий стол” документов, которые в принципе могут образовывать в рамках одной БД сложную иерархию. Документы могут иметь совер-
шенно различный внутренний формат, но, тем не менее, записываться в БД по единому механизму.
Осуществление взаимодействия между документами, после их считывания из БД,
производится с помощью механизма рассылки сообщений с определенными параметра-
ми. Это позволяет синхронизировать изменения, проводимые в полях документов, на каждый момент времени, что делает доступным работу над одним документов группы пользователей одновременно.
Эти принципы построения системы позволяют сделать шаг вперед в технологии баз данных. Этот шаг заключается в том, что теперь можно не только не задавать струк-
туру БД перед ее созданием, а динамически менять ее даже в ходе одного сеанса работы с системой, не перестраивая уже наполненную БД.
Естественно, что за новые возможности надо платить. В нашем случае плата – это хранение структуры у каждого объекта1, что увеличивает объем файла данных.
3.5.1. Возможные области применения.
Наиболее подходящими являются задачи двух классов:
ориентированные на сложный поиск в слабо формализованных предметных об-
ластях;
часто изменяющиеся, но формализованные предметные области.
В качестве примеров первого класса можно привести различные медицинские,
юридические, образовательные, библиотечные задачи. Во всех них содержимое доку-
ментов или не может быть четко разделено на поля или сформирована или содержит большой объем текстовой информации. В этих областях, помимо хранения текстов пе-
ременного размера, требуется осуществление полноценного текстового поиска, жела-
тельно по запросам, заданным на естественном языке.
1Реляционные БД хранят логическую структуру БД один раз, обычно в начале файла данных, так
как она одинакова для всех записей.
Вторые задачи могут иметь четкое разбиение содержимого документов на поля, но это разбиение может часто меняться. Примеры – банковские, бухгалтерские и биржевые задачи. Здесь на момент изменения структуры документа, БД уже может содержать де-
сятки тысяч документов, поэтому требование реорганизации всех записей при измене-
нии логической структуры БД является неприемлемым.
Во всех случаях следует отдавать предпочтение информационным системам перед системами, ориентированными на сложные расчеты.
3.5.2. Почему разработанная СУБД не является реляционной?
Разработанная СУБД предназначена для работы с неструктурированной инфор-
мацией и не являются реляционной базой данных по определению. В любой реляцион-
ной БД информация структурирована в виде таблиц фиксированной формы, с помощью которых выполняется координированный доступ, хранение и поиск данных. Поскольку информация в этих таблицах жестко фиксирована, то связи между двумя или несколь-
кими таблицами, необходимые для выполнения этих функций, зафиксированы и четко определены. Конечно, это касается не теории реляционных СУБД, а их реализации.
4. ИССЛЕДОВАТЕЛЬСКАЯ ЧАСТЬ
4.1. Исследование реализации файла данных
При использовании разработанной реализации файла данных наиболее важными являются характеристики компактности размещения данных и временные параметры основных операций с записями.
4.1.1. Анализ компактности размещения записей переменной длины.
Основным предназначением разработанной реализации файла данных является хранение записей переменного размера. Естественно, что для этого надо идти на какие-
то накладные расходы при организации хранения информации. В результате длина фай-
ла данных будет несколько больше длины данных, помещенных в него. Для хранения записей переменного размера в разработанной реализации используется метод сегмен-
тации физического пространства файла. При таком подходе помещаемая в файл запись разбивается на фиксированное число сегментов, которые связываются в одну цепочку.
Для первой страницы в цепочке введен термин головная, а для остальных – термин хво-
стовая. Широко известным примером такого подхода является организация хранения файлов на внешних носителях в операционной системе MS-DOS. В нашей реализации в качестве названия сегмента используется термин страница.
Оценим теоретически величину накладных расходов при хранении записей пере-
менного размера. В эти расходы для каждой записи будут входить следующие состав-
ляющие:
заголовок записи;
заголовки страниц (для каждой страницы);
незаполненная часть на последней хвостовой странице.
Для исходных величин введем следующие обозначения:
L - длина записи,
Lстр - длина страницы,
pз - длина заголовка записи,
pстр - длина заголовка страницы.
Тогда число страниц в одной записи (n) можно рассчитать следующим образом:
|
|
|
|
|
n |
L pç 1 |
|
1, |
(1) |
|
||||
L cmp pcmp |
|
|
Теперь легко вычислить объем служебной информации ( ) для одной записи фай-
ла данных:
n Lcmp L , |
(2) |
|
Чтобы получить для всего файла данных надо просто просуммировать ее по |
||
каждой записи: |
|
|
k |
|
|
(ni |
L cmp L i ), |
(3) |
i 1 |
|
|
где k - число записей в файле.
Переменным параметром в этих формулах является длина записи - L. В зависимо-
сти от нее величина накладных расходов может сильно меняться за счет изменения сво-
ей последней составляющей - размера незаполненной части на последней странице.
Теоретически мы можем оценить максимальное и минимальной значение . Макси-
мальное будет для таких L, при которых на последней хвостовой странице будет занят только один байт (проще говоря, для записей длиной в 1 байт). Тогда:
max ( n 1) pcmp pç Lcmp 1, |
(4) |
Минимальное значение будет для таких L, при которых на последней хвостовой странице незаполненное место вообще отсутствует. Например:
|
|
L Lcmp pç pcmp, |
(5) |
|||||
Тогда: |
|
|
|
|
|
|
|
|
|
|
min n pcmp pç, |
(6) |
|||||
Теперь можно получить конкретные цифры - рассчитаем максимальную и мини- |
||||||||
мальную долю служебной информации в файле данных: |
|
|||||||
|
|
|
L cmp 1 |
100%, |
(7) |
|||
max % |
|
|||||||
|
|
|
|
L cmp |
|
|||
|
|
|
|
|
|
|||
|
|
|
|
p3 pcmp |
100%, |
(8) |
||
min % |
|
|||||||
|
|
|
Lcmp |
|
||||
|
|
|
|
|
|
Возьмем Lстр= 512 байт (в текущей реализации pз= 7 байт, а pстр= 5 байт). Тогда:
max % 512 1 100% 998%., |
(9) |
||
|
512 |
|
|
min % |
5 7 |
100% 2.3%, |
(10) |
|
512 |
|
|
Ясно, что оба граничных случая исключительно редки, но получен интервал, где должно располагаться реальное значение объема служебной информации в файле дан-
ных.
Проведем экспериментальную оценку. На практике размер помещаемых записей является случайной величиной, распределенной по какому-то закону в некотором ин-
тервале. Для эксперимента примем, что размер записей является равномерно распреде-
ленной случайной величиной в интервале от 200 до 30000 байт. По результатам экспе-
римента были построены графики, показанные на рисунках 26 и 27. Результаты экспе-
римента показывают, что доля служебной информации колеблется от 4% до 17%, в за-
висимости от размера страницы и практически не зависит от объема файла данных. Это вполне приемлемый результат. Возрастание доли служебной информации при росте размера страницы объясняется увеличением последнего слагаемого, входящего в размер служебной информации, - длины незаполненной части на последней хвостовой страни-
це.

|
6000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
|
|
|
|
|
|
|
|
|
|
4000 |
|
|
512 |
|
|
|
|
|
|
|
|
|
Объем данных,Кб |
|
|
|
1024 |
|
|
|
|
|
|
|
|
|
3000 |
|
|
2048 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
2000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
500 |
1000 |
1500 |
2000 |
2500 |
3000 |
3500 |
4000 |
4500 |
5000 |
5500 |
6000 |
|
|
|
|
|
Î áúåì ô àéëà äàí í û õ, êÁ |
|
|
|
|
||||
|
Рис. 26. Зависимость объема данных в файле данных от объема файла данных |
|
100 |
|
|
|
|
|
|
|
90 |
|
|
|
|
|
|
информации,% |
80 |
|
|
|
|
256 |
|
|
|
|
|
|
|
||
70 |
|
|
|
|
512 |
|
|
60 |
|
|
|
|
1024 |
|
|
|
|
|
|
2048 |
|
||
|
|
|
|
|
|
||
50 |
|
|
|
|
|
|
|
служебной |
|
|
|
|
|
|
|
40 |
|
|
|
|
|
|
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Äîëÿ |
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
0 |
1000 |
2000 |
3000 |
4000 |
5000 |
6000 |
|
|
|
Î áúåì |
ô àéëà äàí í û õ, êÁ |
|
|
|
|
|
Рис. 27. Доля служебной информации в файле данных |
|
4.1.2. Время выполнения базовых операций с записями.
В качестве основных были выбраны наиболее часто используемые операции: до-
бавление новой записи, удаление существующей и чтение заданной. Рассмотрим каж-
дую в отдельности, а результаты помести на один график.
В значение времени для операции добавления входит две составляющие: время по-
зиционирования на нужную страницу и время записи данных на страницу. Обозначим их соответственно tп и tз. Время записи tз можно принять постоянной величиной (для нашей аппаратной платформы), даже при изменении длины страницы. Время позицио-
нирования tп линейно зависит от номера страницы (смещения от начала файла). Таким образом для одной страницы имеем:
tз = const, |
(11) |
tï l k ncmp, |
(12) |
где l - время позиционирования до начала файла данных, nстр - порядковый номер запи-
сываемой страницы, k - коэффициент времени позиционирования, физический смысл которого – время позиционирования на следующую страницу файла данных. Эти три величины определяются параметрами аппаратной части.
Тогда время добавления записи будет подчиняться следующему закону:
|
n |
|
|
TT |
l k ni t3 |
, |
(13) |
|
i 1 |
|
|
где n - число страниц, на которых разместится запись, а ni - порядковый номер i-ой страницы. Расчет n проводится по формуле (1). В итоге мы имеем линейную зависи-
мость времени добавления от числа страниц, на которых разместится запись, и от поло-
жения, которое займет новая запись в файле данных (наиболее часто - это место за кон-
цом файла). Все расчеты проводились в предположении, что на запись каждой страни-
цы требуется одна операция ввода-вывода.
Время удаления записи состоит из двух таких же составляющих, но, в отличие от операции добавления, при удалении любой записи модифицируются только две страни-
цы: головная страница записи и последняя страница из списка свободных страниц. Та-
ким образом можно, используя уже введенные обозначения записать выражения для времени удаления: