CouchDB посмотреть репликацию - PullRequest
3 голосов
/ 11 ноября 2011

Использование CouchDB для создания размещенного приложения для клиентов.У меня есть база данных разработчиков, с которой я работаю, а также отдельные базы данных для каждого клиента.Работает хорошо, проблема в том, что когда я делаю изменения в dev, мне приходится вручную копировать код представления в каждую отдельную БД.Теперь у меня есть 2 клиента.Но я надеюсь вырасти до 100 клиентов.Одно небольшое изменение может занять очень много времени!

Я что-то упускаю из-за того, что реплицирую ТОЛЬКО представления?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 11 ноября 2011

Вот как я обычно работаю.

  1. У меня есть локальная база данных разработчиков.создавать и обновлять мои проектные документы (содержащие представления).
  2. иметь базу данных производственного развертывания, которая будет видна всем клиентам.Я обычно использую iriscouch.Не храните данные в этой базе данных.
  3. При настройке клиента убедитесь, что вы настроили одностороннюю репликацию с # 2 на эту базу данных клиента.

Таким образом, чтобы развернуть на всех клиентах,Я поставил свои последние документы по дизайну на мастер, тогда все клиенты будут обновлены.Есть некоторые оговорки к этому.При развертывании на главной базе данных вы должны убедиться, что вы уважаете ревизии, чтобы клиентские базы данных знали, что нужно обновить.

Вот цитата мастера, Джейсона Смита:

Хороший путь: работа с _rev

Я думаю, что ваше приложение имеет концепцию «обновления»от одной ревизии к другой.Существует промежуточный код или код разработки, и есть производственный код.Периодически вы продвигаете разработку кода в производство.Это звучит как две ветви Git, а также как два документа.(Или два набора идентификаторов документов.)

Вы можете тестировать и реорганизовывать свой код весь день, во временном документе (_design / dev).Но в производстве (_design / pro) это похоже на длинную историю Git.Каждая ревизия строится от предыдущей до начала времен.

Если вы хотите продвигать _design / dev, самое последнее развертывание - _rev = 4-abcdef.Так что это будет пятая версия развернута, верно?Привет!Хватит читать поле "_rev"!Но да, вероятно.

COPY / db / _design / dev Место назначения: _design / pro? Rev = 4-abcdef

{"id": "_ design / pro", "rev":"5-12345wh независимо"}

Обратите внимание, что каждый развернутый _design / pro собирается из другого, поэтому он естественным образом выплывает к рабам при репликации.

В реальной жизни вы можетенеобходимо добавить промежуточный этап, передающий проектные документы на рабочие серверы перед их фактической публикацией.После того, как вы нажмете, сколько времени займет диван, чтобы построить новые взгляды?Ответ: «Христос, кто знает?»

Поэтому вы должны скопировать _design / dev в _design / staging, а затем вытолкнуть это в дикую природу.Затем вы должны запрашивать его представления, пока не убедитесь, что они свежие и быстрые.(Вы можете сравнить «update_seq» из / db с «update_seq» из / db / _design / ddoc / _info).И только тогда вы копируете HTTP из _design / staging в _design / pro и позволяете этому распространяться.

Source

Это не так запутанно, как можетзвук.Но чтобы упростить процесс, вы можете использовать Reupholster (я признаю, я написал этот инструмент).Это в основном для couchapps, но даже если вы просто рекламируете дизайнерские документы, возможно, вам стоит просто использовать reupholster для развертывания на вашей главной базе данных.Reupholster добавляет некоторые полезные данные в дизайн документа, такие как дата / время SVN или Git информация.Таким образом, когда вы смотрите на базу данных клиентов, вы можете сказать, на каком проектном документе они находятся.

Удачи

1 голос
/ 11 ноября 2011

Вы можете копировать только дизайн документов;

http://wiki.apache.org/couchdb/Replication#Named_Document_Replication

...