Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки? Спасибо! |
Физическая модель хранилища данных: учет влияния транзакций, денормализация таблиц
Цель лекции
Изучив материал настоящей лекции, вы будете знать:
- основные типы приложений баз данных;
- что понимается под транзакцией базой данных;
- как можно описать транзакции базы данных;
- основные типы денормализации таблиц базы данных;
- что такое вертикальное и горизонтальное разбиение таблиц;
- о проблеме длинной строки в таблице хеширования ;
- что такое методы денормализации таблиц;
- что такое денормализация колонки таблицы;
и научитесь:
- выполнять разделение таблиц ;
- выполнять объединение таблиц;
- выполнять денормализацию колонки таблицы.
Определение транзакций базы данных
Учет типа приложений базы данных
Прежде чем обсуждать основные типы приложений баз данных, уточним термины транзакция (transaction) и запрос. В теории БД, вообще говоря, под транзакцией понимают одну из команд SQL — SELECT, INSERT, UPDATE, DELETE. Однако в зависимости от типа приложений термин " транзакция " трактуется более свободно, как элементарная логически завершенная единица работы (так называемая бизнес-транзакция ), которая может включать несколько команд вставки, удаления или модификации. В зависимости от того, какие команды SQL используются, транзакции разделяют на транзакции только для записи (write-only), только для модификации (modify-only), только для чтения (read-only), только для удаления (delete-only). Транзакции только для чтения называют запросом.
Исходя из такого деления транзакций по типам обработки с учетом частоты транзакций каждого типа, можно выделить три основных классических типа приложений БД.
- OLTP-системы (On-Line Transaction Processing). OLTP-система – это такое приложение, которое содержит в основном транзакции вставки, обновления и удаления, с высокой частотой преимущественно транзакций обновления. Классическим примером таких систем являются системы резервирования авиабилетов или обслуживания гостиниц. Для них характерен высокий уровень параллелизма (high concurrency), который в данном случае означает, что много пользователей используют базу данных одинаковым образом.
- DSS-системы (Decision Support System). DSS-система – это такое приложение, которое работает с очень большой базой данных в режиме "только чтение". Обычно используются набор фиксированных простых запросов или нерегламентированные запросы пользователей. Хорошим примером такой системы является корпоративная информационная система организации.
- BATCH-системы. BATCH-системы – это такое приложение, которое работает с базой данных в неинтерактивном режиме. Обычно оно использует много транзакций вставки, удаления и обновления и имеет низкий уровень параллелизма, что означает небольшое число пользователей, использующих базу данных одинаковым образом. Существенным фактором является отношение запросов к транзакциям обновления. Классическим примером таких систем является обслуживание БД продукции организации.
Можно выделить еще несколько типов приложений, появившихся в последние два десятилетия.
- OLAP-системы (On-Line Analytical Processing). OLAP-система – это приложение, которое обеспечивает аналитическую обработку данных, включающую математический, статистический или иной анализ данных. Такие системы нельзя отнести полностью либо к OLTP-, либо DSS-системам. Они располагаются где-то между ними. В рамках OLAP-систем выделяют так называемые ROLAP-системы (Relational OLAP), т.е. OLAP-системы, использующие реляционные базы данных. Типичные OLAP-системы разрабатываются обычно под многомерные модели данных.
- VCDB-системы (Variable Cardinality Database). VCDB-система — это такое приложение обработки данных, для которого база данных растет или сжимается в размерах периодически, в зависимости от характера обработки данных. Обычно размер этих баз данных постоянно растет. Типичным примером такой системы является БД по обеспечению безопасности (security authorization database), для которой характерна короткая по времени активность записей в таблицы.
Для анализа транзакций необходимо оценить тип приложений, для которых разрабатывается база данных. Это позволит оценить:
- тип транзакций (какие);
- частоту транзакций каждого типа (сколько);
- количество одновременно работающих с БД пользователей.
Спецификация транзакций
Напомним, транзакция БД – это логическая единица работы, которая переводит БД из одного завершенного состояния в другое завершенное состояние. Под завершенным состоянием БД здесь понимается такое состояние, которое не нарушает целостности этих данных, когда все данные в таблицах базы данных правильны, а ссылки между таблицами корректны. В дополнение транзакция группирует операции над данными таким образом, чтобы все обращения к БД были успешно завершены или, в случае сбоя, БД возвратилась в предыдущее завершенное состояние (откат транзакции ).
Поскольку любая операция изменения данных в БД несет в себе потенциальную возможность нарушения целостности данных, необходимо строго определять транзакции и идентифицировать информацию, которая обычно включается в определение транзакции.
Определение транзакции может иметь различные формы. Иногда для определения транзакций используется репозиторий данных CASE-средств проектирования базы данных. Очень часть определение транзакций выполняется посредством текстовых описаний. Независимо от выбранного подхода, любое хорошее определение транзакции включает несколько важных элементов. К таким элементам относятся:
- имя транзакции ;
- номер транзакции ;
- описание транзакции ;
- характер транзакции и ее сложность;
- объем транзакции ;
- требования к производительности транзакции ;
- относительный приоритет;
- время выполнения транзакции.
Первым шагом в определении транзакций является уникальная идентификация каждой транзакции БД. Это можно сделать назначением имени и номера каждой транзакции БД. Имена транзакций должны позволять пользователям отличать их друг от друга. Описание включает перечень операций предметной области, которые выполняются транзакцией. Оно должно быть выполнено в терминах предметной области, понятных пользователю. Здесь нужно иметь в виду следующее:
- описание транзакции должно указывать, что транзакция делает для пользователя, а не как она выполняется;
- описание должно быть понятно пользователю, что не исключает использование технологического жаргона.
Пример 19.1. Описание транзакции.
Имя транзакции: назначить работу служащему.
Описание транзакции. Транзакция проверяет, не назначена ли уже данная работа данному служащему, затем проверяет, располагает ли служащий рабочим временем для выполнения данной работы. Если результаты проверки положительны (данная работа не назначена данному служащему, и служащий располагает временем для ее выполнения), то происходит назначение данной работы данному служащему.
В OLTP-системах большинство транзакций известны заранее, поэтому между спецификацией транзакции и транзакцией БД существует взаимно однозначное соответствие. В DSS-системах транзакции часто неизвестны заранее, и, следовательно, невозможно в принципе описать их все. В этом случае спецификация лишь в общих чертах описывает транзакции БД, поэтому важно уметь предсказать тип транзакций, которые пользователь, вероятнее всего, будет выполнять в БД.
Для каждой транзакции может быть определен характер транзакции (онлайновая транзакция или пакетная транзакция ), а также указана ее сложность. Обычно сложность указывается в терминах "высокая", "средняя", "низкая". Эта информация нужна для оценки транзакций базы данных в целом. Количество транзакций той или иной сложности влияет на время проектирования физической модели базы данных: чем больше в базе данных транзакций высокой сложности, тем больше время проектирования физической модели. Сложность транзакции является условной мерой трудоемкости при достижении требований производительности базы данных.
Высокая сложность приписывается обычно транзакции, которая имеет две из следующих характеристик:
- содержит от 8-ми до 10-ти команд SQL;
- содержит предложение WHERE с большим количеством предикатов;
- содержит предложение WHERE с более чем тремя соединениями или подзапросами;
- транзакция обрабатывает более чем 100 строк.
Низкая сложность приписывается транзакции с следующими характеристиками:
- содержит до 3-х команд SQL;
- содержит предложение WHERE с одним или двумя предикатами;
- транзакция обрабатывает менее чем 25 строк.
Транзакция со средней сложностью имеет характеристики между низкой и высокой сложностью.
Пример 19.2. Определение характеристик транзакции.
Характер транзакции: онлайновая транзакция.
Сложность: средняя.
Информация о частотах транзакций включает обычно два параметра — среднюю частоту транзакции (например, 50 тр/ч) и пиковую частоту транзакции (например, 70 тр/ч). Оценка частотных характеристик БД очень важна для проектирования физической модели данных ХД: настройка физической структуры БД для транзакций с высокой частотой существенно отличается от настройки ее для транзакции с низкой частотой использования.
Пример 19.3.
Средняя частота транзакции: до 10 в день.
Пиковая частота: 10 в час.
Если для модернизации существующих систем информация о частотах транзакций может быть представлена во входной документации на основе анализа статистики эксплуатации системы, то для создаваемых ХД такую информацию получить практически невозможно, и приходится пользоваться приблизительными оценками.
Спецификация транзакции должна включать требования по производительности. Производительность БД в целом складывается из производительности каждой транзакции в отдельности и их распределении во времени. Это очень важная информация для решения задачи настройки физической структуры ХД. Требования по производительности обычно задаются в виде параметра время реакции, т.е. количества секунд, требуемых для выполнения транзакции. Например, во многих банковских системах транзакция для снятия денег со счета клиента не должна занимать более 5 секунд.
Другой формой задания требования на производительность транзакций БД является указание их характера и сложности. Например,
- онлайновые транзакции высокой сложности должны выполняться не более 15 с;
- онлайновые транзакции средней сложности должны выполняться не более 7 с;
- онлайновые транзакции низкой сложности должны выполняться не более 4 с;
- пакетные транзакции высокой сложности должны выполняться не более 1 часа;
- пакетные транзакции средней сложности должны выполняться не более 0.5 часа;
- пакетные транзакции низкой сложности должны выполняться не более 15 мин.
Получение требований на производительность транзакций является одним из самых узких мест как в исходной документации, так и в проектировании физической модели ХД. На практике получить временные характеристики выполнения транзакций часто удается только на этапе опытной эксплуатации, а то и промышленной эксплуатации ХД.
Желательно в спецификации транзакции указать ее относительный приоритет, который показывает, насколько важна настоящая транзакция для предметной области по сравнению с другими. Относительный приоритет позволяет сгруппировать транзакции по этому параметру, что дает возможность последовательно оценить все транзакции БД и их вклад в производительность БД.
Выполнение какой-либо транзакции в БД с большим приоритетом отрицательно сказывается на производительности других транзакций. Ранжирование по относительному приоритету позволяет сбалансировать влияние транзакций друг на друга в целом.
Задание приоритета транзакций может иметь различные формы. Обычно такое действие сводится к субъективной оценке в виде числа от 1 до 10.
Каждая спецификация транзакции должна содержать команды SQL, которые задают операции с БД. Указание команд SQL в контексте создания физической модели ХД позволяет оценить время выполнения транзакций (execution time), т.е. фактическое количество секунд, необходимое для завершения транзакции в режиме эксплуатации ХД. Проектировщику ХД этот параметр важен еще и с точки зрения составления спецификаций модулей приложений ХД для разработчиков приложений.
Помимо собственно команды языка манипулирования данными, желательно включить некоторый комментарий к каждой команде, в котором указать: а) что команда делает, б) почему это требуется и в) количество строк в ХД, которое захватывается командой. Время выполнения команды SQL непосредственно зависит от числа обрабатываемых командой строк. Обычно время выполнения транзакций можно оценить на стадии опытной эксплуатации и тестирования базы данных.
Пример 19.4.
Команда | Комментарий |
---|---|
Select works from project where empno=:1 and works=:2 | Возвращает информацию о назначении данной работы данному служащему. По крайней мере, одна строка возвращается. Число строк, которые могут обрабатываться командой, равно текущему размеру таблицы PROJECT |
Select works from project where empno=:1 | Возвращает список работ данного служащего, чтобы оценить его загруженность. Число строк, которые могут обрабатываться командой, равно текущему размеру таблицы PROJECT |
Insert into project empno, works values(:1, :2) | Назначает данного служащего на данную работу, если это необходимо |
Описание транзакций позволяет принимать или откладывать решение об изменении физической схемы ХД с целью исполнения требований по производительности базы данных.
Механизмы, с помощью которых можно обеспечить выполнение требований производительности, обсуждаются ниже, в предположении, что для создания ХД выбрана СУБД семейства MS SQL Server, за исключением одного примера, в котором используется диалект SQL СУБД семейства Oracle.