- •Основные понятия информационных систем Информация и субд
- •Файловые системы
- •Структуры файлов
- •Именование файлов
- •Области применения файлов
- •Потребности информационных систем
- •Структуры хранения данных и методы доступа к ним
- •Доступ к базе данных
- •Диспетчер дисков
- •Диспетчер файлов
- •Кластеризация
- •Наборы страниц и файлы
- •Индексирование
- •Плотное и неплотное индексирование
- •Структура типа б-дерева
- •Хеширование
- •Задание
- •Расширяемое хеширование
- •Цепочки указателей
- •Управление данными, размещенными в оперативной памяти
- •Функции и архитектура субд
- •Примеры приложений субд
- •Обзор основных компонентов субд
- •Диспетчер памяти
- •Процессор запросов
- •Диспетчер транзакций
- •Параллелизм
- •Задание. Привести схему применения двухфазной блокировки для решения проблемы незафиксированной зависимости и проблемы несовместимого анализа.
- •Журнализация
- •Поддержка языков бд
- •Типовая организация современной субд
- •Ранние подходы к организации бд
- •Основные особенности систем, основанных на инвертированных списках
- •Структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Иерархические системы
- •Иерархические структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Сетевые системы
- •Сетевые структуры данных
- •Манипулирование данными сетевой схемы
- •Ограничения целостности сетевых систем
- •Достоинства и недостатки
- •Реляционные базы данных Общие понятия и терминология реляционного подхода
- •Тип данных
- •Фундаментальные свойства отношений (таблиц)
- •Реляционная модель
- •Каталог
- •Базовые таблицы, представления, снимки и запросы
- •Отношения и предикаты
- •Null-значения; потенциальные и внешние ключи
- •Базисные операции над реляционными данными
- •5.1. Реляционная алгебра
- •5.1.1. Общая интерпретация реляционных операций
- •Замкнутость реляционной алгебры и операция переименования
- •Особенности теоретико-множественных операций реляционной алгебры
- •Специальные реляционные операции
- •Операция взятия проекции
- •Операция соединения отношений
- •Операция деления отношений
- •Упражнения
- •Задание
- •Операция расширения и подведения итогов
- •Операция подведения итогов
- •Задания
- •Операторы обновления
- •Упражнения по запросам
- •5.2. Реляционное исчисление
- •Кортежные переменные и правильно построенные формулы
- •Еще раз о свободных и связанных переменных
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •Список литературы
Управление данными, размещенными в оперативной памяти
В последние несколько лет, в связи с резким снижением цен на модули памяти и широкое распространение 64-разрядных ОС, появилась возможность реализации идей по оптимизации производительности СУБД при ее размещении целиком в оперативной памяти. Появились первые коммерческие продукты, реализующие эти идеи в рамках реляционных СУБД (например, TimesTenкомпанииTimesTenPerformanceSoftwareиAngaraDataServerкомпанииAngaraDatabaseSystems). Эти продукты могут использоваться как автономно в качестве пакетов управления данными, размещаемых в оперативной памяти, так и в качестве дополнительной технологии ускорения приложений в сочетании с уже развернутой реляционной СУБД. Здесь мы кратко рассмотрим основные отличия в структурах данных, обусловленных различными подходами к оптимизации систем.
На первый взгляд кажется, что повышения производительности СУБД можно достичь просто, перемещая данные «дисковой» СУБД в оперативную память. Однако ожидаемого повышения производительности при этом увы не произойдет. Дело в том, что реляционные базы данных функционируют исходя из предположения, что обрабатываемые данные в основном находятся на диске. Алгоритмы оптимизации, управление буферным пулом и технология извлечения данных на основе индексов – все существенным образом ориентировано на такую модель данных. Решения оптимизации запросов для дисковых систем баз данных реляционных СУБД принимаются исходя из предположения, что данные в основном находятся на диске. В реальной ситуации, когда данные в каждый момент времени могут располагаться как на диске, так и в кэше в оперативной памяти, система, ориентированная на дисковое хранение вынуждена исходить из наихудших предположений. Дисковые БД оптимизируют обработку в наиболее узком месте; в данном случае – это операции дискового ввода/вывода.
С другой стороны, диспетчер данных, размещаемых в оперативной памяти, «знает» о том, где находятся данные и оптимизирует запросы, исходя из более простых предположений.
В архитектуре традиционных реляционных СУБД для кэширования данных в оперативной памяти предусмотрена поддержка буферных пулов. Когда обработчик SQL-запросов обращается к странице с данными, метод доступа сначала просматривает буферный пул, пытаясь найти эту информацию. Даже если данные уже находятся в буферном пуле, для последующей обработки их необходимо оттуда скопировать. При работе с данными, резидентно находящимися в оперативной памяти, надобность в буферном пуле отпадает. Тем самым сокращается размер программы и ею памяти, упрощается алгоритм и данные попадают в приложение быстрее. Более того, ни одна из традиционных реляционных СУБД не позволяет во время исполнения динамически изменять предположение о размещении данных. Ориентация на хранение данных на диске слишком глубоко «вплетена» в код системы, чтобы это можно было исправить.
В традиционной реляционной СУБД в индексной странице В-дерева как значение индекса, так и указатель на данные хранятся в самой записи В-дерева. Узел В-дерева (дисковая страница) состоит из нескольких записей (максимально возможное) В-дерева, каждая из которых содержит значение индекса, а также номер страницы следующего соответствующего узла дерева или номер страницы с искомой строкой данных. В результате дерево имеет очень маленькую глубину – оно невысокое и широкое. Такая структура является идеальной для уменьшения дисковых операций ввода/вывода.
Однако эта структура гораздо хуже работает, когда данные находятся в оперативной памяти, так как вычислительная мощность процессора растрачивается на сравнение значений индекса в В-дереве, а также на управление буферами, которые содержат данные и индексы, уже загруженные с диска.
В TimesTenиспользовано Т-дерево, оптимизированное для доступа к оперативной памяти. Оно имеет гораздо более экономичную структуру. Для навигации по дереву используются указатели «меньше-или-равно» и «больше», представляющие собой непосредственные ссылки на адрес в памяти, а не на дисковую страницу. Всего за две операции сравнения алгоритм поиска Т-дерева «узнает» о том, находится ли искомое значение в текущем узле или нет. С каждым переходом по указателю узла индекса область поиска сокращается вдвое. В результате резко сокращается число машинных команд (минимум в десять раз), не требуется управлять буферным пулом, не нужны дополнительные копии данных, сокращаются страницы индексов и упрощается их структура. Как правило, на уровне приложения эта оптимизация дает выигрыш в среднем в два раза. Последняя оценка зависит от назначения приложения, а именно от того, насколько интенсивно оно работает с управлением данными.
В TimesTenиспользуются технологии индексирования двух типов: хешированные индексы и Т-деревья. Хешированные индексы обеспечивают очень высокую скорость работы, если приложению требуется точное совпадение с ключом поиска. Т-деревья более подходят для извлечения значений, неточно совпадающих с ключом поиска или принадлежащих определенному диапазону. Хешированные индексы создаются автоматически, когда в схеме данных определяется первичный ключ; Т-деревья, в свою очередь, генерируются при выполнении команды «создать индекс».
Высокая эффективность и низкие накладные расходы TimesTenпозводяют применять схему тиражирования данных на основе регистрации транзакций. После того, как транзакция принята в журнале регистрации транзакций отправителя, демон тиражирования считывает журнал и передает эти данные поIP-соединению клиенту. На адресате демон тиражирования размещает эти данные в хранилище данныхTimesTenв оперативной памяти.