- •20.7. Средства sql
- •20.8. Резюме
- •21.1. Введение
- •21.2. Некоторые аспекты технологам поддержки принятия решений
- •21.3. Проектирование базы данных поддержки принятия решений
- •21.5. Хранилища данных и магазины данных
- •21.6. Оперативная аналитическая обработка
- •21.7. Разработка данных
- •21.8. Резюме
- •22.1. Введение
- •22.2. Хронологические данные
- •22.3. Основная проблема хронологических баз данных
- •22.4. Интервалы
- •22.5. Интервальные типы
- •22.6. Скалярные операторы для интервалов
- •22.7. Операторы обобщения для интервалов
- •22.8. Реляционные операторы для обработки интервалов
- •22.9. Ограничения, включающие интервалы
- •22.10. Операторы обновления, включающие интервалы
- •22.11. Проектирование базы данных
- •22.12. Резюме
- •23.1. Введение
- •23.2. Обзор основных концепций
- •23.3. Исчисление высказываний
- •23.4. Исчисление предикатов
- •23.5. Базы данных с точки зрения доказательно-теоретического подхода
- •23.6. Дедуктивные субд
- •23.7. Обработка рекурсивных запросов
- •23.8. Резюме
- •Часть VI
- •24.1. Введение
- •24.2. Объекты, классы, методы и сообщения
- •24.3. Еще раз об объектах и объектных классах
- •Cdo для класса set (ref(emp))
- •24.4. Простой пример
- •1 | Course с001 , с001 0ffs , с001 ny offs |
- •24.5. Дополнительные аспекты
- •24.6. Резюме
- •25.1. Введение
- •X2 rational, y2 rational ) ... ;
- •25.2. Первая грубейшая ошибка
- •25.3. Вторая грубейшая ошибка
- •25.4. Вопросы реализации
- •25.5. Преимущества реального сближения двух технологий
- •25.6. Резюме
21.5. Хранилища данных и магазины данных
Иногда
для этих целей используется асинхронная
репликация из источников оперативных
данных непосредственно в банки
оперативных данных. В этом случае
состояние данных может отличаться от
текущего всего лишь на несколько минут
Замечание. Отметим в качестве небольшого отступления, что так было не всегда. Раньше системы поддержки принятия решений реализовались на базе оперативных систем, но с низким приоритетом или во время так называемых "пакетных окон". При наличии достаточных вычислительных ресурсов этот подход имеет несколько преимуществ, и, пожалуй, наиболее очевидным из них является то, что он позволяет избежать всевозможных затратных процедур копирования и переформатирования данных, а также дополнительных операций передачи информации, необходимых при работе с двумя отдельными системами. На практике преимущества от совместного функционирования оперативных систем и систем поддержки принятия решений находят все большее понимание. Однако подробное рассмотрение интеграции этих систем выходит за рамки данной главы.
Тем не менее, несмотря на сказанное в предыдущем абзаце, остается неоспоримым тот факт, что, по крайней мере на время написания книги, данные систем поддержки принятия решений обычно извлекаются из различных оперативных систем (часто в корне отличных по своей организации) и помещаются в собственное хранилище, реализованное на отдельной платформе. Такое отдельное хранилище данных называют хранилищем данных.
Хранилище данных
Подобно банкам оперативных данных (а также магазинам данных; см. следующий подраздел), хранилище данных — это специальная база данных. Этот термин возник, по-видимому, в конце 1980 года [21.13], [21.17], хотя соответствующая концепция появилась несколько позднее. В [21.18] хранилище данных определяется как "предметно-ориентированное, интегрированное, постоянное, изменяемое во времени хранилище данных для поддержки управленческих решений". Здесь термин постоянное означает, что, будучи введенными, данные впоследствии не изменяются, хотя и могут быть удалены. Хранилища данных появились по двум причинам: во-первых, для систем поддержки принятия решений необходимо было предоставить отдельный, чистый, согласованный источник данных и, во-вторых, этой цели следовало достичь, не оказывая влияния на функционирование оперативных систем.
Согласно определению ожидаемая рабочая нагрузка на хранилище данных— это ожидаемая рабочая нагрузка в системе поддержки принятия решений. Поэтому можно ожидать, что хранилище данных будет подвергаться частым обращениям с запросами, а также периодической пакетной обработке для обновления данных. Кроме того, для хранилищ данных характерен весьма большой объем занимаемой памяти — часто он превышает 500 Гбайт и может увеличиваться на 50% в год. Вследствие этого бывает трудно добиться высокой производительности системы, хотя и нельзя сказать, что это невозможно. Также могут возникнуть проблемы, связанные с расширяемостью базы данных. Причины подобных затруднений обычно кроются в ошибках проектирования базы данных (обсуждавшихся в последнем подразделе раздела 21.3), неэффективном использовании реляционных операций (что обсуждалось в разделе 21.2), наличии недостатков в реализации реляционной модели в целевой СУБД, недостаточных возможностях расширения, реализованных в самой целевой СУБД, наличии ошибок в архитектуре проекта, ограничивающих объемы и препятствующих масштабированию платформы. Обсуждение двух последних причин выходит за рамки книги, а две первые уже рассматривались в этой главе. Единственная оставшаяся причина обсуждается в других частях этой книги.
Магазины данных
Хранилища данных в общем случае представляют собой единый источник информации для любой обработки, связанной с поддержкой принятия решений. Однако в начале 90-х годов, когда хранилища данных только приобретали популярность, было обнаружено, что чаще всего пользователи составляли пространные отчеты и выполняли различные операции анализа данных на относительно небольшом подмножестве полного объема информации в хранилище данных. И действительно, пользователи повторяли те же самые операции на том же самом подмножестве данных каждый раз после их обновления. Более того, некоторые из этих операций— например, предикативный анализ (прогноз), имитация, моделирование "что если" на основе деловых данных — включали создание новых схем и данных с последующим обновлением этих новых данных.
Неоднократное повторное выполнение таких операций на одном и том же подмножестве информации полного хранилища данных, безусловно, не очень эффективно. Поэтому возникла очевидная идея построения некоторого ограниченного "хранилища" специального назначения, которое подходило бы для достижения рассматриваемых целей. Кроме того, в некоторых случаях можно извлекать и обрабатывать данные непосредственно из локальных источников, предоставляя более быстрый доступ к данным по сравнению с тем, который мог быть предоставлен при синхронизации со всеми остальными данными, загруженными в полное хранилище. Подобные соображения привели к появлению концепции магазинов данных.
На самом деле вокруг точного определения термина магазин данных еще ведутся споры. Для наших целей магазин данных можно определить как "специализированное, предметно-ориентированное, интегрированное, непостоянное, изменяемое во времени хранилище данных для поддержки конкретного подмножества управленческих решений". Как видим, ключевое отличие между магазинами данных и хранилищами данных заключается в том, что магазины данных — специализированные и непостоянные. Под характеристикой специализированные подразумевается, что они содержат данные для поддержки лишь некоторой конкретной области делового анализа, а под характеристикой непостоянные подразумевается, что пользователи могут обновлять данные и, возможно, даже создавать в каких-то целях новые данные, например новые таблицы.
Существует три основных подхода к созданию магазинов данных.
Данные просто извлекаются из хранилища данных — по существу, следуя подходу "разделяй и властвуй" по отношению к процессу поддержки принятия решений в целом. Это позволяет достичь более высокого уровня производительности и масштабируемости. Обычно извлеченные данные загружаются в базу данных с физической схемой, которая имеет близкое сходство с соответствующим подмножеством хранилища данных. Часто такая схема может быть даже несколько упрощена благодаря узкой специализации магазинов данных.
Несмотря на то что хранилища данных подразумевают предоставление информации с "единой точки зрения", независимо вполне могут создаваться еще и магазины данных (т.е. поддерживаемые не посредством извлечения данных из хранилища данных). Такой подход может быть приемлемым, когда хранилище данных по каким-то причинам недоступно, например по финансовым, оперативным или даже политическим (или же хранилища данных может еще просто не существовать; см. комментарии к следующему подходу).
■ В некоторых установках используется обратный подход: сначала создаются необходимые магазины данных, а полное хранилище данных впоследствии строится как объединение информации из различных магазинов данных.
Для последних двух подходов обычно характерны проблемы, связанные с семантическим несоответствием. Независимые магазины данных особенно чувствительны к таким проблемам, поскольку не существует очевидных способов проверить семантическое несоответствие, если базы данных спроектированы независимо. Консолидация магазинов данных в одно хранилище данных в общем случае заканчивается неудачно, кроме тех ситуаций, когда сначала создается единая логическая схема для хранилища данных, <? уже затем — схемы для отдельных магазинов данных, производные от схемы полного хранилища данных. (Безусловно, при необходимости схема для хранилища данных может постепенно расширяться — с целью включения данных о каждом новом магазине; конечно, если она была должным образом спроектирована.)
Замечание по проектированию магазинов данных. При проектировании базы данных поддержки принятия решений важно определиться с уровнем детализации базы данных. Под термином уровень детачизации здесь подразумевается самый низкий уровень обобщения данных, предназначенных для хранения в базе данных. Для большинства приложений поддержки принятия решений рано или поздно требуется доступ к детальным данным, так что с уровнем детализации для хранилищ данных определиться несложно. Но для магазинов данных это сделать несколько труднее. Если уровень детализации занижен и данные нижнего уровня используются не очень часто, то извлечение больших объемов детальных данных из хранилища данных и их сохранение в магазине данных может оказаться весьма неэффективным решением. С другой стороны, иногда трудно точно установить, какой именно нижний уровень детализации реально необходим. В тех случаях, когда вместе с обобщенными данными, сохраняемыми в магазинах данных, необходимы еще и детальные данные, можно обращаться непосредственно в хранилище данных. В то же время полное обобщение данных вообще невозможно, поскольку в результате применения множества способов обобщения данных будут получены очень большие объемы итоговых данных. Далее, в разделе 21.6, мы обсудим этот вопрос подробнее.
И еще одно замечание. Поскольку пользователи магазинов данных часто применяют определенные аналитические инструменты, в физическом проекте обычно указывается, по крайней мере частично, какие именно конкретные инструменты должны использоваться (см. обсуждение двух видов аналитической обработки ROLAP и MOLAP в разделе 21.6). Такое неудовлетворительное состояние дел может привести к созданию "многомерных схем" (рассматриваются ниже), которые не отвечают правилам надежного проектирования.
Многомерные схемы
Предположим, что необходимо накапливать исторические сведения о выполнении производственных транзакций для последующего анализа. Как отмечалось в разделе 21.1, ранние системы поддержки принятия решений сохранили бы эту историю в виде обыкновенного файла, доступ к которому осуществлялся бы посредством последовательного просмотра. Однако по мере роста объема данных для просмотра файла все более выгодной (с различных точек зрения) становится поддержка прямого доступа к записям файла. Например, может быть желательно, чтобы существовала возможность поиска всех производственных транзакций, включающих конкретный продукт, или всех производственных транзакций, относящихся к определенному заказчику.
Один из методов организации данных, обеспечивающий подобный тип доступа, назывался "многокаталоговой" базой данных9. Такие базы данных могли бы содержать большие основные файлы данных, включающие данные производственных транзакций, вместе с тремя отдельными файлами "каталогов" для продуктов, периодов времени и заказчиков. Рассматриваемые файлы каталогов схожи с индексами, в которых содержатся указатели на записи в файле данных, но элементы каталога могут размещаться пользователем явно ("обслуживание каталога") и каталоги могут содержать дополнительную информацию (например, адрес заказчика), которая затем может быть удалена из файла данных. Следует отметить, что файлы каталогов обычно малы по срав-. нению с файлами данных.
При такой организации данных более эффективно используется память и затраты на ввод-вывод гораздо меньше, чем при использовании первого проекта, предполагающего наличие простых линейных файлов данных. Отметим, в частности, что информация о продукте, периоде времени и заказчике в основном файле данных теперь сводится просто к идентификаторам продукта, периода времени и заказчика.
Если этот подход имитировать в реляционной базе данных, то файл данных и файлы каталогов станут таблицами (образами соответствующих файлов), указатели в каталогах файлов станут первичными ключами в таблицах, которые служат образами файлов каталогов, а идентификаторы в файле данных станут внешними ключами в таблице, соответствующей этому файлу данных. Обычно эти первичные и внешние ключи полностью индексированы, При таком соответствии образ файла данных называют таблицей фактов, а образы файлов каталогов — таблицами размерностей. Весь проект называют многомерным или имеющим схему типа "звезда" из-за его вида, если начертить соответствующую диаграмму "сущность/связь" (таблица фактов будет окружена таблицами размерностей и связана с ними).
Замечание. Смысл термина "размерность" разъясняется в разделе 21.6.
В целях демонстрации предположим, что снова необходимо модифицировать базу данных поставщиков и деталей, на этот раз так, чтобы показать каждую поставку за определенное время, когда эта поставка осуществлялась. Присвоим поставке за определенный период идентификатор f TP и введем еще одну таблицу TP, чтобы связать идентификаторы с соответствующими периодами. Теперь исправленная таблица SP и новая таблица периодов времени будут выглядеть так, как показано на рис. 21.310. В соответствии с терминологией схем типа "звезда" таблица поставок SP представляет собой таблицу фактов, а таблица периодов времени TP — таблицу размерностей (также в эту схему входят таблица поставщиков S и таблица деталей Р, как показано на рис. 21.4).
9
Не имеет ничего общего с каталогами
баз данных в современном смысле этого
термина. *° В столбцах FROM
и
ТО таблицы TP
содержатся
данные типа временной отметки. Для
упрощения на рисунке показаны не
реальные значения временных отметок,
а символические обозначения.
S I S# I SNAME I STATUS I CITY I TP |TP#| FROM* | TO
t T
SP S# P# TP# QTY
P I P# I PNAME J COLOR | WEIGHT | CITY
Рис. 21.4. Схема типа "звезда" для базы данных поставщиков и деталей (с периодами времени)
При обработке запросов в схеме типа "звезда" таблицы размерности обычно используются для поиска всех необходимых сочетаний внешних ключей, после чего найденные сочетания используются для доступа к таблице фактов. Предположим, что доступ к таблице размерности и соответствующий доступ к таблице фактов связаны в единый запрос. Тогда лучшим способом реализации такого запроса, как правило, является так называемое звездообразное соединение. Звездообразное соединение представляет собой специальную стратегию реализации операции соединения, которая отличается от обычных стратегий тем, что соединение преднамеренно начинается с вычисления декартова произведения, а именно — декартова произведения таблиц размерностей. Как мы уже видели в главе 17, оптимизаторы запросов обычно пытаются избежать вычисления декартова произведения [17.54], [17.55]. Однако в данном случае формирование, в первую очередь, декартова произведения таблиц значительно меньшей размерности, а затем использование результата для просмотра таблицы фактов очень больших размеров с помощью индексов почти всегда эффективнее любой другой стратегии. Поэтому для эффективной обработки запросов в схеме типа "звезда" традиционные оптимизаторы нуждаются в переработке.
У читателя может возникнуть вопрос, в чем же отличие схемы типа "звезда" от схемы, которую можно было считать настоящим реляционным проектом. Действительно, простая схема типа "звезда", подобная рассмотренной выше, может показаться очень похожей на настоящий реляционный проект (и даже идентичной ему). Однако, к сожалению, в общем случае при использовании схем типа "звезда" возникает целый ряд проблем.
Прежде всего, эта схема — произвольная, поскольку она основывается на интуиции, а не на принципах. Из-за недостатка строгости возникают сложности, когда схему требуется надлежащим образом изменить, например, чтобы добавить в базу новые типы данных или изменить зависимости. На практике схемы типа "звезда" часто конструируются посредством простого редактирования предыдущего проекта, а предыдущий проект, в свою очередь, конструировался методом проб и ошибок.
Схемы типа "звезда" в действительности физические, а не логические, хотя о них и говорят как о логических. Проблема заключается в том, что при данном подходе отсутствует концепция логического проектирования, отдельного от физического.
Подход с использованием схем типа "звезда" не всегда позволяет получить в результате правильный физический проект (т.е. проект, который сохраняет всю информацию корректного реляционного логического проекта). Этот недостаток становится все более очевидным по мере усложнения схемы.
Поскольку отсутствует строгий подход, проектировщики часто включают в одну таблицу фактов несколько различных типов фактов. Вследствие этого строки и столбцы таблицы фактов обычно не имеют единой интерпретации. Более того, определенные столбцы часто применяются только к определенным типам фактов. При этом подразумевается, что рассматриваемые столбцы должны разрешать NULL-значения. По мере включения все большего количества типов фактов таблицу становится все сложнее обслуживать и понимать, а доступ становится все менее эффективным. Например, допустим, нужно модифицировать таблицу поставок для отслеживания закупок и поставок деталей. Тогда необходим некоторый столбец с "флажками", указывающими, какие строки относятся к закупкам, а какие к поставкам. В концептуально правильном проекте была бы создана отдельная таблица фактов для каждого типа фактов.
Опять же, из-за отсутствия строгости таблицы размерностей Могут оказаться неоднородными. Такая ошибка обычно возникает, когда таблица фактов используется для размещения данных из разных уровней обобщения. Например, мы могли бы (ошибочно) добавить в таблицу поставок строки, содержащие итоговые количества деталей, поставленных за каждый день, каждый месяц, каждый квартал, каждый год и даже сводный текущий итог. Прежде всего, обратите внимание, что такое изменение приводит к тому, что столбцы идентификатора периода (#ТР) и количества (QTY) в таблице SP будут иметь не единообразные значения. Предположим теперь, что столбцы FROM и ТО в таблице размерности TP заменены комбинациями столбцов YEAR, MONTH, DAY и т.д. Тогда все эти столбцы YEAR, MONTH, DAY и др. должны будут допускать NULL-значения. Кроме того, возможно, потребуется также столбец флажка, указывающего тип соответствующего периода времени.
6. Таблицы размерностей часто не полностью нормализованы11. Желание избежать использования операций соединения часто приводит проектировщиков к решению объединить разные данные в одной таблице, хотя лучше было бы сохранять их отдельно. В самом крайнем случае столбцы, к которым лишь иногда осуществляется совместное обращение, также содержатся все вместе в одной и той же таблице размерностей. Должно быть ясно, что следование таким крайностям и отсутствие реляционной строгости почти наверняка приведут к неконтролируемой (а может быть, даже к такой, которую невозможно контролировать) избыточности.
И наконец отметим, что одним из вариантов схемы типа "звезда" является схема типа "снежинка", которая предусматривает нормализацию таблицы размерности. Название схемы также произошло от ее изображения в виде диаграммы "сущность/связь". Изредка можно услышать термины схема типа "созвездие" и схема типа "метель" с очевидным (?) смыслом.