0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf ·...
TRANSCRIPT
![Page 1: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/1.jpg)
Данные на фронтенде
Никита Прокопов@nikitonsky
![Page 2: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/2.jpg)
I · Вкус будущего
![Page 3: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/3.jpg)
Сервер
Клиентданные
данные
![Page 4: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/4.jpg)
Сервер
Клиент
![Page 5: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/5.jpg)
Приложение 2
Приложение 1
![Page 6: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/6.jpg)
Приложение 2
Приложение 1данные
данные
данные
![Page 7: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/7.jpg)
× Совместное редактирование× Обновления в реальном времени× Редактирование без интернета
«Опыт присутствия»
![Page 8: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/8.jpg)
![Page 9: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/9.jpg)
![Page 10: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/10.jpg)
× Корректность× Сходимость× Полнота× Экономность× Производительность
![Page 11: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/11.jpg)
Эти проблемы
× нетривиальны× заметны людям× даже на простых случаях× даже в простых приложениях
![Page 12: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/12.jpg)
iPhone Macintosh
iCloud
![Page 13: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/13.jpg)
II · Поиск опоры
![Page 14: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/14.jpg)
БД Подписки Доступ Доставка МодельРендер
Оптими-стичныйкэш
![Page 15: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/15.jpg)
Серверная БД
Реактивная
Прямое API
RethinkDB, Datomic, Mongo oplog, ...
![Page 16: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/16.jpg)
Роутинг подписок
«Обратный» SQL
Лучше чем O(N×M)
Динамическая конфигурация
Уборка мусора
![Page 17: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/17.jpg)
Контроль доступа
Гибкость
Декларативность
Производительность
![Page 18: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/18.jpg)
Канал доставки
Реального времени
Переподключения
Мониторинг
![Page 19: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/19.jpg)
Клиентская БД
Реактивная
Фоновая синхронизация
Локальное хранение
Minimongo, PouchDB, DataScript
![Page 20: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/20.jpg)
Оптимистичный кэш
Локальные чтения/запись
Откатываемый
Локальное хранение
![Page 21: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/21.jpg)
Синхронизация
Фоновая
Надежная
Инкрементальная
![Page 22: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/22.jpg)
Операции (REST, RPC, ф-ии) — Модель данных —
API синхронизации
![Page 23: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/23.jpg)
Таб браузера
localStorage
Сервер Сервер
Реплика БД Реплика БД
Availabilityzone
Еще таб
Мобильноеприложение
![Page 24: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/24.jpg)
Конфликты
Нормальная ситуация
Удобная модель работы:
× обнаружение
× разрешение
![Page 25: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/25.jpg)
Разрешение конфликтов
Last write wins
Optimistic concurency
Ручной merge на клиенте
Автоматический merge
![Page 26: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/26.jpg)
БД Подписки Доступ Доставка МодельРендер
Оптими-стичныйкэш
![Page 27: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/27.jpg)
III · Положение дел
![Page 28: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/28.jpg)
![Page 29: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/29.jpg)
Meteor
Реактивные подписки
Оффлайн-режим
Модель безопасности
Протокол синхронизации
![Page 30: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/30.jpg)
Meteor
Last write wins
Медленные подписки
Большой footprint живых клиентов
Нет локального хранения
![Page 31: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/31.jpg)
Firebase
![Page 32: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/32.jpg)
Firebase
Реактивные подписки
Оффлайн-режим
Optional asserts before write
Server acks
![Page 33: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/33.jpg)
Firebase
Last write wins
Нет локального хранения
![Page 34: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/34.jpg)
pouchdb
![Page 35: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/35.jpg)
PouchDB
Оффлайн-режим
CAS updates
Eventual conflict resolution
Есть документ про конфликты
![Page 36: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/36.jpg)
PouchDB
Some write wins
Решение конфликтов необязательно
Очень низкоуровневое API
![Page 37: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/37.jpg)
Relay
![Page 38: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/38.jpg)
Relay + GraphQL
Нет оффлайна
Last write wins
Нет реактивных подписок
Проблемы кеша: растет и протухает
![Page 39: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/39.jpg)
horizon
![Page 40: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/40.jpg)
RethinkDB + Horizon
Реляционная модель
Богатые SQL-like подписки
Эффективные подписки
![Page 41: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/41.jpg)
CRDTs
Можно безопасно мержить
Ограниченная применимость
Как правило, только растут
Отдельно проверять полноту
![Page 42: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/42.jpg)
Синхронизация текста
Отдельная дисциплина специальнойолимпиады
Готовые решения не валяются
Operational transformation, CRDT
![Page 43: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/43.jpg)
IV. Эпилог
![Page 44: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/44.jpg)
Web 1.0
HTTP
Web 2.0
XHRWebSocket
Ожидания
Сегодняшнийдоклад
![Page 45: 0 @nikitonskypublic.jugru.org/holyjs/2016/spb/day_1/track_1/prokopov.pdf · PouchDB!""#$%& -'()*+ CAS updates Eventual conßict resolution,-./ 0123+(&. 4'1 21&"#*2.5. PouchDB Some](https://reader034.vdocuments.site/reader034/viewer/2022042300/5ecaadf247af58370650ef3d/html5/thumbnails/45.jpg)
@nikitonskytonsky.metonsky.livejournal.com HolyJS 2016