пятница, 22 июля 2011 г.

MSSQL проект "Apollo"

В новой версии SQL Server 11 “Denali” создан новый, колоночный тип индекса - COLUMNSTORE

CREATE [[ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]] | [COLUMNSTORE] INDEX index_name

В отличии от обычного индекса для каждой колонки входящей в индекс создается свой набор страниц

Что то мне подсказывает что эта реализация с кучей ограничений (о которых ниже) представляет первый шаг к переходу от традиционных СУБД к колоночным.
По ограничением в чем то схож с HASH индексом:
  • Не может быть уникальным;
  • Не допускается сортировка;
  • В индексе могут присутствовать только простые типы данных (не допускаются: binary, varbinary, text, sql_variant и т.д.)
  • Автоматически не обновляется вместе с изменением данных (для актуализации индекса потребуется его удалить и создать заново rebuild не работает)
Работает это все примерно так:
При выполнении запроса анализируются используемые колонки. Каждая исп. колонка выгружается в оперативную память, сжимается и в последующем обрабатывается в оперативной памяти не используя обращение к диску. 
В основе архитектуры лежит ядро VertiPaq. Ядро VertiPaq(VertiPaq Engine) обрабатывает запросы с эффективными алгоритмами сжатия, реализует хранилище данных, позволяющее загружать огромные объемы данных непосредственно в память.

P.S. До 2005 версии MSSQL мог полностью "хранить" таблицу в оперативной памяти

Очень интересная презентация о новых возможностях  Денали


Ниже докуммент со сравнением производительности обычного и колоночного индекса