Uploaded by doroguntzev.doroguntzev

БД

advertisement
Реляционные базы данных
Основные термины реляционной
базы данных
1) Таблицы - совокупность связанных данных, хранящихся в структурированном виде в базе данных. Она состоит
из столбцов и строк
2) Ключ - способ идентификации строк в таблице. С помощью ключей мы также можем связывать строки между
различными таблицами в отношения.
2.1) Первичный ключ (primary key) – это поле, которое используется для обеспечения
уникальности данных в таблице.
2.2) Внешний ключ (foreign key) – это одно или несколько полей, которые являются первичными в другой
таблице и значение которых заменяется значениями первичного ключа
другой таблицы.
3) Индекс — это объект в реляционной БД, который предназначен для организации быстрого доступа к строкам
таблицы по значениям одной или более колонок этих строк. Виды индексов B-Tree, Пространственные
индексы, Spatial grid, Quadtree, R-Tree, HASH, Bitmap, Reverse index. Типы индексов: уникальный, неуникальный,
составной
4) SQL — декларативный язык программирования, применяемый для создания, модификации и управления
данными в реляционной базе данных, управляемой соответствующей системой управления базами данных.
5) PL/SQL(Procedural Language / Structured Query Language) — язык программирования, процедурное расширение
языка SQL, разработанное корпорацией Oracle.
6) Простые конструкции SQL – insert, update, delete, commit, select. Из простых можно составлять более сложные
конструкции insert select, update select, delete select, with и т.д.
Виды join-ов
План выполнения запроса
План выполнения запроса — последовательность операций, необходимых для получения
результата SQL-запроса в реляционной СУБД
План в целом разделяется на две стадии:
•Выборка результатов;
•Сортировка и группировка, выполнение агрегаций.
Для выборки результатов используются индексы. План запроса строит встроенный в СУБД
оптимизатор запросов
Запрос в новой нотации
SELECT employee_id, last_name,
first_name, department_name
FROM employees e
INNER JOIN departments d ON
e.department_id = d.department_id
WHERE last_name like 'T%’
ORDER BY last_name
Hint-ы
Запросы должны строиться по индексам, но соблюдайте баланс и не жестите!
Подсказки HINT позволяют указывать оптимизатору базы данных конкретные методы выполнения запросов. На
можно указать оптимизатору использовать определенный тип JOIN или выбрать определенный индекс.
SELECT /+ PARALLEL(employees, 4) / * FROM employees;
SELECT /+ INDEX(employees idx_employees_name) / * FROM employees
WHERE first_name = 'John' AND last_name = 'Doe';
Можно использовать множество других подсказок, среди которых:
•/+ FULL(table_name) / - указывает оптимизатору использовать полный сканирование таблицы вместо
индексного сканирования.
•/+ ORDERED / - указывает оптимизатору сохранять порядок соединения таблиц, как указано в запросе.
•/+ USE_HASH (table_name) / - указывает оптимизатору использовать хэш-соединение для выполнения
запроса.
•/+ LEADING (table_name) / - указывает оптимизатору начать соединение таблиц с указанной таблицы.
•/+ NO_MERGE / - указывает оптимизатору не объединять несколько операций в одну.
•/+ NO_EXPAND / - указывает оптимизатору не использовать расширение представлений для выполнения
запроса.
•/+ OPT_PARAM (parameter value) / - позволяет установить значение параметра оптимизации запроса.
Транзакции
Транзакция — это набор операций по работе с базой данных (БД), объединенных в одну атомарную пачку.
Блокировки
Классификации блокировок
По области действия
Строчная блокировка — действуют только на одну строку таблицы базы данных, не ограничивая
манипуляции над другими строками таблицы.
Гранулярная блокировка — действует на всю таблицу или всю страницу и все строки..
Предикатная блокировка действует на область, ограниченную предикатом. Обычно это блокировка по
диапазону ключей.
По строгости
Совместная блокировка накладывается транзакцией на объект в случае, если выполняемая ей операция
безопасна, то есть не изменяет никаких данных и не имеет побочных эффектов.
Исключительная блокировка накладывается транзакцией на объект в случае, если выполняемая ей
операция изменяет данные.
По логике реализации
Пессимистическая блокировка накладывается перед предполагаемой модификацией данных на все
строки, которые такая модификация предположительно затрагивает.
Оптимистическая блокировка не ограничивает модификацию обрабатываемых данных сторонними
сессиями, однако перед началом предполагаемой модификации запрашивает значение некоторого
выделенного атрибута каждой из строк данных (обычно используется наименование VERSION и
целочисленный тип с начальным значением 0).
Hibernate
ORM-решением для языка Java, является технология Hibernate, которая не только заботится о связи
Java классов с таблицами базы данных (и типов данных Java в типы данных SQL), но также
предоставляет средства для автоматического построения запросов и извлечения данных и может
значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL
и JDBC кода. Hibernate генерирует SQL вызовы и освобождает разработчика от ручной обработки
результирующего набора данных и конвертации объектов, сохраняя приложение портируемым во все
SQL базы данных.
DataSource
Настраиваемый механизм подключения к базе данных.
Jdbc-url
Login
Password
ConnectionPool
MaxPoolSize
MinPoolSize
IdleTimeoutMinutes
ConnectionTimeout
Flush strategy for Connections
Connections:
Active
Idle
Pending
Очень важно следить за освобождением коннектов в коде!
LiquiBase/FlyWay
Liquibase представляет из себя систему управления версиями базы данных, в основном это
касается структуры и в меньшей степени содержимого базы. При этом описание базы с одной
стороны достаточно абстрактно и позволяет использовать на нижнем уровне различные СУБД, и
с другой стороны всегда можно перейти на SQL-диалект конкретной СУБД, что достаточно гибко.
Основным понятием liquibase являются так называемые изменения базы (changesets). Они могут
включать в себя как изменения структуры так и изменение данных. Для контроля примененных изменений
liquibase использует таблицы databasechangelog и databasechangeloglock.
Скрипт запуска обновления базы
#!/usr/bin/env bash mvn liquibase:update\ -Denv=dev\ Dliquibase.url="jdbc:postgresql://dev/test?prepareThreshold=0&stringtype=unspe
Спасибо за внимание
Download