Что я должен иметь в виду при создании решения OLAP с нуля?
Я работаю в компании, работающей с программным продуктом на базе сервера баз данных MS SQL, и за эти годы я разработал 20-30 довольно продвинутых отчетов на PHP, беря данные непосредственно из базы данных. Это было очень успешно, и люди довольны этим.
но у него есть некоторые недостатки:
- для новых изменений, это может быть довольно интенсивное развитие
- пользователь может экспериментировать с данными блокируется жестко вид
- Это может быть медленным для больших отчетов
Я рассматриваю постепенный переход к подходу на основе OLAP, который можно запросить из Excel или какой-либо веб-службы. Но я хотел бы сделать это таким образом, чтобы ввести наименьшее количество новой сложности в ИТ - среде-наименьшее количество различных сервисов, заданий синхронизации и т. д.!
У меня есть несколько вопросов по этому поводу:
1) Связанный с рабочим процессом:
- каков хороший маршрут разработки от "black box SQL server"до" OLAP ready to use"?
- какие серверы и службы должны быть настроены, и какие сценарии должны быть написаны?
- что самое сложное/наиболее важных/наиболее трудоемкой части?
2) ETL:
- Я полагаю, что лучше иметь отдельные серверы для хранилища данных и производства В SQL?
- как они синхронизируются (push / pull)? Использование каких технологий / языков?
- для меня SSIS выглядит слишком сложным, и графический рабочий процесс не очень мне нравится-я бы предпочел текстовый скрипт, который выполняет эту работу. Возможно ли это?
- или выгодно использовать графический клиент только с одним источником и одним пунктом?
3) развития:
- сколько из этого (интеграция данных, службы analysis services) можно эффективно поддерживать с помощью CLI-инструмента?
- можно установку перенести взад и вперед между продукцией и развитием легко?
Я доволен любым ответом, который охватывает только часть этого - и хотя это среда MS, мне также интересно услышать о преимуществах в других технологиях.
2 ответов
У меня есть только опыт работы с Microsoft OLAP, поэтому вот мои два цента относительно того, что я знаю:
- Если вы реализуете Кубы, отделите производственный SQL Server от источника для кубов. Кубам требуется много SELECT DISTINCT column_name из источника.таблица. Вы не хотите, чтобы обработка Куба блокировала вашу критически важную производственную систему. 
- хотя вы можете реализовать Кубы OLAP со стандартными таблицами отношений, вы вы быстро обнаружите, что если ваши данные не являются системой в стиле книги, вам, вероятно, потребуется полностью переработать ваши таблицы фактов и измерений, и это потребует повторного запроса исходной базы данных снова и снова. Это большой аргумент для создания отдельного хранилища данных, использующего проводки в стиле книги для таблиц фактов. Например, если клиент что-то заказывает, а затем отменяет, исходная система может отслеживать это как изменение статуса. В вашей таблице фактов вам, вероятно, нужно показать это как строку для заказа с положительным количеством и потоком доходов и строку для отмены с отрицательным количеством и потоком доходов. 
- OLAP может быть излишним для вашей среды. Основная проблема, которую вы подняли, заключалась в том, что ваши отчеты статичны и пользователи хотят получить доступ к данным напрямую. Можно создать модель данных и предоставить пользователям доступ к построителю отчетов в службах SSRS или доступ к записи отчетов в других BI-пакетах, таких как Cognos, Business Objects, так далее. Я обычно не рекомендую этот подход, так как он выходит за рамки того, что большинство пользователей должны знать, чтобы получить данные, но в небольшом магазине этого может быть достаточно, и это легко реализовать. Давайте посмотрим правде в глаза-пользователи обычно просто хотят получить данные в Excel, чтобы манипулировать ими дальше. Поэтому, если вы не хотите предоставлять им веб-интерфейс, и вы просто хотите, чтобы они получили данные из Excel, вы можете предоставить им прямой доступ к базе данных к копии производственных данных. Недостатком этого подход заключается в том, что пользователи обычно не понимают отношений SQL или базы данных. OLAP помогает избежать принуждения пользователей изучать SQL или отношения, но это не легко реализовать на вашем конце. Если у вас есть только несколько опытных пользователей, которым нужен такой доступ, может быть достаточно легко научить нескольких опытных пользователей, как выполнять основные запросы в Excel против базы данных, и они будут рады получить это завтра. ОЛАП не будет готов к завтрашнему дню. 
- Если у вас есть только несколько видов систем исходных данных, вы могли бы уйти с построением супер-динамического статического отчета. Например, у меня есть отчет, написанный на C#, который в основном позволяет пользователям выбирать столько столбцов, сколько они хотят из списка из 30 столбцов, и фильтровать данные по нескольким полям диапазона дат и спискам фильтров полей. Этот простой отчет охватывает около 40% всех запросов специальных отчетов от конечных пользователей, поскольку он охватывает все основные, основные показатели и поля клиента. Недавно мы перенесли этот доклад на SSRS и это позволило нам увеличить количество полей до 100 и улучшить общий пользовательский интерфейс. Независимо от платформы отчетности, можно предоставить пользователям некоторую динамическую гибкость даже в рамках статической системы отчетности. 
- Если у вас есть только несколько баз данных, вы, вероятно, можете создавать резервные копии и восстанавливать базы данных в качестве ETL. Однако, если вы хотите сделать что-то помимо этого, вы можете также укусить пулю и использовать SSIS (или некоторые другой инструмент ETL). Как только вы попадете в ETL для хранения данных, вы будете использовать графический инструмент дизайна. Кодирование хорошо работает для приложений, но ETL больше о рабочих процессах, и именно поэтому инструменты имеют тенденцию сходиться на графическом интерфейсе. Вы можете обойти это и попытаться закодировать хранилище данных из текстового редактора,но в конце концов вы потеряете много. см. этот пост для получения более подробной информации о различиях между загрузкой данных из кода и загрузкой данных из SSIS. 
ОТЗЫВЫ О ТОМ, КАК ИСПОЛЬЗОВАТЬ КУБЫ С РЕЛЯЦИОННЫМ ХРАНИЛИЩЕМ ДАННЫХ
можно реализовать куб над реляционным хранилищем данных, но есть некоторые серьезные проблемы с использованием этого подхода. Основная причина, по которой это технически возможно, связана с тем, как вы настраиваете свой DSV. DSV по существу является логическим слоем между физической базой данных и определениями Куба/измерения. Вместо импорта реляционного таблицы в DSV можно определить именованные запросы или создать представления в базе данных, которые сглаживают данные.
преимущество этого подхода заключается в следующем:
- Это относительно легко реализовать, так как вам не нужно создавать целую подсистему ETL, чтобы начать работу с OLAP. 
- этот подход хорошо работает для прототипирования того, как вы хотите построить более долгосрочное решение. Вы можете прототипировать его в 1-2 днях и показать некоторые из преимущества OLAP сегодня. 
- некоторые очень, очень большие таблицы не должны быть полностью дублированы только для поддержки Куба OLAP. У меня есть несколько многомиллиардных таблиц строк, которые почти полностью стандартизированы таблицами фактов. Единственные столбцы, которых у них нет, - это ключи даты, а также некоторые значения NULL в полях, которые вообще не должны иметь нулей. Вместо дублирования этих очень массивных таблиц можно создать суррогатные ключи даты и задать значения для нулей в представлении или именованном запросе. Если вы не собираетесь видеть огромное преимущество производительности для дублирования таблицы, то это может быть кандидатом на выход в более сыром формате в самой базе данных. 
недостатки этого подхода заключаются в следующем:
- Если вы не создали хранилище данных метода true Kimball, то вы, вероятно, не отслеживаете транзакции в стиле книги. Таблицы фактов метода Кимбалла (по крайней мере, как я их понимаю) всегда изменяйте значения, добавляя и вычитая строки. Если кто-то отменяет часть заказа, вы не можете обновить значение в кубе для одной транзакции. Вместо этого вы должны сбалансировать транзакцию с отрицательным значением. Если вам нужно обновить транзакцию, вам придется полностью переработать раздел куба, чтобы заменить значение, которое может быть очень дорогой операцией. Если ваша исходная система не является системой транзакций в стиле книги, вам, вероятно, придется создать копия в стиле книги в подсистеме ETL. 
- Если вы не создаете хранилище данных метода Kimball, то вы, вероятно, используете незарегистрированные и, возможно, нецелые первичные ключи в своей базе данных. Это напрямую влияет на производительность запросов внутри куба. Он также настраивает вас на наличие теоретически негибкого хранилища данных. Например, если у вас есть система заказа продукта, которая использует целочисленный ключ, и вы начинаете использовать вторую систему заказа продукта либо как замена устаревшей системы или в тандеме с устаревшей системой, вы можете бороться, чтобы объединить данные вместе только через DSV, так как каждая система имеет различные точки данных, метрики, рабочие процессы, типы данных и т.д. Хуже того, если они имеют одинаковые типы данных для идентификатора заказа и значения идентификатора заказа перекрываются между системами, необходимо объявить суррогатный ключ, который можно использовать в обеих системах. Это может быть трудно, но не невозможно реализовать без использования сплющенных данных склад. 
- возможно, вам придется построить систему дважды, если вы начнете с реляционного хранилища данных, а затем перейдете к сплющенной базе данных. Честно говоря, я думаю, что количество дублированной работы тривиально. Большая часть того, что вы узнали, создавая куб из реляционного хранилища данных, будет преобразована в настройку нового Куба OLAP. Основная проблема, однако, заключается в том, что вы, вероятно, создадите новый куб вообще, а затем любые пользователи старого Куба должны будут перейти на новый куб. Любые отчеты, построенные в SSRS или Excel, вероятно, сломаются в этот момент и должны быть переписаны с нуля. Таким образом, основная стоимость перестройки Куба заключается в перестройке зависимых объектов, а не в перестройке самого Куба. 
Дайте мне знать, если вы хотите, чтобы я узел по любому из вышеперечисленных пунктов. удача.
вы в основном задаете вопрос на миллион долларов "как мне построить DWH". Это не тот вопрос, на который можно дать решительный ответ.
тем не менее, вот кикстарта:
Если вы ищете минимально жизнеспособный продукт, имейте в виду, что вы находитесь в среде данных, а не в чистом программном обеспечении. В средах с высокой нагрузкой на данные гораздо сложнее постепенно создавать продукт, потому что объем усилий по внесению изменений в систему намного больше более значительный. Подумайте об этом так, как будто каждое изменение, которое вы делаете в программном обеспечении, должно быть каким-то образом обратно совместимо с тем, что вы когда-либо делали. Теперь вы понимаете, что Microsoft находится в аду: -).
кроме того, системы данных включают в себя множество сторонних инструментов, таких как DBs, ETL инструменты и платформы отчетности. Выбор, который вы делаете, должен быть жизнеспособным для ожидаемого развития вашей системы, иначе вам придется полностью заменить эти инструменты в будущем.
пока вы можете начните с клонирования БД, которое будет основано на простой копии SQLs, а затем агрегировать его или толкать его в OLAP, я бы рекомендовал испачкать руки настоящим инструментом ETL с самого начала. Это особенно верно, если вы предвидите необходимость роста. 9 из 10 раз, нужно будет расти.
MS-SQL-хороший выбор для БД, если вы не возражаете против стоимости. Естественным инструментом ETL будет SSIS, и это также твердый инструмент.
даже если ваш первый преобразования-это просто "возьмите эту таблицу и сбросьте ее туда", вы все еще получаете много с точки зрения управления процессами (работа выполнена? Что произойдет, если он потерпит неудачу? и т. д.) и отладки. Кроме того, легче органически расти, поскольку необходимо учитывать требования и/или особые случаи.
