Similar presentations:
SQL Transactions Saint Petersburg, 2019
1.
SQL TransactionsSaint Petersburg, 2019
2.
СодержимоеТранзакции
Уровни изоляции транзакций
Locking
Savepoints
Spring
Transactional
Distributed DBs
2
3.
Что такое транзакция?Транзакция –
…
3
4.
Что такое транзакция?Транзакция –
группа логически объединённых
последовательных операций по работе с данными,
обрабатываемая или отменяемая целиком.
Типичный пример транзакции –
банковский перевод
4
5.
ACIDACID –
требования к транзакционной системе
Atomicity
Consistency
Isolation
Durability
5
6.
СодержимоеТранзакции
Уровни изоляции транзакций
Locking
Savepoints
Spring
Transactional
Distributed DBs
6
7.
Проблемы параллельного выполнения транзакцийLost update
Dirty
read
Non-repeatable read
Phantom read
7
8.
Lost update8
9.
Dirty read9
10.
Non-repeatable read10
11.
Phantom read11
12.
Уровни изолированности транзакцийУровень
изоляции
Phantom read Nonrepeatable
read
Dirty read
Lost update
Serializable
+
+
+
+
Repeatable
read
-
+
+
+
Read
committed
-
-
+
+
Read
uncommitted
-
-
-
+
12
13.
СодержимоеТранзакции
Уровни изоляции транзакций
Locking
Savepoints
Spring
Transactional
Distributed DBs
13
14.
БлокировкиOptimistic locking
Pessimistic locking
Pessimistic write
(exclusive lock)
Pessimistic read (shared lock)
14
15.
Optimistic lockingREAD
• Field
• Versi
on
• Field
UPDAT
• Versi
E
on
READ
Version
15
16.
Pessimistic lockingREAD
WITH
LOCK
Fiel
d
UPDAT
E
Fiel
d
Pessimistic write
(SELECT … FOR UPDATE)
Pessimistic read (SELECT … LOCK IN SHARE MODE)
16
17.
СодержимоеТранзакции
Уровни изоляции транзакций
Locking
Savepoints
Spring
Transactional
Distributed DBs
17
18.
SavepointsUPDATE
SAVEPOI
NT
ROLLBAC
K
18
19.
СодержимоеТранзакции
Уровни изоляции транзакций
Locking
Savepoints
Spring
Transactional
Distributed DBs
19
20.
The @Transactional Annotation@Service
@Transactional
public class FooService {
. . . .
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW,
rollbackFor = Exception.class,
timeout = 60)
public void cancelManualLegitimationCheck(
PrepaidLegitimationCheckOrderVO orderVO) {
. . . .
}
The annotation supports further configuration as well:
the Propagation Type of the transaction
the Isolation Level of the transaction
a Timeout for the operation wrapped by the transaction
a readOnly flag – a hint for the persistence provider that the transaction
should be read only
the Rollback rules for the transaction
20
21.
Potential PitfallsTransactions and
Proxies
Default rollbackFor is java.lang.RuntimeException
@Override
Read-only Transactions
public void foo() {
bar();
Changing the Isolation level
}
Transaction logging
@Transactional
public void bar() {
// ...
}
21
22.
СодержимоеТранзакции
Уровни изоляции транзакций
Locking
Savepoints
Spring
Transactional
Distributed DBs
22
23.
Distributed DBsStateless applications are easy to scale
Stateful apps have to share & sync their state somehow
Many app instances are working with one DB
Two ways to scale DB:
Replications
Sharding
23
24.
Distributed DBsDB replication:
Master
Slave
s
24
25.
Distributed DBsDB replication:
Пишем только в мастер
Master
Запись транслируем
в реплики
Slave
s
Читаем из любой реплики
25
26.
Distributed DBsDB replication:
Горизонтальное, но не вертикальное масштабирование
Многие СУБД предоставляют функционал реплицирования «из
коробки»
Гибкость
Отказоустойчивость
Есть нюансы
Стоимость Long Query остаётся той же
Ограниченная масштабируемость
26
27.
Distributed DBsDB sharding:
Database
Dispatcher
A–H
I–O
P–U
V–Z
27
28.
Distributed DBsDB sharding:
Apple
Grape
Pineapple
Tomato
Sugar
Vanilla
Database
Dispatcher
Pineappl
e
Tomato
Sugar
Apple
Grape
A–H
I–O
Vanilla
P–U
V–Z
28
29.
Distributed DBsDB sharding:
Может ускорить Long Query
Масштабируемость ограничена только логикой диспатчера
Риск потери данных растёт с количеством шардов
Сложен в реализации – нет готовых решений
Часто требует вмешательство в логику работы приложения
Можно компенсировать комбинацией с репликами
Постоянный «налог на шардирование»
Чувствителен к выбранным эвристикам
29
30.
Вопросы30
31.
Конец31