Урок 1. Архитектура, средства и языки разработки
Сайт: | Система дистанционного обучения ФГБОУ ВО ЮГУ |
Курс: | Тест Глобал |
Книга: | Урок 1. Архитектура, средства и языки разработки |
Напечатано:: | Гость |
Дата: | среда, 2 июля 2025, 11:53 |
Описание
Цель данного урока:
- Познакомить слушателей с архитектурой фреймворка и принципами разработки в нем.
- Познакомить слушателей с базой данных Postgresql.
- Дать понять какие знания и навыки по работе с языком sql потребуются для дальнейшей работы.
- Ознакомить со структурой документации Postgresql.
- Дать понять какие знания и навыки по работе c языками scala и jexl потребуются для дальнейшей работы.
- Ознакомить со структурой документации scala и jexl.
Данный урок предоставляет:
- Обзор архитектуры.
- Основные понятия фреймворка.
- Основные понятия по работе с базой данных.
- Упражнения по языку sql.
- Упражнения по scala.
- Упражнения по jexl.
- Литературу для самостоятельного изучения.
1. Архитектура системы
Для изучения смотри:
Руководство разработчика: Введение
Общий принцип работы:
Пользователь подключается с помощью браузера к серверу приложения в режиме терминального доступа. Сервер приложения возвращает web страницу с рабочим столом, на котором пользователь может открывать экранные формы и просматривать\загружать отчеты.
Протокол терминального доступа позволяет работать через тонкий канал за счет того что пользователю передается только видимая часть данных.
Для предоставления пользователю требуемой бизнес логики, сервер приложения запускает решение, которое состоит из набора модулей. Где модуль - это неделимая часть решения. Каждый модуль содержит автономную(классы) и интерактивную(выборки) бизнес логику.
2. База данных
О базе данных:
Для работы система Global использует базу данных PostgreSQL. PostgreSQL – это свободно распространяемая объектно-реляционная система управления базами данных (ORDBMS), с наиболее богатым sql из открытых СУБД и являющаяся реальной альтернативой коммерческим базам данных. PostgreSQL произносится как post-gress-Q-L (сокр. Postgres).
Postgres – это реляционная система управления базами данных (РСУБД). Где данные хранятся в виде строк в таблицах, с возможностью ссылаться на другие таблицы.
Все строки таблицы имеют одинаковый набор именованных столбцов, при этом каждому столбцу назначается определённый тип данных. Хотя порядок столбцов во всех строках фиксирован, важно помнить, что SQL не гарантирует какой-либо порядок строк в таблице (хотя их можно явно отсортировать при выводе).
Все изменения данных в Postgres проходят посредством транзакций (логически операция, которая может быть совершена только полностью).
Надежность
Надежность PostgreSQL обеспечивается следующими возможностями:
- ACID – Atomicity, Consistency, Isolation, Durability
- Atomicity – Атомарность
Транзакция рассматривается как единая логическая единица, все ее изменения или сохраняются целиком, или полностью откатываются - Consistency – Согласованность
Транзакция переводит базу данных из одного непротиворечивого состояния (на момент старта транзакции) в другое непротиворечивое состояние (на момент завершения транзакции). Непротиворечивым считается состояние базы, когда выполняются все ограничения физической и логической целостности базы данных, при этом допускается нарушение ограничений целостности в течение транзакции, но на момент завершения все ограничения целостности, как физические, так и логические, должны быть соблюдены - Isolation – Изоляция
Изменения данных при конкурентных транзакциях изолированы друг от друга на основе системы версионности - Durability – Устойчивость
PostgreSQL заботится о том, что результаты успешных транзакций гарантировано сохраняются на жесткий диск вне зависимости от сбоев аппаратуры
- Atomicity – Атомарность
- MVCC – Multiversion Concurrency Control
Один из механизмов СУБД для обеспечения параллельного доступа к базам данных, заключающийся в предоставлении каждому пользователю так называемого «снимка» базы, обладающего тем свойством, что вносимые пользователем изменения невидимы другим пользователям до момента фиксации транзакции. Этот способ управления позволяет добиться того, что пишущие транзакции не блокируют читающих, и читающие транзакции не блокируют пишущих. - WAL – Write Ahead Logging
Общепринятый механизм протоколирования всех транзакций, что позволяет восстановить систему после возможных сбоев. Основная идея WAL состоит в том, что все изменения должны записываться в файлы на диск только после того, как эти записи журнала, описывающие эти изменения будут и гарантировано записаны на диск. Это позволяет не сбрасывать страницы данных на диск после фиксации каждой транзакции, так как мы знаем и уверены, что сможем всегда восстановить базу данных, используя журнал транзакций. - PITR – Point in Time Recovery
Предоставляет возможность восстановления базы данных (используя WAL) на любой момент в прошлом, что позволяет осуществлять непрерывное резервное копирование кластера PostgreSQL. Репликация также повышает надежность PostgreSQL. - Integrity – Целостность
PostgreSQL поддерживает целостность данных на уровне схемы - это внешние ключи (foreign keys), ограничения (constraints).
Производительность
Postgres обеспечивает высокую высокую масштабируемость за счет следующих возможностей:
Поддержка индексов
Индексы — это традиционное средство увеличения производительности БД. Используя индекс, сервер баз данных может находить и извлекать нужные строки гораздо быстрее, чем без него. Однако с индексами связана дополнительная нагрузка на СУБД в целом, поэтому применять их следует обдуманно. Postgres поддерживает:
- Стандартные индексы
- Частичные индексы
- Функциональные индексы
Планировщик запросов
Планирует выполнение запроса, основывается на стоимости различных планов, учитывая множество факторов таким образом, чтобы минимизировать используемые ресурсы сервера.
Система блокировок
Блокировка поддерживается на уровне таблиц и записей. Блокировка оптимизирована под конкретную ОС и архитектуру.
Кэширование
Управление буферами и кэширование используют развитые алгоритмы для поддержания эффективности использования выделенных ресурсов.
Табличные пространства
Tablespaces позволяют гибкое использование дискового пространства для хранения объектов системы.
3. Классы
Определяет правила хранения и обработки таблицы базы данных.
Для изучения смотри:
4. Выборки
Определяет правило получения, отображение данных и обеспечивает взаимодействие с пользователем
Для изучения смотри:
5. Модуль
Модуль – это неделимая группа файлов, которая может включаться в произвольный прикладной проект.
Бизнес-логика, разрабатываемая с помощью фреймворка, компонуется между прикладными проектами с помощью модулей.
Где:
Прикладной проект
Набор модулей, собираемых в конечное решение. Прикладной проект компонует бизнес логику модулей и связывает их между собой посредством инъекций зависимости (плагины, проектные переопределения).
Решение
Набор исполняемых файлов и ресурсов, разворачиваемый на сервере приложения в рамках одной схемы базы данных.
Для изучения смотри:
6. Инструменты разработки
Dbeaver
Dbeaver – свободный кроссплатформенный инструмент разработки базы данных.
Используется для написания и отладки комплексных sql запросов.
PL/pgSQL
PL/pgSQL – это процедурное расширение, наследует все пользовательские типы, функции и операторы SQL.
Язык позволяет:
- создавать функции и триггеры
- использовать управляющие структуры
- выполнять сложные вычисления
Функции PL/pgSQL могут использоваться везде, где допустимы встроенные функции. Например, можно создать функции со сложными вычислениями и условной логикой, а затем использовать их при определении операторов или в индексных выражениях.
Для изучения языка смотри:
Intellij Idea
Интегрированная среда разработки для написания исходного кода модулей.
Для изучения смотри:
Руководство разработчика: Работа в IntelliJ IDEA
Конфигуратор
Системное приложение Конфигуратор, развернутое в сервере приложения, предназначено для автоматизации и ускорению выполнения рутинных задач по разработке проекта.
Для изучения смотри:
7. Языки программирования
Язык SQL
Декларативный язык запросов, применяемый для создания, модификации и управления данными. В отличие от процедурных языков, в которых есть условия, циклы и функции, в sql таких конструкций почти нет. Декларативные выражения представляют собой описание того, что необходимо получить. По данному описанию планировщик Postgres строит алгоритмы для получения результата.
Для изучения языка смотри:
Русскоязычная документация от PostgresPro
Язык scala
Язык разработки используемый для программирования бизнес логики сервера приложения.
Для изучения смотри:
Показатели производительности коллекций
Руководство разработчика: Языки разработки # Scala
Библиотека юнит тестирования в скала
Язык jexl
Java Expression Language – Язык выражений java Используется для выполнения динамической бизнес логики. Скрипты на jexl не требуют перекомпиляции прикладного проекта, поэтому могут исполняться в сервере приложений в любое время.
Данный язык широко используется в скриптах миграции, а так же в событиях рабочих процессов, настраиваемых на проекте.
Для изучения смотри:
8. Настройка рабочего места
Подготовка системы при работе с виртуальной машины, с подготовленным образом
- Примечание
-
- В случае, если вы используете курс с опцией
virtual-vm
, файл с учебной схемой находится в каталогеc:\distr
2. Перейдите в каталог исполняемых файлов postgres
cd "C:\Program Files\PostgreSQL\14\bin"
3. Запустите скрипт установкиpsql -U postgres -f c:\distr\clubdata.sql -d postgres -x -q
Данный скрипт создаст базу данных exercises
Database > New connection
PostgreSQL
postgres
с настройками по умолчанию, созданное соединение будет работатьTest connection
в мастере соединенияДля создания нового подключения к базе
exercises
:Database > New connection
PostgreSQL
postgres
с настройками по умолчанию, созданное соединение будет работатьexercises
Test connection
в мастере соединения- Примечание
-
- В случае, если вы используете курс с опцией
virtual-vm
, далее переходите сразу к пунктуЗапуск сервера приложения в режиме отладки
Подготовка БД для урока
-
Установите и настройте
postgres
-
Установите и настройте
Dbeaver
- Примечание
-
- Можно пропустить этот шаг если вы используете курс с опцией
virtual-vm
и образ start
Установка postgres
Для установки postgres
:
- Примечание
-
- В случае, если вы используете курс с опцией
virtual-vm
дистрибутив находится в каталогиc:\distr
При установке достаточно выбирать опции по умолчанию.
- Внимание
-
- Имя служебного пользователя должно быть
postgres
Для загрузки схемы для обучения:
1. Положите файл с учебной схемой вc:\distr
- Примечание
-
- В случае, если вы используете курс с опцией
virtual-vm
данный шаг можно пропустить
3. Перейдите в каталог исполняемых файлов postgres
В случае установки по умолчанию 14 версии:
cd "C:\Program Files\PostgreSQL\14\bin"
4. Запустите скрипт установки
psql -U postgres -f c:\distr\clubdata.sql -d postgres -x -q
Данный скрипт создаст базу данных exercises
Установка и настройка Dbeaver
Для установки:
1. Запустите установщик Dbeaver- Совет
-
- В случае, если вы используете курс с опцией
virtual-vm
дистрибутив находится в каталогиc:\distr
При установке достаточно выбирать опции по умолчанию.
Если нет подключения к интернету, настройте драйвер базы данных для автономной работы:
Dbeaver
Управление драйверами
Database > Driver Manager
PostgreSQL
Libraries
Database > New connection
PostgreSQL
postgres
с настройками по умолчанию, созданное соединение будет работатьTest connection
в мастере соединенияДля создания нового подключения к базе
exercises
:Database > New connection
PostgreSQL
postgres
с настройками по умолчанию, созданное соединение будет работатьexercises
Test connection
в мастере соединенияСтандартная настройка
Для стандартной настройки рабочего места воспользуйтесь инструкцией Руководство разработчика: Начало работы с фреймворком # Настройка рабочего места
- Совет
-
- С инструкцией по установке Global3FrameworkStarterKit можно ознакомится в приложении данного урока
Запуск сервера приложения в режиме отладки
После настройки рабочего места и сборки проекта можно запустить локальный сервер приложений в режиме отладки.
Выберите в списке стартовых конфигураций Global3se и нажмите на кнопку Debug (Shift+F9).
При первом запуске IDEA попросит уточнить настройки отладочной конфигурации. В поле -cp (ClassPath) необходимо указать модуль с наименьшим количеством зависимостей, обычно выбирают модуль проекта с окончанием App.
9. Учебная схема для работы с sql
Схема для практики и упражнений состоит из набора данных для недавно созданного загородного клуба с перечнем участников. Данные содержат:
- Участников клуба
- Теннисные корты (объекты)
- Историю бронирования этих объектов
- Внимание:
-
- Не воспринимайте набор как пример хорошего дизайна. Этот набор данных разработан исключительно для поддержки упражнений. Схема базы данных имеет ряд недостатков.
Схема:
-- Участники CREATE TABLE cd.members ( --Идентификатор --memid = 0 служебная запись, для всех гостей memid integer NOT NULL, --Фамилия surname character varying(200) NOT NULL, --Имя firstname character varying(200) NOT NULL, --Адрес address character varying(300) NOT NULL, --Почтовый код zipcode integer NOT NULL, --Телефон telephone character varying(20) NOT NULL, --memid участника который рекомендовал текущего участника recommendedby integer, --Дата вступления joindate timestamp NOT NULL, CONSTRAINT members_pk PRIMARY KEY (memid), CONSTRAINT fk_members_recommendedby FOREIGN KEY (recommendedby) REFERENCES cd.members(memid) ON DELETE SET NULL ); -- Объекты CREATE TABLE cd.facilities ( --Идентификатор facid integer NOT NULL, --Наименование name character varying(100) NOT NULL, --Стоимость слота(bookings.slots) для участника membercost numeric NOT NULL, --Стоимость слота(bookings.slots) для гостя( memid = 0 ) guestcost numeric NOT NULL, --Первоначальные затраты initialoutlay numeric NOT NULL, --Затраты на ежемесячное обслуживание monthlymaintenance numeric NOT NULL, CONSTRAINT facilities_pk PRIMARY KEY (facid) ); -- История заказов CREATE TABLE cd.bookings ( --Идентификатор bookid integer NOT NULL, --Ссылка на объекты facid integer NOT NULL, --Ссылка на участников memid integer NOT NULL, --Время начала использования объекта starttime timestamp NOT NULL, --Интервал использования объекта, выражается слотами, 1 слот - полчаса slots integer NOT NULL, CONSTRAINT bookings_pk PRIMARY KEY (bookid), CONSTRAINT fk_bookings_facid FOREIGN KEY (facid) REFERENCES cd.facilities(facid), CONSTRAINT fk_bookings_memid FOREIGN KEY (memid) REFERENCES cd.members(memid) );