ermouth: (Default)
[personal profile] ermouth

Снимок экрана 2015-02-01 в 18.26.36

https://github.com/ermouth/covercouch – пре-бета, raw and dirty. Попробовал выложить на npm, но что-то там не гладко, сделал unpublish. Через гит клон норм всё взлетает.

Теперь надо всё это в модуль превратить, чтоб можно было как express.js middleware включать, ну и демо написать совмещённое с полным тест-сьютом по всему CouchDB API.

10 дней, ~1500 строк, заимплементил практически все фичи, что задумал.

Придумался интересный подход, который я никогда до этого явно не применял. CoverCouch в зависимости от типа запроса и входных параметров выбирает одну из двух стратегий – fetch/resend или pipe.

Fetch/resend – это когда делается запрос к базе с переданными параметрами, выгребается JSON-ответ целиком, парсится, фильтруется и отдаётся пользователю уже только то, что он имеет право видеть.

Pipe – это когда делается запрос к базе, но её ответ не собирается целиком, а сразу перекидывается клиенту. Прямо чанками-кусочками, которыми отдаёт ответ CouchDB, просто часть этих кусочков по пути фильтруется и до пользователя не доходит.

Обычно в одном проекте я использовал какой-то один подход. Тут нужны оба.

Пайп нужен потому, что к CouchDB можно запросто сформировать запрос, который отдаст, например, гигабайт данных. Разбирать гигабайтный JSON – занятие в бою неосмотрительное как минимум. Ну плюс есть long-poll запросы – например, push-уведомления клиенту, что данные обновились. Их просто не сделать без пайпа вообще.

Fetch/resend хорош, когда запрос потенциально небольшой и не требует пайпа. Проверка всех айтемов сразу становится синхронной (без лишних длинных цепочек коллбэков, как с пайпом) и ответ можно отдать хорошо упакованным. Ну и ответ гораздо меньше фрагментирован, чем исходный ответ CouchDB.

Кто знаком с XML-технологиями – это в некотором смысле как DOM/XPath и SAX.

В результате этих оптимизаций CoverCouch в большинстве случаев доставляет данные быстрее, а по некоторым типам запросов – кратно быстрее, чем CouchDB. Чисто за счёт свойств сети – просто уменьшается фрагментация и избыточность.

Вообще, всё многопоточное, непадучее (а при падении – рестартует), защищено от утечек памяти, от over capacity, ну и всякое такое. С прицелом на боевое использование, не просто побаловаться делал.

Надо вот сделать, чтобы reduce нормально работал. Это геморройно, но понятно, как.

Такие дела.

Date: 2015-02-01 05:36 pm (UTC)
From: [identity profile] elektronik.livejournal.com
Дима, чем больше я тебя читаю, тем меньше понимаю. Можнт имеет смысл пива попить, расслабиться?

Date: 2015-02-01 06:02 pm (UTC)
From: [identity profile] ermouth.livejournal.com
Я пиво не пью, ты уж позабыл, наверное )

И потом, я бы не сказал, что прямо напрягаюсь – меня прёт от всех этих дел нереально есчо.

Но если это было предложение, то да, можно как-нибудь таки пересечься – года три, поди, не виделись.

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 Jul. 10th, 2025 11:58 pm
Powered by Dreamwidth Studios