Бизнес-отчетность по OLTP-приложению

У нас есть приложение OLTP, использующее Oracle Database 10g Enterprise Edition, и мы планируем создать уровень бизнес-отчетности для удовлетворения следующих потребностей.

  • Сложность защиты текущей структуры базы данных OLTP
  • Повышение производительности запросов к текущим отчетам OLTP.
  • Предоставление доступа только для чтения к другим приложениям
  • Предоставление бизнес-пользователям возможности создавать специальные отчеты

Решение, о котором мы думаем, состоит в том, чтобы создать слой кэша БД с использованием материализованных представлений Oracle (MV) поверх текущей OLTP. MV будут денормализованы и предназначены для репортажей. Журнал MV будет синхронизировать изменения в MV с помощью добавочного обновления.

Мои вопросы,

  1. Имеет ли этот подход смысл (MV)? Кто-нибудь использовал MV для создания решений для создания отчетов OLTP?
  2. Каковы недостатки этого подхода (MV)?
  3. Как насчет использования Oracle CDC и таблиц с процедурами для выполнения синхронизации.
  4. Любые другие подходы?

Спасибо, Шерри.


person Sherry    schedule 10.02.2011    source источник


Ответы (1)


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

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

Материализованные представления также означают усиление конкуренции за кэш-память между OLTP и пользователями отчетов. Поскольку они хранятся в разных объектах, отчеты, которые ищут недавнюю активность, не смогут извлечь выгоду из горячих блоков в кэше из активности OLTP, и наоборот. Вы можете смягчить эту проблему, выделив на нее оперативную память или переместив отчеты в непиковые часы, но это не самое эффективное решение. Если у вас есть почти исключительно исторические отчеты, это, вероятно, не имеет большого значения — совместного использования все равно не будет, потому что процессы интересуются совершенно другими блоками — но если у вас много оперативных отчетов, это становится важным.

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

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

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

person Justin Cave    schedule 10.02.2011
comment
@Sherry - переписал пост для предприятия, а не для экспресса. - person Justin Cave; 11.02.2011
comment
спасибо за репост с выпуском для предприятий, а также за хорошее внимание к проблемам с хранением и ресурсами MV. - person Sherry; 11.02.2011
comment
у нас наверняка есть проблема производительности с OLTP. Хранилища данных — зверь сам по себе. Кроме того, считается, что склады больше подходят для OLAP, отчетов для интеллектуального анализа данных, чем для операционных отчетов. - person Sherry; 11.02.2011
comment
мы являемся независимым поставщиком программного обеспечения (поставщиком OLTP), создание хранилища данных действительно невозможно. - person Sherry; 16.02.2011