Saint Petersburg, 2011 Java Lecture #A01 JDBC. Транзакции ACID: Atomicity, Consistency, Isolation, Durability Atomicity: в контексте транзакции либо выполняются.

Презентация:



Advertisements
Похожие презентации
Saint Petersburg, 2012 Java Lecture # 7 DB. JDBC.
Advertisements

Типовые расчёты Растворы
Расширенные темы 1. SQL запросы Язык JPQL является абстракцией и «общим знаменателем» всех SQL диалектов. Очевидно, что конкретный диалект обладает бОльшими.
1 Введение Информационные системы Альтернативы задачи доступа к данным Стандарт JPA и коммерческие ORM имплементации Определение ORM Проблемы полного преобразования.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Michael Jackson
Школьная форма Презентация для родительского собрания.
Урок повторения по теме: «Сила». Задание 1 Задание 2.

Лекция 25 Лекция 25 Понятие целостности базы данных. Условия целостности. Транзакции. Обработка транзакций. Свойства транзакций. Модель ANSI/ISO. Назначение.
Object Relational Mapping (ORM) Объектно-реляционное отображение
Модуль 4 Рассматриваемые темы: Понятие транзакции Конкурентный доступ к данным Использование транзакций в JDBC API Транзакции в JDBC API слайд 4-1.
Java Database Connectivity (JDBC) Универсальное API для доступа к данным.
Ф. Т. Алескеров, Л. Г. Егорова НИУ ВШЭ VI Московская международная конференция по исследованию операций (ORM2010) Москва, октября 2010 Так ли уж.
ПЛИСКО ВЯЧЕСЛАВ. Удобная работа с базой данных в PHP.
Object Relational Mapping (ORM) Объектно-реляционное отображение.
Транзакции Транзакция - это последовательность операций, производимых над базой данных и переводящих базу данных из одного непротиворечивого (согласованного)
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
1 Попов Аркадий Леонидович Системы поддержки принятия решений.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Транксрипт:

Saint Petersburg, 2011 Java Lecture #A01 JDBC

Транзакции ACID: Atomicity, Consistency, Isolation, Durability Atomicity: в контексте транзакции либо выполняются все действия, либо не выполняется ни одно из них. Либо происходит commit (фиксация), либо rollback (откат). Consistency: системные ресурсы должны пребывать в целостном и непротиворечивом состоянии как до начала транзакции, так и после ее окончания. Isolation: промежуточные результаты транзакции должны быть закрыты для доступа со стороны любой другой действующей транзакции до момента фиксации. Durability: результат выполнения завершенной транзакции не должен быть утрачен ни при каких условиях. 2

Проблемы изоляции транзакций потерянное обновление (lost update): «грязное» чтение (dirty read) чтение данных, которые были записаны откаченной транзакцией: 3

Проблемы изоляции транзакций неповторяющееся чтение (non-repeatable read); фантомное чтение (phantom reads). 4

Уровни изоляции транзакций Read uncommitted, Read committed, Repeatable read, Serializable Read uncommitted: разрешает грязные чтения, но без потери обновлений. Одна транзакция может не писать в строку, если другая незафиксированная транзакция уже записывает туда. Однако, любая транзакция может читать любые строки. Read committed : разрешает неповторяемые чтения, но не грязные чтения. Это может быть достигнуто с помощью мгновенных общих блокировок чтения и эксклюзивной блокировки записи. Однако, незафиксированные пишущие транзакции блокируют все другие транзакции на доступ к строке. 5

Уровни изоляции транзакций Repeatable read : не допускает ни неповторяемого чтения, ни грязного чтения. Фантомное чтение может произойти. Это может быть достигнуто с использованием общих блокировок на чтение и эксклюзивной блокировки на запись. Блок чтения пишущих транзакций (но не другие операции чтения) и блок пишущих транзакций блокируют все другие транзакции Serializable : обеспечивает строгую изоляцию транзакций. Он эмулирует последовательное выполнение операций, как если бы операция была выполнена одна за другой последовательно, а не параллельно.. 6

Уровни изоляции транзакций Выбор уровня изоляции зависит от конкретной задачи 7

Реализация изоляции Блокировка - это установка метки на запись, что запись заблокирована для изменений. Существует два вида блокировок - оптимистичная и пессимистичная. При оптимистичной блокировке на базе данных реальной блокировки не происходит. Для реализации оптимистичной блокировки часто используется версионирование данных - в таблицу добавляется колонка, которая хранит текущую версию. При выполнении update в запросе в секции where передается версия данных, которая была забрана на изменение. Вместо версии можно хранить время последнего изменения данных. При пессимистичной блокировке для записи ставится эксклюзивная блокировка на уровне базы данных, запрещая таким образом доступ к данным из других транзакций. Существует несколько видов пессимистичных блокировок: блокировка при чтении и блокировка при записи. 8

Разновидности транзакций Обычная транзакция Длинная транзакция XA-транзакция 9

JDBC JDBC: Java Data Base Connectivity 10 Платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE. (С) Википедия

JDBC JDBC в архитектурном разрезе 11

JDBC 12 Строка соединения с базой: jdbc: : Subprotocol: oracle, mysql, odbc, firebird jdbc:odbc:dsn_name;UID=your_uid;PWD=your_pwd jdbc:mysql://host_name:port/dbname ce_name JDBC – это просто:

Connection 13 Connection: осуществляет соединение с БэДэ и создает Statementы Основной интерфейс для работы с базой данных Является ограниченным невозобновляемым ресурсом

Connection 14 Закрывай Connection или будешь ловить барабашек

Connection 15 Закрывай Connection правильно

Statements 16 Statement - the object used for executing a static SQL statement and returning the results it produces Prepared Statement - an object that represents a precompiled SQL statement Callable Statement - the interface used to execute SQL stored procedures.

Statement 17 Statement – простое исполнение статических SQL запросов.

PreparedStatement 18 PreparedStatement – исполнение скомпилированных запросов Выполняется быстрее, чем Statement Предохраняет от SQL Injection Подобный шаблон используется в Hibernate и JPA

CallableStatement 19 CallableStatement – исполнение хранимых процедур

ResultSet 20 ResultSet: курсор текущего запроса Является мощным средством для итерации по набору данных Позволяет выполнять удаление, вставку и обновление столбцов Но для этого не используется

ResultSetMetaData 21 Предоставляет мета данные запроса

Общие правила На 1 (один) Statement – 1 (один) ResultSet Открыл – закрой! Statement можно (и даже нужно) использовать повторно В серьезных проектах использовать только PreparedStatement Помни про транзакцию 22

Архитектура доступа к данным Смешивание SQL кода и реализации является в Java антипаттерном (не действительно в Индии) Ни в коем случае не допускается вызов SQL из view или controller Соединения лучше пуллировать А еще лучше использовать типовые решения 23

Active Record Объект является "обёрткой" одной строки из БД или представления, включает в себя доступ к БД и логику обращения с данными. Используется в YII, RoR, Lift Очень удобен для использования с документо- ориентированными базами данных 24

Data mapper Использует шаблон Bridge Реализован в JDO и iBatis Не нужно специально аннотировать или менять классы. 25

Data mapper Использует шаблон Bridge Реализован в JDO и iBatis Не нужно специально аннотировать или менять классы. 26

Table Data Gateway Работает со всеми записями в таблице 27

DAO Является классическим Core J2EE паттерном 28

Lazy Load Использует шаблон Proxy Поддерживается нативно JPA и Hibernate. Основные сложности связаны с временем жизни proxy 29

Query Object Поддерживается нативно JPA и Hibernate. Является реализацией шаблона - ???? 30

Unit of Work Поддерживается нативно JPA и Hibernate. Сложен в своей реализации 31

Domain Model Объектная модель домена используется как правило с ORM. Нужна при сложной бизнес-логике 32

ORM Object-relational mapping - объектно-реляционное отображение. Несколько таблиц или записей из таблиц могут относиться к одному объекту. Используется при сложных связях между доменными объектами Самый известный ORM фреймворк – Hibernate. 33

Hibernate 34

Hibernate Проект стартовал в 2001 году и создавался как альтернатива EJB2 Entity Bean В 2003 году стартовала версия 2. Это стал тот Хибернейт, который мы знаем. В 2010 году стартовала версия 3. JPA 1.0 был частично списан с Hibernate 2 JPA 2.0 был частично списан с Hibernate

Hibernate - возможности Полный ORM без единого кусочка SQL Управление транзакциями (только в рамках БД) Кеш L2 Оптимизация под конкретные диалекты Поддержка annotation-based и xml-based маппинга Свой язык запросов – HQL Умеет работать в non-manager enviroment Стыкуется из коробки со всем стеком Jboss Отлично интегрируется в Spring, JPA Умеет работать с EhCache, Memcache, Jboss Cache 36

Hibernate – архитектура 37

Hibernate - Entity 38 Основа Hibernate - Entity Маппинг может осуществляться автоматом или вручную к колонке. Обязательно в каждой Entity должен быть id! Аннотировать можно поля или геттеры Обязателен пустой дефолтный конструктор

Hibernate 39 Вся мощь ORM раскрывается в связях Связи бывают OneToOne, OneToMany, ManyToOne, ManyToMany

Hibernate Session 40 Управляет жизненным циклом Entity Позволяет осуществлять UnitOfWork Позволяет делать длинные транзакции Умеет делать Conversation Scope

Hibernate - конфигурация 41

Hibernate пример – вставка данных 42