Когда уже на "ты" с CouchDB, почти всегда оказывается, что чего-то не хватает: нет полнотекстового поиска "из коробки", хранилище растёт как на дрожжах и приходится самому следить за его размером и т.д.. С поиском вопрос решается подключением
сторонних модулей. С пугающим ростом базы данных в след. релизах вопрос уже решён. Но вот такая хитрая штука как обработка результатов другого представления - этого в ближайших планах разработчиков CouchDB не предвидится. Хотя вещь, безусловно, полезная.
Например, мы можем держать в хранилище сырые данные - скажем, список фактических адресов, забитых
кем как попало - и создать для них представление (
view), результатом которого будет чёткая структура с разбивкой по стране / городу / индексу / улице / номеру дома и пр.. Чем хорош такой подход? Написать
идеальный парсер вручную введённых адресов - дело не одного дня и даже месяца (спорить с этим может только тот, кто с подобной задачей в промышленных масштабах не сталкивался). А вот
достаточный для начала работы парсер адресов - дело 1 часа. И это позволит начать разработку след. этапов системы без необходимости ждать полностью готового списка структурированных адресов и (!) даже когда-либо возвращаться к сырым адресам. Непробиваемые аргументы, когда работает команда и/или требуется видимый результат "уже завтра". Мало? Тогда представьте, что каждый день добавляется сотня новых адресов... Потом к парсеру можно возвращаться, делая его всё лучше. Но структурированные данные благодаря созданному представлению уже на руках! И, раз уж начали представлять, предположим, что проект - большой и было принято решение оставить это живое представление (живое - потому что формирует адреса из сырого потока) как источник для других модулей системы. Т.е. менять его вывод - ни-ни!
И вот, хотим
некоторым адресатам что-то сами доставлять. Для этой цели хорошо бы группировать адреса по индексам, чтобы раздать списки водителям, сэкономив и бензин, и время (Вы ведь знаете, что такое
почтовый индекс). И тут CouchDB оказывается не на высоте, т.к. живой список адресов (в виде гранитного представления) - есть, а вот работать с ним - не можем:
CouchDB не поддерживает создание представления для другого представления.
В общем-то, задачу подобную задачу можно решить, периодически копируя результаты работы представления в новую базу; или создав новое представление, которое помимо структурирования адресов (copy / paste здесь поможет) будет делать необходимую нам выборку и группировку по почтовым индексам. Оба решения усложнят дальнейшее сопровождение системы. А ведь как красиво задача решается простым созданием нового представления... на готовые результаты другого!
К счастью, на этой неделе появилась разработка, позволяющая создавать цепочки представлений, благодаря которым изложенная выше задача решается и просто, и красиво >
https://github.com/afters/Couch-Incarnate
Для своей работы требует
Node.js.
P.S. Строго говоря,
couch-incarnate не является единственной альтернативой реализовать представление по результатам другого map/reduce. Активно ведётся разработка целой системы -
CloudAnt - на базе CouchDB, где, помимо прочего, поддерживается view на view что называется "из коробки".
CloudAnt, безусловно, заслуживает отдельного внимания, но это - не
тот CouchDB.
Комментариев нет:
Отправить комментарий