Skip to content
February 12, 2012 / ahriman hpc mode

Кластерный индекс в SQL Azure

Как всем известно, для того, чтобы всё работало с нашими таблицами в SQL Azure и мы могли вставлять в них записи, таблицы должны иметь кластерный индекс. Какое-то время я тоже думал, зачем это возведено в ранг обязательного условия, но потом, после небольшого исследования Интернета, наткнулся на статью на MSDN. Немного выдержки из этой статьи.

Итак, кластерные индексы необходимы для репликации. В SQL Azure всё содержится в триплетах – в трёх репликах – одной primary и двух secondary.

При записи данных данные сначала записываются на primary реплику, потом на одну secondary, и только после этого транзакция подтверждается (commited). Каждая операция записи производится в точно такой же узел лист в одну строку данных во всех трех репликах. Другими словами, страницы данных идентичны между всеми тремя репликами.

В SQL Server и SQL Azure кластерные индексы организованы в B-деревья, в которых каждая страница является индексным узлом. В кластерном индексе листья содержат страницы данных базовой таблицы. Корневой и промежуточные (intermediate) узлы уровня содержат индексные страницы с индексными записями. Каждая индексная запись содержит пару ключ-значение и указатель на промежуточную страницу в B-дереве либо на строку данных на листе. Страницы на каждом из уровней организованы в двусвязный список.

grid.ai

Некластерные индексы имеют аналогичную структуру B-дерева, что и кластерные индексы. Однако в SQL Server, если таблица – куча (heap), то есть не имеет кластерного индекса, локатор строки будет являться указателем на строку. Указатель создается из идентификатора файла (ID), номера страницы и номера строки на странице. Строки данных хранятся в случайном порядке и не связаны в связный список. Подробнее – Heap Structures.

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

Итак, в SQL Azure порядок последовательности страниц данных – основа репликации данных, отсюда и требование кластерного индекса.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: