• Кто получил сколько баллов за тест?
• Какая группа оказалась наиболее эффективной?
• Какая секция (или вопрос) оказалась наиболее сложной?
Ответы на эти вопросы можно получить с помощью отдельно составленных SQL-запросов к реляционной БД, лежащей в основе информационного обеспечения веб-сайта. В таком случае, однако, при необходимости добавить какой-либо дополнительный функционал, пришлось бы составлять отдельные SQL-запросы. Известно, что такой подход не является эффективным в связи с высокими издержками на составление запросов и низкой производительностью их выполнения. К тому же, большое число сложных аналитических запросов способно значительно нагрузить сервер, на котором расположена база данных веб-сайта, тем самым делая БД недоступной для запросов из других источников (например, с самого веб-сайта).
В рассматриваемой системе используется технология OLAP, которая предоставляет возможность разрабатывать и выполнять многомерные запросы к хранилищу данных и получать детальную аналитику с минимальными затратами на составление самих запросов. Данная технология подразумевает, что данные периодически выгружаются из БД-источника (база данных веб-сайта) в специально разработанное реляционное хранилище данных с помощью ETL-процедур (от англ. Extract, Transform, Load - извлечение, изменение, загрузка).
Выгрузка данных, обычно, происходит ночью - в момент, когда нагрузка на
БД веб-сайта минимальна. Затем данные из хранилища могут быть использованы для
пополнения OLAP-куба данными для аналитики. При
этом, современное ПО в сфере бизнес-аналитики позволяет создавать несколько
кубов под различные цели, которые будут использовать различные данные.
Особенностью структуры куба является тот факт, что он хранит данные в
нескольких измерениях и может эффективно к ним обращаться во время выполнения
многомерных MDX-запросов.
За последние 3-5 лет технологическое обеспечение в сфере веб-разработки быстро изменилась. Технологии, которые считались новыми (HTML5, CSS3 и JQuery), были постепенно вытеснены мощными JavaScript-фреймворками, которые позволяют разработчикам создавать интерактивные и удобные в использовании приложения. Некоторые JS-библиотеки предоставляют различные программные методы представления данных, что значительно повышает общую производительность сайта. Есть несколько JS-библиотек, которые стали известными за счет своих преимуществ: React.JS и Angular 2. Одна из них будет использоваться в этом проекте.
Аналитическая система должна иметь хранилище данных, ПО для ETL-процедур, инструменты разработки OLAP-кубов и средства визуализации многомерных MDX-запросов. В качестве основы данной системы будет использован один из двух продуктов для бизнес-аналитики - ПО с открытым исходным кодом Pentaho BI Suite или мощный коммерческий продуктом Microsoft Analysis Services.
Еще одним преимуществом React является его синтаксис разметки, называемый JSX. Этот язык очень похож на HTML и XML, но имеет некоторые дополнительные возможности. JSX позволяет создавать динамическую компоновку данных в разметке страницы и встраивать компоненты в чистый HTML. Разработчикам может быть удобнее писать сокращенный код компонентов внутри HTML, который затем будут заменён полным кодом встраиваемого компонента. Например, это сочетание HTML и JSX будет выводить заголовок с текстом «Заголовок», а затем код компонента под названием «RootComponent»:
<h1> Заголовок </h1>
<RootComponent title = "Пример" />
Кроме того, JSX позволяет встраивать код JS в макет для вывода динамических данных. Для реализации этого кода код должен быть заключен в фигурные скобки. Например, этот фрагмент кода выдаст текущую дату:
<p> {Date ()} </ p>
Компонентный код хранится в объекте JavaScript, который обязательно наследует класс «React.Component» и имплементирует функцию «render». Эта функция возвращает JSX-код компонента, который описывает, как он должен отображаться в веб-браузере, и какие динамические данные следует вставлять в макет. Свойства, передаваемые компоненту извне, могут быть доступны в коде компонента за счет обращения к свойству this.props.propertyName. Например, свойство, названное «title» в компоненте под названием «RootComponent» из приведенного выше примера, может быть доступно с использованием выражения «this.props.title».
class RootComponent extends React.Component {() {<p>Заголовок: {this.props.title}</p>;
}
}
Каждый компонент имеет свое собственное состояние, доступ к которому осуществляется вызовом this.state. Состояние может использоваться для хранения различных параметров компонента, в зависимости от которых он будет перерисован веб-браузером заново, например, уровень доступа пользователя или его логин.
Компоненты могут быть вложены друг в друга, создавая древовидную архитектуру приложения, аналогичную дереву DOM (от англ. Document Object Model - объектная модель документа) веб-браузера. В React существует специальная логика для управления деревом компонентов, называемая Virtual DOM. Эта часть функциональности фреймворка React является механизмом хранения данных о том, какие элементы показываются посетителю сайта. Эти данные, подобно DOM, хранятся в виде дерева. Всякий раз, когда состояние компонента изменяется, React вызывает его функцию render() для перерисовки содержимого компонента. Затем он определяет, где именно данные должны быть заменены, и делает выборочные изменения как в Virtual DOM, так и в браузерном DOM-дереве. React делает наименьшее возможное количество манипуляций с DOM, сводя к минимуму использование ЦП и графического процессора, что, в свою очередь, ускоряет взаимодействие с веб-приложением. Таким образом, использование состояния компонента для управления его представлением упрощает создание приложений, зависящих от данных..JS также имеет функции для извлечения пользовательского ввода из веб-форм и привязки входных значений к состояниям компонентов. Функциональность этого фреймворка также может быть легко расширена с использованием сторонних библиотек.
Структура этого фреймворка представляет собой комплекс сложных отношений между многими объектами, которые представляют собой отдельные уровни архитектуры кода. Это означает, что с точки зрения разработчиков код логически разделяется на различные категории - инжекторы, компоненты, шаблоны, директивы и другие. Такое деление на функциональные блоки позволяет разработчикам создавать легко масштабируемые приложения.
Каждое веб-приложение Angular имеет, по крайней мере, один модуль, условно называемый «AppModule». Модули помогают организовать архитектуру приложения в единые функциональные блоки.
Компоненты, подобные React.JS, являются логическими элементами функциональности веб-приложения. Однако в Angular отсутствует функция рендеринга, поскольку разметка HTML хранится в отдельной сущности, называемой Template (шаблон).
Angular имеет расширенный шаблонный синтаксис с множеством логических операторов, встроенных в макет. Эти операторы позволяют разработчикам создавать интерактивные макеты, подобные JSX у React.
В этой структуре компоненты управляются из разных модулей, которые в конечном итоге образуют SPA. Связь между компонентами и модулями выполняется с использованием специальных объектов, называемых метаданными. Они определяют, какой шаблон, селектор, модуль и поставщики присутствуют у каждого компонента.
Angular также имеет двухстороннюю привязку данных, которая автоматически изменяет данные в шаблоне, показываемому пользователю, когда изменяются данные в модуле. Эта привязка работает и в обратном направлении - Angular изменяет данные в модуле, когда пользователь производит ввод данных в поля для ввода или по-иному взаимодействует с интерактивными элементами управления.
Angular известен своей масштабируемостью и архитектурной строгостью. Он используется многими сайтами с высокой нагрузкой и считается одним из самых сложных веб-фреймворков.
Это BI-решение представляет собой бесплатное программное обеспечение с открытым исходным кодом для бизнес-аналитики, принадлежащее Hitachi Group. Это пакет небольших утилит для различных аналитических целей.
Pentaho Data Integration (Kettle) позволяет управлять потоками данных. Он использует алгоритмы манипулирования данными для извлечения, преобразования данных из источников и дальнейшей загрузки (ETL) в хранилище данных.
Pentaho Analysis (Mondrian OLAP Server) используется для создания кубов OLAP, заполнения их данными из хранилища данных и обработки многомерных запросов для различных отчетов.
Это решение можно использовать с СУБД MySQL, PostgreSQL и другими СУБД с поддержкой JDBMS. Mondrian OLAP Server требует установки на машине с ОС Linux.
Этот пакет инструментов от Microsoft позволяет аналитикам создавать потоки данных, управлять кубами OLAP и обрабатывать многомерные запросы для целей отчетности.
Единственной доступной СУБД, которую можно использовать для хранилищ данных, является Microsoft SQL Server. Он может быть установлен на машине с ОС Windows. Функциональность MS SQL Server может быть расширена за счет различных отдельных служб, таких как службы SSIS (службы Integration Services), службы SSAS (службы Analysis Services) и службы SSRS (службы отчетов).
Microsoft SSIS (SQL Server Integration Services) используется для управления задачами ETL. Он способен извлекать данные из удаленных источников (например, из БД веб-сайта) в хранилище данных, которое используется для аналитики.
Microsoft SQL Server Analysis Services (MS SSAS) - это инструмент для проектирования многомерных OLAP-кубов, основанных на различных источниках данных, таких как реляционное хранилище данных. Этот продукт также выступает в качестве сервера для обработки MDX-запросов. Результат их выполнения можно получить с помощью специального ПО (например, MS SQL Server Management Studio) или с использованием специальных драйверов подключения к серверу кубов программно (например, из кода веб-сайта).
Службы Reporting Services (MS SSRS) могут также использоваться для интеграции предопределенного набора отчетов в сторонние приложения, такие как веб-сайт.
В ходе прохождения преддипломной практики одной из основных задач практиканта являлась проанализировать существующие технологии веб-разработки и осуществить обоснованный выбор набора используемых программных продуктов, которые максимально поспособствуют достижению поставленных перед разрабатываемой системой задач.
Первичное изучение подходов веб-разработки и анализ аналогичных существующих веб-систем, показал, что с архитектурной точки зрения разрабатываемая система будет состоять из нескольких слабо зависимых частей, каждая из которых будет служить определенной цели, и соответственно, иметь свой набор технологий. К таким частям относят:
• Внешний интерфейс (“Фронтенд” от англ. “Front-end”)
• Серверное API (“Бэкенд” от англ. “Back-end”)
• Аналитическая система
Проведенный анализ различных веб-систем показал, что технологии для фронтенда следует выбирать в первую очередь, так как они играют роль первого впечатления для посетителя сайта и их выбор во многом влияет на то, будет ли очередной посетитель постоянным пользователем системы. От набора (“стэка” от англ. “stack”) технологий для фронтенда в некоторой степени зависит выбор серверного языка программирования и типа БД. Однако, при наличии особого требования к веб-сайту, заключающегося в его интеграции со сторонней системой (например, аналитической системой), необходимо сначала отфильтровать список возможных языков серверного программирования по фактору совместимости с интегрируемой системой бизнес-аналитики. Анализ аналитических систем стоит производить по качественным оценкам их производительности, а также по возможности легкого их использования с офисным ПО, таким как MS Office.
Фронтенд. Интерфейсное решение для этого проекта должно обеспечивать высокую скорость работы и иметь возможность отрисовывать множество элементов на странице, основываясь на данных.
Поскольку основным фактором успеха для этого проекта с точки зрения веб-приложения является скорость, то основными кандидатами являются JavaScript-фреймворки React.JS и Angular 2. Эти библиотеки оказываются наиболее эффективными для одностраничных приложений (SPA). Для реализации этого проекта удобнее использовать React.JS, так как он имеет несколько особых преимуществ.
Во-первых, React.JS обеспечивает удобную архитектуру, управляемую компонентами, которая упростит рендеринг сложных тестов со многими разделами и различными типами вопросов.
Во-вторых, эта структура повышает производительность веб-сайта с использованием JSX и Virtual DOM. Для проекта более удобно использовать встраивание компонентов JSX, предлагаемое React, поскольку модульная система, используемая в Angular, кажется слишком сложной для такого проекта, как онлайновая система тестирования.- это легкая библиотека, и это идеальное решение для нужд этого проекта, в то время как функциональность Angular кажется чрезмерной.
Аналитическая система. Наиболее распространенными вариантами ПО для аналитических систем являются Microsoft BI Tools и Pentaho BI. Предпочтительно, аналитическая система должна быть совместима с современным программным обеспечением ПК для просмотра отчетов, таких как MS Excel.
Первое ПО позволяет выгружать данные из источников в хранилище данных с помощью Microsoft SSIS и выполнять многомерные аналитические запросы с помощью Microsoft SSAS. Продукты для бизнес-аналитики от компании Microsoft могут быть использованы только совместно с СУБД Microsoft SQL Server, которая, в свою очередь, может быть установлена только на компьютер с операционной системой Windows.
ПО от Pentaho имеет несколько инструментов для организации выгрузки данных из источников и составления OLAP-кубов. Данное ПО поддерживает СУБД MySQL и PostgreSQL. Однако, данная система имеет несколько минусов - во-первых, она не имеет подробной документации, во-вторых - разработка кубов и интеграций производится исключительно через использование JDBMS-драйверов, а не через графический интерфейс.
Выбор аналитической системы определяет, какая ОС будет использоваться для машины с OLAP-сервером. Он также определяет, какие технологии и языки программирования могут быть выбраны в качестве серверного решения для веб-сайта.
Для этого проекта аналитическая система будет разрабатываться с использованием MS SQL Server и Analysis Services. На сервере для хранилища данных должна быть установлена ОС Windows.
Бэкенд. Логика веб-сайта должна основываться на веб-сервере, совместимом с Windows. Он также должен быть способен отправлять запросы в аналитическую систему и получать результаты запроса.
Для разрабатываемой системы будет использоваться ASP.NET MVC 5 в качестве инструмента для разработки серверного API. Он использует язык программирования C#, что позволяет создавать сложную внутреннюю логику с использованием базы данных. Он также имеет может быть расширен за счет библиотеки для интеграции с MS SQL Server Analysis Services.
Задача оптимизации времени, затраченного на тестирование уже была осуществлена некоторыми командами разработчиков. В сети Интернет присутствуют веб-сайты, схожие по замыслу и решаемым задачам с проектируемым приложением.
Данный англоязычный веб-сервис предоставляет пользователям возможности по созданию онлайн-экзаменов различных типов. К типам относятся: