Обзорный рассказ про СУБД PostgreSQL, ее место в мире RDBMS и архитектурные особенности для митапа Big Data Minsk User Group 17 марта 2016 г.: https://www.facebook.com/events/1551967968434009/
Видеозапись: https://www.youtube.com/watch?v=_-sdVNwKcEA
2. КРАТКАЯ ИНФОРМАЦИЯ
• Свободная объектно-реляционная СУБД
• Приемник Ingres и Postres
• Разрабатывается более 20 лет, PostgreSQL = Postres95
• Лицензия MIT
• 5-летний цикл поддержки каждого релиза
• Релизы 1 раз в 12-15 месяцев
• Разрабатывается сообществом
• Доступна коммерческая версия
EnterpiseDB Postgres Advanced Server ― замена Oracle
2
7. VISIBILITY MAP
SELECT COUNT(*) FROM contest;
count
--------
709098
(1 row)
Time: 78.839 ms
7
SELECT reltuples AS
approximate_row_count FROM pg_class
WHERE relname = 'contest';
approximate_row_count
-----------------------
709098
(1 row)
Time: 0.215 ms
QUERY PLAN
----------------------------------------------------------------------
Aggregate (cost=46739.73..46739.74 rows=1 width=0)
-> Seq Scan on contest (cost=0.00..44966.98 rows=709098 width=0)
(2 rows)
8. MULTI VERSION CONCURRENCY
CONTROL (MVCC)
Предоставление каждому пользователю «снимка» БД,
обладающего тем свойством, что вносимые
пользователем изменения в БД невидимы другим
пользователям до момента фиксации транзакции.
8
10. ИЗОЛЯЦИИ КАК РЕШЕНИЕ
ПРОБЛЕМЫ ...
Уровень
изоляции
Фантомное
чтение
Неповторяющ
ееся чтение
«Грязное»
чтение
Потерянное
обновление[3]
SERIALIZABLE + + + +
REPEATABLE
READ
- + + +
READ
COMMITTED
- - + +
READ
UNCOMMITTE
D
- - - +
10
11. НЕПОВТОРЯЮЩЕЕСЯ ЧТЕНИЕ
Транзакция 1 Транзакция 2
SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;
COMMIT;
SELECT f2 FROM tbl1 WHERE f1=1;
11
12. ФАНТОМНОЕ ЧТЕНИЕ
Транзакция 1 Транзакция 2
SELECT SUM(f2) FROM tbl1;
INSERT INTO tbl1 (f1,f2) VALUES (15,20);
COMMIT;
SELECT SUM(f2) FROM tbl1;
12
14. ПОЛЕЗНЫЙ ХАК
BEGIN;
SELECT 1 FROM foo
WHERE baz = 1234
ORDER BY bar
FOR UPDATE;
UPDATE foo
SET bar = bar + 1
WHERE baz = 1234;
COMMIT;
14
http://www.postgresql.org/docs/9.1/static/explicit-locking.html