Соединить запрос к данным OLAP и операциям

Я управляю в своей базе данных списком инструментов с этой схемой:

[id] int PRIMARY
[name] varchar

Каждые несколько секунд каждый инструмент выдает измерение. Я сохраню его в хранилище OLAP со следующей схемой:

[toolID] int
[time] timestamp
[measurement] int

(Мы еще не выбрали хранилище OLAP, но предполагаем, что оно нам нужно из-за объемов данных, семантики и типов запросов, которые мы будем выполнять)

Как запросить список названий инструментов с размерами больше 100? Проблема в том, что мне нужно объединить данные из хранилищ OLAP и OLTP.

Вариант 1 - сохранять в OLAP также название инструмента при каждом измерении (денормализация). Проблема в том, что название инструмента могло измениться после измерения, и мне нужна последняя версия. Также может быть гораздо больше деталей (и подробных данных) для каждого инструмента, не уверен, имеет ли смысл сохранять все это для каждого измерения.

Вариант 2. OLAP возвращает только список идентификаторов, затем я отправляю запрос в OLTP для получения имен. Для этого потребуются SQL-запросы со многими встроенными идентификаторами, что кажется неправильным.

Вариант 3. Синхронизируйте все данные OLTP с OLAP каждые несколько минут. Но инструменты OLAP не оптимизированы для обновлений (например, Vertica), поэтому это не кажется эффективным.


person Yaron Naveh    schedule 23.05.2013    source источник
comment
Вы буквально имеете в виду измерение > 100 или количество (измерение) > 100? Насколько велик ваш список инструментов по сравнению с количеством записей измерений (в процентах)? Действительно ли список инструментов и их детали меняются каждые несколько минут? Если для инструмента изменяется деталь, хотите ли вы, чтобы старые данные измерений были связаны со старой деталью, новой деталью или и тем, и другим?   -  person ajw0100    schedule 24.05.2013
comment
4 из последних 6 измерений › 100. каждый инструмент будет иметь тысячи измерений. список инструментов меняется не так часто, но когда это происходит, важно показывать обновленные данные в отчетах. когда детали изменяются, старые измерения должны быть связаны с новыми деталями. Я предполагаю, что я задаю основной вопрос в хранилище данных здесь. Нужно ли мне периодически копировать все строки данных инструментов в хранилище (где сохраняются измерения), чтобы упростить объединение? Я читал, что Vertica не блещет обновлениями, разве этот периодический экземпляр не является таким обновлением?   -  person Yaron Naveh    schedule 24.05.2013


Ответы (1)


Как правило, в системах OLAP/DW предпочтительнее вариант 3, и список инструментов и их детали будут храниться в таблице измерений инструментов, а измерения будут храниться в таблице фактов измерений.

Если, как вы упомянули в своем комментарии, вы не заинтересованы в сохранении истории сведений об инструменте при изменении сведений и частоте, а также количестве обновлений сведений об инструменте мало, то я бы просто обновил записи в измерении Инструмент, так как это будет относительно небольшое количество обновлений.

Если частота обновлений мала, а фактическое количество обновлений велико, может быть проще и быстрее просто урезать измерение Инструмент и вставить все записи Инструмента из системы OLTP. В этом случае вам нужно будет убедиться, что есть способ сохранить ключи измерений, чтобы присоединиться к измерениям фактов, которые уже были сохранены. Это может быть сложно, если вы используете суррогатный ключ на основе автоматически сгенерированной последовательности.

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

person ajw0100    schedule 24.05.2013
comment
благодаря. Если я урежу размер инструмента, то инструменты и измерения не будут находиться в одной и той же базе данных, поэтому простые соединения будут невозможны. В этом случае мне нужно взять все идентификаторы, которые я получил от факта, и запросить их данные отдельно от OLTP, используя (длинную) конкатенацию SQL или более умный механизм (SP). Это правильно? Кроме того, если я забочусь о сохранении истории инструмента (и его деталей), мне нужно добавить одну строку измерения (с текущим состоянием инструмента) на одну строку фактов? - person Yaron Naveh; 24.05.2013
comment
В традиционных OLAP/DW все данные будут храниться в одной базе данных. Если вы хотите усечь вместо обновления, вам понадобится хороший способ повторно сгенерировать ключи измерения правильно, чтобы их можно было снова соединить с уже сохраненными данными фактов. Например, если в системе OLTP есть уникальный столбец TOOL_ID, вы можете использовать его в качестве ключа измерения, поскольку он всегда будет доступен для копирования из системы OLTP в систему OLAP после усечения. - person ajw0100; 24.05.2013
comment
Если вы хотите сохранить историю инструмента, вам не нужно будет обновлять или усекать, вы можете просто вставить. Это называется медленно меняющимся измерением типа II (SCD). /a> и часть 2 в этой статье описываются типы SCD и их компромиссы. - person ajw0100; 24.05.2013