Как сказал Тиль, результаты не тиражируются.Для более подробной информации, вы на самом деле не хотите, чтобы они были воспроизведены.Общая парадигма CouchDB, которую вы должны помнить, заключается в том, что каждая установка рассматривается как независимый узел - поэтому _id, _rev и порядковые номера так важны.Это позволяет каждому узлу работать без учета какого-либо другого узла: если один из ваших узлов выйдет из строя, все остальные будут продолжать работать без заботы в мире.
Конечно, это вводит новые соображения относительно согласованности, к которым вы, возможно, не привыкли.Например, если у вас есть несколько веб-серверов, каждый из которых имеет свой собственный узел CouchDB, и эти узлы выполняют репликацию между собой, так что каждый экземпляр обновляется, между узлами будет задержка.Вот пример потока:
- Пользователь записывает изменение на веб-сервер A.
- Пользователь отправляет запрос на чтение на веб-сервер B, поскольку ваш балансировщик нагрузки решил, что B был лучшим выбором,Пользователь получает свой результат.
- Веб-сервер A отправляет обновленный документ на веб-сервер B посредством репликации.
Как видите, пользователь получил предыдущую версию своего документа, посколькувеб-сервер B еще не знал об изменении.Это можно победить с помощью ...
- Stick сессий, так что все их чтения и записи идут на один и тот же сервер.Это может привести к тому, что ваш балансировщик нагрузки выйдет из строя.
- Перемещение узлов CouchDB с веб-серверов на их собственные блоки.Если вы пойдете с этим, то, вероятно, захотите взглянуть на проект couchdb-lounge (http://tilgovi.github.com/couchdb-lounge/).
- Неужели вашим пользователям действительно важно, если они получат устаревшие результаты? Ваш вариант использования может быть тот, где ваши пользователи выигралине замечают, отражают ли их результаты изменения, которые они только что внесли. Убедитесь, что вы действительно получаете заметную ценность от этой работы.
Приветствия.