Какие структуры данных и алгоритмы применяются в кубах хранилища данных? - PullRequest
2 голосов
/ 23 мая 2010

Я понимаю, что кубы - это оптимизированные структуры данных для агрегации и "нарезки" больших объемов данных. Я просто не знаю, как они реализованы.

Я могу себе представить, что многие из этих технологий являются проприетарными, но есть ли какие-либо ресурсы, которые я мог бы использовать, чтобы начать реализацию своей собственной технологии кубов?

Теория множеств и много математики, вероятно, вовлечены (и приветствуются в качестве предложений!), Но меня в первую очередь интересуют реализации: структуры данных и алгоритмы запросов.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 июня 2010

Существует фантастическая книга, в которой описываются многие внутренние детали реализации SSAS, в том числе детали механизма хранения и запросов:

http://www.amazon.com/Microsoft-Server-Analysis-Services-Unleashed/dp/0672330016

1 голос
/ 24 мая 2010

В базе данных звездообразной схемы факты обычно собираются и хранятся с наивысшим качеством.

Итак, давайте возьмем пример SalesFact с рисунка 10 в http://www.ciobriefings.com/Publications/WhitePapers/DesigningtheStarSchemaDatabase/tabid/101/Default.aspx

Прямо сейчас,зерна это продукт, время (в день детализации), магазин.

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

Тогда у вас будет SalesFactMonthly (или добавьте различие зерен в существующую таблицу фактов, поскольку измерения одинаковы - иногда в агрегациивы можете потерять размеры точно так же, как вы можете потерять зерно, например, если вы хотите только по магазину, а не по товару).

ProductID
TimeID (only linking to DayOfMonth = 1)
StoredID
SalesDollars

И вы получите это, выполнив:

INSERT INTO SalesFactMonthly (ProductID, TimeID, StoreID, SalesDollars)
SELECT sf.ProductID
    ,(SELECT TimeID FROM TimeDimension WHERE Year = td.Year AND Month = td.Month AND DayOfMonth = 1) -- One way to find the single month dimension row
    ,sf.StoreID
    ,SUM(sf.SalesDollars)
FROM SalesFact AS sf
INNER JOIN TimeDimension AS td
    ON td.TimeID = sf.TimeID
GROUP BY td.Year, td.Month

Что происходит в кубах, так это то, что у вас в основном есть мелкозернистые звезды и предварительные агрегаты - но каждая реализация является проприетарной - иногда вы можете этого не делатьдаже имеют самые точные данные в кубе, поэтому о них нельзя сообщать.Но каждый раз, когда вы захотите нарезать данные, нужно хранить их в этом фрагменте, иначе вы не сможете произвести анализ таким образом.

0 голосов
/ 23 мая 2010

Как правило, хранилище данных использует реляционную базу данных, но таблицы не нормализуются, как операционная реляционная база данных.

Хранилище данных является предметно-ориентированным.Тематические таблицы хранилища данных обычно имеют следующие характеристики:

  • Множество индексов.

  • Нет объединений, кроме просмотра таблиц.

  • Дублированные данные, предметная таблица сильно денормализована.

  • Содержит производную и агрегированную информацию.

Таблицы базы данных в хранилище данных расположены в звездообразной схеме.Схема типа «звезда» - это, в основном, одна предметная таблица с массивом справочных таблиц.Ключи справочных таблиц являются внешними ключами в предметной таблице.Если вы нарисуете диаграмму взаимосвязи сущностей в предметной таблице, справочные таблицы будут окружать предметную таблицу как звездные точки.

Что касается запросов, это зависит от предметных таблиц и количества строк.Как правило, ожидайте, что запросы будут занимать много времени (много минут, иногда часов).

Вот общая статья, с которой можно начать: Разработка архитектуры хранилища данных

Вотобщий обзор проектирования схемы типа «звезда»: проектирование базы данных схемы типа «звезда»

...