Использование табличных секций для быстрой загрузки данных
Большинство приложений хранилищ данных пытаются загрузить все увеличивающиеся объемы данных в течение малого - и все уменьшающегося - времени, отведенного на окно загрузки. Типичный процесс загрузки начинается с получения данных из нескольких систем-источников данных, после чего следуют шаги очистки, трансформации и синтеза данных из этих источников. Приложение управления данными ограничено тем, что должно выполнить весь процесс получения, трансформации и загрузки данных в течение окна загрузки. Обычно бизнес-пользователи системы настойчиво требуют, чтобы время, в течение которого хранилище данных будет недоступно для выполнения их запросов, было минимальным. Шаг "записи" в приложении управления данными, в течение которого в существующее хранилище данных добавляются новые данные, должен быть спроектирован таким образом, чтобы данные загружались быстро и с минимальным влиянием на работу пользователей.
Для быстрой загрузки данных модель восстановления базы данных должна быть либо Bulk Logged, либо Simple, а таблица должна быть либо пустой, либо содержать данные без индексов. Если эти требования выполняются, возможна загрузка без логирования. В SQL Server 2000, до появления секционированных таблиц, эти требования обычно выполнялись только при начальной загрузке данных истории в хранилище данных. Некоторые клиенты с большими хранилищами данных строили квази-секционированную структуру, создавая представление с UNION ALL для объединения отдельных физических таблиц; эти таблицы заполнялись при каждой загрузке без логирования. Такое решение проблемы не было идеальным. Но теперь в SQL Server 2005 секционированные таблицы обеспечивают превосходную функциональность.
В SQL Server 2005 вы не можете выполнить прямую загрузку данных в секцию без логирования. Однако вы можете осуществить загрузку данных в отдельную таблицу, которую мы назовем псевдо-секцией. При соблюдении определенных условий вы можете произвести переключение секций в секционированной таблице и включить псевдо-секцию в секционированную таблицу, что является операцией над метаданными, которая выполняется очень быстро. Такой подход удовлетворяет двум следующим требованиям:
- минимизации общего времени загрузки: загрузка в псевдо-секцию выполняется без логирования и
- минимизации влияния загрузки данных на конечного пользователя и обеспечения интеграции хранилища данных: загрузка данных в псевдо-секцию может производиться в одно и тоже время с выполнением пользовательских запросов к хранилищу данных. Приложение управления данными может подождать, пока все таблицы фактов будут загружены и готовы к включению их в секционированную таблицу. Операция включения этих таблиц в секционированную таблицу выполняется очень быстро, за доли секунды.
Кроме того, для псевдо-секции может создаваться резервная копия как для отдельной таблицы, что повышает управляемость системы.