Введение в системы БД (542480), страница 215
Текст из файла (страница 215)
° Индексы в виде В-деревьев. Индексы в виде В-деревьев предоставляют эффективный доступ для запросов диапазонов значений, за исключением случаев, когда количество подходящих строк становится слишком большим. Обновление В- деревьев относительно эффективно. 4 Хотя вертикальное разделение таклсе может иметь определенные преимущества, здесь оно не рассмоп|риеается, поскольку большинство продуктов его не поддерживает.
821 Глава 21. Поддержка принятия решений ° Индексы в виде битовых отображений. Предположим, что в индексированной таблице х содержится д строк. Тогда индекс в виде битового отображения для столбца С таблицы Т будет содержать вектор из л бит для каждого значения в домене столбца С и установленный бит будет соответствовать строке к, если в ее столбце С будет содержаться соответствующее значение. Такие индексы эффективны лля запросов, содержащих набор значений, однако их эффективность снижается, когда этот набор становится слишком большим. Обратите внимание, что несколько реляционных операций (соединение, объединение, ограничение равенства и т.п.) могут быть выполнены исключительно с индексами посредством булевых операций [МО, ОН, НОТ) над битовыми векторами. Доступ к реальным данным не требуется совсем, если не нужен конечный результирующий набор.
Обновление индексов битовых отображений относительно неэффективно. ° Кэш-индексы (они также называются кэш-адресацией нли просто кэшированием). Кэш-индексы эффективны для доступа к конкретным строкам, а не к диапазонам. Вычислительная стоимость линейно зависит от количества строк, поскольку для кэш-функции не требуется расширение, чтобы разместить дополнительные ключевые значения. Кэширование может также использоваться для эффективной реализации соединений, как описано в главе 17.
° Мультитабличные индексы (иногда они называются индексаии соединений). По существу, элемент мультитабличного индекса содержит указатели на строки в нескольких таблицах вместо простых указателей на строки в одной таблице. Такие индексы позволяют повысить производительность операций соединения и ускорить проверку ограничений целостности для нескольких таблиц (т.е. для базы данных). ° Булевы индексы (более известные как индексы выражений).
Булев индекс указывает, для каких строк определенной таблицы определенное логическое выражение (включающее столбцы рассматриваемой таблицы) будет истинным. Такие индексы чрезвычайно полезны, если соответствующее логическое выражение является обычным компонентом условия выборки. ° Функциональные индексы. Функциональные индексы индексируют строки таблицы не на основе значений в этих строках, а на основе результата применения к этим значениям некоторой функции. В дополнение к сказанному следует отметить, что предлагаются еше и различные виды смешанных или гибридных индексов, представляющих собой сочетание перечисленных выше индексов. Смысл таких гибридов трудно изложить в общих словах.
Также предлагается множество спеииатизированных видов индексов, таких как Я-деревья, которые предназначены для обработки геометрических данных. В этой книге мы не будем пытаться решить такую устрашающую задачу, как описание всех видов индексов; заинтересованным читателям можем предложить обратиться к [25,27), где содержится исчерпывающее изложение этой темы. И наконец рассмотрим вопрос контролируемой избыточности.
Контролируемая избыточность — это важный инструмент сокрашения количества операций ввода-вывода и минимизации конкурентного доступа к данным в базе, Как пояснялось в главе 1, избыточность контролируема, если она управляется СУБД и скрыта от пользователей. (Отметим, что по определению избыточность, которая должным образом контролируется на физическом уровне, не видима на логическом уровне и поэтому не влияет на корректность на логическом уровне.) Существует два общих вида такой избыточности. Часть )х.
дополнительные аспекты ° Первый вид включает обслуживание точных копий или реплик базы данных. Замечание. Управление копированием, которое может рассматриваться как менее амбициозная форма репликации, также широко поддерживается (см. ниже).
° Второй вид включает обслуживание производных данных в дополнение к базе данных. Наиболее часто используется в форме итоговых таблиц и расчетных (или вычисленных, или производных) столбцов. Рассмотрим каждый из этих видов по порядку. Основные понятия репликации были рассмотрены в разделах 20.3 и 20.4 главы 20 (см., в частности, подразлел "Распространение обновлений" в разделе 20.4). Здесь мы просто повторим несколько основных пунктов из этих разделов и выскажем некоторые дополнительные замечания.
Прежде всего напомним, что репликацня может быть синхронной и асинхронной. ° В случае синхронной репликации, если данный дубликат обновлен, все другие дубликаты того же элемента данных также должны быть обновлены в той же транзакции. Логически это означает, что существует лишь одна версия данных. В большинстве продуктов синхронная репликация реализуется с помошью триггерных процедур (возможно, скрытых и системно управляемых). Однако синхронная репликация имеет тот недостаток, что она создает дополнительную нагрузку при выполнении всех транзакций, в которых обновляются какие-либо реплики (кроме того, могут возникать проблемы, связанные с доступностью данных).
° В случае асинхронной репликации обновление одного дубликата распространяется на другие спустя некоторое время, а не в той же транзакции. Таким образом, при асинхронной репликации вводится задержка или вреия ожидания, в течение которого отдельные реплики могут быть фактически не идентичными (т.е. термин "реплики" оказывается не совсем верным, поскольку мы имеем дело не с точными копиями). В большинстве продуктов асинхронная репликация реализуется посредством чтения журнала транзакций или постоянной очереди обновлений, которые подлежат распространению.
Преимушество асинхронной репликации состоит в том, что дополнительная нагрузка от репликации разъединена с транзакциями обновлений, которые могут быть критичны ко времени выполнения и весьма чувствительны к требуемому уровню производительности. К недостаткам этой схемы относится то, что данные могут оказаться несовместимыми (т.е. несовместимыми с точки зрения пользователя). Например, избыточность может проявляться на логическом уровне, а это, строго говоря, означает, что термин "контролируемая избыточность" в таком случае неприемлемз. З Следует оганетить, что может возникнуть такая ситуация, когда будет трудно избежать или предупредит~ возможную несовиесп|ииость отдельных реплик, В частности, конфликт может возникнуть из-эа порядка, в котором выполняются обновления.
Пусть, например, в транзакции Т1 выполняется вставка сп1роки в реплику ЯХ, а затем в транзакции Т2 эта строка удаляется, и пусть ЯУ вЂ” это реплика таблицы ЯХ Если обновления будут распространены на таблицу ЯУ, но поступят к таблице ЯУ в обратнол~ порядке (например, из-за задержек в мариэрутизациий то транзакции 72 нечего будет удаэять, а позже в транзакции 71 будет вставлена подлежащая удалению строка. В конечнолэ счете реплика ЯУ будет содержат~ данную строку, а репэика ЯХ вЂ” нет. Разрещение конфтктов и достижение совместимости между репликами — это сложная проблема, которая в эпюй книге не обсуждается. З~З Глава 21. Поддержка принятия решений Следует отметить, что по крайней мере в коммерческом мире термин "репликация" стал означать преимущественно (или лаже исключительно) асинхронную репликацию (как уже отмечалось в главе 20).
Основное различие между репликацией и управлением копированием заключается в следующем. Если используется репликация, то обновление одной реплики в конечном счете распространяется на все остальные "автоматически". В режиме управления копированием, напротив, не существует такого автоматического распространения обновлений. Копии данных создаются и управляются с помощью группового или фонового процесса, который разделен по времени от обновляющих транзакций. Управление копированием, в общем, более эффективно по сравнению с репликацией, поскольку за один раз могут копироваться большие объемы данных. К недостаткам можно отнести то, что большую часть времени копии данных не будут идентичны данным базы, поэтому пользователи должны знать, когда эти данные синхронизированы. Обычно управление копированием упрощается благодаря требованию, чтобы обновления применялись в соответствии со схемой "первичной копиип того или иного вида (см.
главу 20). Теперь рассмотрим другой вид избыточности — расчетные столбцы и итоговые таблицы. Эти конструкции особенно важны в контексте систем поддержки принятия решений. В них содержатся предварительно подсчитанные значения данных — значения, которые вычисляются на основе других данных, хранящихся где-то в базе данных. Ясно, что такие конструкции позволяют избежать необходимости каждый раз повторно вычислять эти значения, когда онн понадобятся в каком-то запросе.
Расчетный столбец — это такой столбец, значение которого в данной строке является производным от других значений в той же строкев, Итоговая таблица — это таблица, в которой содержатся совокупные или обобщенные значения (сумма, среднее значение, количество строк и т.п.), вычисленные на основе значений в других таблицах. Такие итоги часто предварительно вычисляются лля нескольких различных групп одних и тех же детальных данных (см, раздел 21.6). Замечание. Если расчетные столбцы и итоговые таблицы действительно являются экземплярами контролируемой избыточности, то они должны быть полностью скрыты от пользователей, хотя в современных продуктах это правило обычно не соблюдается. Итоговые таблицы и расчетные столбцы чаше всего реализуются с помощью триггерных процедур, управляемых системой, хотя онн могут быть реализованы и с помощью пользовательских процедур.