Postgresql в убере
Jul. 29th, 2016 10:51 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
https://eng.uber.com/mysql-migration/
http://postgresql.nabble.com/Why-we-lost-Uber-as-a-user-td5913417.html
Занятное чтиво про заморочки MVCC и реализации индексов в postgresql.
Все бы это хорошо, но я не понимаю один момент - почему они сравнивают только физическую репликацию (передачу изменений в страницах БД) и репликацию передачей исполняемых запросов?
Есть же вариант "передавать логические изменения в во всех измененных записях в порядке их коммита". Т.е. в таком варианте проблемы с недетерминированным выполнением запросов отсутствуют, но размер передаваемых данных заметно меньше, чем в случае "передавать весь WAL".
http://postgresql.nabble.com/Why-we-lost-Uber-as-a-user-td5913417.html
Занятное чтиво про заморочки MVCC и реализации индексов в postgresql.
Все бы это хорошо, но я не понимаю один момент - почему они сравнивают только физическую репликацию (передачу изменений в страницах БД) и репликацию передачей исполняемых запросов?
Есть же вариант "передавать логические изменения в во всех измененных записях в порядке их коммита". Т.е. в таком варианте проблемы с недетерминированным выполнением запросов отсутствуют, но размер передаваемых данных заметно меньше, чем в случае "передавать весь WAL".
no subject
Date: 2016-07-29 10:18 am (UTC)Но из нее можно выкинуть большую часть обычной РСУБД:
- все данные которые не влияют на консистентность. В типичной СУБД это большая часть данных, за вычетом ID-шек в табличках, и может каких-нибудь там "сколько денег на счете"
- все индексы, которые не нужны чтобы чекать консистентность
- оптимизатор запросов - тоже вряд ли нужен
- всякие там аудиты, все про аналитику, в общем все что не касается OLTP.
- даже персистить на диск не надо
Т.е. точка входа может заниматься только тем чтобы:
- проверить что операция не нарушает consistency
- если ок - записать в transaction log
В этом раскладе, может оказаться что хватит какой-нибудь шустрой in-memory БД. А может и просто самописного кода в стиле applyTransaction(state, transaction) => state.