Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ПП1 (C++ БД).doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
5 Мб
Скачать
☆

Модуль данных DataModule

Очень полезным приёмом программирование при работе с БД является использование модуля данных DataModule. Это модуль, напоминающий форму, но являющийся полностью невизуальным. На нем размещают большинство невизуальных компонентов, и, в первую очередь, таблицы БД. Достоинства DataModule состоят в следующем:

  1. Таблицы БД, помещённые в этом модуле, открываются раньше всех остальных, а закрываются позже. Они являются глобальными по отношению к другим модулям и поэтому всегда доступны. Не требуется также следить за синхронизацией таблиц, поскольку все они существуют в единственном экземпляре и такой вопрос просто не возникает.

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

  3. В модуль можно поместить собственные глобальные процедуры и переменные и тогда они становятся общедоступными.

Подробно с этим компонентом студент знакомится на лабораторных работах.

Файлы и индексы

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

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

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

Наличие такого массива в оперативной памяти позволяет фактически заменить последовательный доступ к записям файла прямым доступом. Это происходит так.

Предположим, программист требует отыскать запись со значением ключевого поля ХХХ. Прежде всего, система отыскивает эту запись по индексу, а поскольку индекс находится в оперативной памяти и он упорядочен, то, применяя методы быстрого поиска, например бинарный, можно отыскать нужное поле за микросекунды, даже для больших массивов. Найдя запись со значением ключа ХХХ, система считывает физический номер записи в реальном файле из второго столбца индекса. Зная параметры магнитного диска и длину записи файла, система пересчитывает номер записи файла в номер кластера диска, где эта запись расположена. Номер кластера передается операционной системе, которая считывает этот кластер за однократную установку считывающей головки дисковода на нужную точку поверхности диска. Поскольку эта операция для современных дисков занимает 10-15 миллисекунд, то этим периодом и можно оценить время поиска нужной записи, причем это время почти не зависит от объема файла данных. Без индекса при естественном последовательном доступе к файлу поиск нужной записи зависит от их количества прямо пропорционально, и для больших файлов, имеющих, например, 100 000 записей, время поиска могло бы составить порядка 15 минут.