Я управляю в своей базе данных списком инструментов с этой схемой:
[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), поэтому это не кажется эффективным.