ermouth: (ang)
[personal profile] ermouth

Кажется, будет CouchDB 1.7 (тьфу-тьфу, падаем ниц, о великий @kxepal) и в ней мой JS-рерайт.

Мы сами этот JS-рерайт вовсю уже юзаем и сейчас клепаем с ним секретный вполне боевой проект. Прокси из нода с express.js перед CouchDB стал не нужен – проект умеренно нагруженный, так что Кучдбшный Spidermonkey в самый раз. Любопытно, что кода получается меньше, чем в ноде.

В силу того, что JS-рерайт это, по сути, раутер запросов, такая входная точка для доменного имени – мне понадобилась JS-библиотечка для паттерн-матчинга. Желательно, с близким к Эрлангу синтаксисом.

Ну то-есть разбирать запрос и перенаправлять его куда надо, меняя ключи там, проверяя авторизацию и прочее и прочее.

Снимок экрана 2015-11-26 в 7.48.14Библиотечка такая нашлась, но она оказалась “одноуровневая”. Я её маленько допилил, чтобы поддерживался рекурсивный синтаксис, как на картинке.

Выложил как гист, под гистом коммент с инструкцией. Кому надо – забирайте.

Ещё немножко о секретном проекте, скриншот справа как раз его кусочек.

У нас там впервые в полный рост offline-first, то-есть все веб приложения для авторизованных юзеров нормально работают без интернет-подключения.

Делаем всё для таких мест, где с покрытием и качеством сети всё хреново, поэтому вот так. По-хорошему, это всё CloudWall.

Забавно, что как раз именно такой подход и позволил использовать небыстрый внутренний Spidermonkey в CouchDB, а не шустрый node.js. Дело в том, что мы все вообще тяжёлые map/reduce queries и весь вообще рендер UI выполняем на клиенте.

То-есть мы и на сервере map/reduce можем исполнять – клиент использует тот же код – но паразитировать на вычислительных мощностях клиента и быстрее, и offline-ready, и сервер можно относительно слабый.

По сути, задача сервера – поддерживать на клиентах релевантный датасет и отдавать стартовый код приложений. Ну и, конечно, чувствительные данные живут только на сервере.

Ну понятно, что интерфейсы дикой красоты, responsiveness просто вау, на ойпадах летает ну и всё такое.

---

В процессе написания поста выяснил, что у меня в WinXP висит незакрытая Цивилизация. Интересно, сколько она там так втихую сидела в почти всегда спящей виртуальной машине – полгода? Год? Забытый мир, да ))

Date: 2015-11-26 09:09 am (UTC)
From: [identity profile] lopinopulos.livejournal.com
Как поддерживаете релевантный датасет?

Как реагируете на коллизии? Например, соединение отсутствовало и в локальном хранилище есть конфликтующие изменения.

Date: 2015-11-26 09:23 am (UTC)
From: [identity profile] ermouth.livejournal.com
Датасет поддерживаем фильтрованной репликацией. Это примерно так http://pouchdb.com/2015/04/05/filtered-replication.html

На коллизии реагируем ручками, примерно как в дропбоксе. Если правильно роли разводить и схемы хранения, коллизии – чрезвычайная редкость.

Плюс у нас явное сохранение почти везде, надо кнопоку Save нажать. Если за это время открытый документ локально поменялся (издалека обновился), конфликт будет пользователь прямо при сохранении разрешать.

Date: 2015-11-26 11:07 am (UTC)
From: [identity profile] lopinopulos.livejournal.com
Хорошо придумано.

Меня всегда волнуют такие ситуации (она редкая, но когда-нибудь да встретится):
1) Первый клиент не имел доступ в сеть. Он изменил документ и сохранил.
2) Второй клиент изменил этот же документ и он ушел на сервер.
3) Первый клиент изменил документ снова и сохранил.
4) У первого клиента появилось соединение и все его изменения пошли на сервер.

Будет два конфликта или будет неявный мердж документов из шагов 1 и 2?

Date: 2015-11-26 11:23 am (UTC)
From: [identity profile] ermouth.livejournal.com
Вот тут про conflict model в CouchDB https://wiki.apache.org/couchdb/Replication_and_conflicts.

Тут важно а) что будет раздавать сервер новым клиентам (какая версия «выигрывает») и б) что окажется на конфликтующих нодах.

Если коротко, в результате главной версией (видимой по _id) станет последняя версия первого клиента. Тем не менее, на обоих клиентах и на сервере база сохранит все версии, а на клиентах ещё и просигналит, что в ней есть два форка и надо бы решить, что делать.

Автоматический мёрж не происходит никогда.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 2nd, 2026 05:01 pm
Powered by Dreamwidth Studios