Кластеризация в базах данных

Как правило, используется в СУБД среднего и большого размера. SQL-сервер – сервер среднего класса, а кластеризация в нем уже есть.
Идея кластеризации заключается в наиболее близком физическом размещении на диске логически связанных между собой данных (например, по какому-нибудь полю, по ключу). Записи физически лежат друг за другом.

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

Применяется 2 подхода: внутрифайловая и межфайловая кластеризация.
Внутрифайловая – это когда записи располагаются друг за другом в рамках одной таблицы.

Межфайловая – друг за другом располагаются записи из связанных таблиц (считывается запись поочерёдно, то из одной, то из другой).

Основные проблемы возникают при добавлении записей: когда появляется запись, которую нужно разместить между записями. Для этого делают ЗАПАС, за который отвечает параметр fillpart, обычно в % бывает 60-80%. Поэтому фактически вначале данные заносятся разряженными. Со временем опять возникает та же проблема. Диспетчер файлов, пока есть свободные места, даже передвигает записи, чтобы вставить нужную новую запись. Приходит время, когда всё пространство заполнено. К кластерам добавляются новые блоки, называемые ЭКСТЕНТАМИ – непрерывные области ~64 страницы, выделяемые на диске.

Если применить ещё и хеширование, что часто используется (совместно), то хешированный кластер требует ещё больше пустого места (свободного пространства) в блоке для обновления данных, поскольку некоторые адреса могут в принципе не использоваться.

Хешированные кластеры
Поддерживаются в СУБД Oracle, начиная с 7й версии, выпущенной в 90е годы. Используется хеширование для быстрого доступа к первичному ключу.

Рекомендации для использования таких кластеров
1. Целесообразно использовать для хранения таблиц, доступ к которым производится в разделе where с применением равенств (например, name=Иванов).
2. Хеширование приводит к тому, что изначально не надо создавать большие кластеры.
3. Не рекомендуется использовать для таблиц с полным просмотром (например, по городам, где полный просмотр используется вместо индекса).
4. Не рекомендуется использовать для таблиц с частым изменением данных. Поскольку записи на диске «как живые» их надо часто двигать между собой, и это занимает много времени, происходит перезапись адресов, одно стирается, другое записывается.


Комментарии запрещены.





Статистика

Рейтинг@Mail.ru