Урок 1. Архитектура, средства и языки разработки
Цель данного урока:
- Познакомить слушателей с архитектурой фреймворка и принципами разработки в нем.
- Познакомить слушателей с базой данных Postgresql.
- Дать понять какие знания и навыки по работе с языком sql потребуются для дальнейшей работы.
- Ознакомить со структурой документации Postgresql.
- Дать понять какие знания и навыки по работе c языками scala и jexl потребуются для дальнейшей работы.
- Ознакомить со структурой документации scala и jexl.
Данный урок предоставляет:
- Обзор архитектуры.
- Основные понятия фреймворка.
- Основные понятия по работе с базой данных.
- Упражнения по языку sql.
- Упражнения по scala.
- Упражнения по jexl.
- Литературу для самостоятельного изучения.
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 позволяют гибкое использование дискового пространства для хранения объектов системы.