Я думаю, что вопрос вы ссылаетесь на это [1]. Репликация Cloudant на 100% совместима с CouchDB. В этом примере журналы TouchDB указывают, что сетевой стек iOS прошел на неполном JSON на TouchDB. Неясно, кто должен был обвинять в этом случае для отказа репликации.
[1] https://github.com/couchbaselabs/TouchDB-iOS/issues/241
На вопрос стоимости, тянуть репликации одноразовое приведет к ГЭТ к корму _changes
каждый раз, когда это происходит, а также других запросов, необходимых для репликации. Этот запрос _changes
будет засчитан как сигнал HTTP-запроса против вашей учетной записи Cloudant.
Тем не менее, независимо от того, выполняется ли это как больше или меньше запросов зависит от количества изменений, поступающих с удаленного сервера.
Важно также помнить, что количество вызовов _changes
очень мал по сравнению с рядом других вызовов, связанных (например, получение содержания изменений сами и, в частности, если есть много вложения).
Хотя этот вопрос относится только к TouchDB, и я упоминаю конкретное поведения этого кодового, этот ответ имеет дело с запросами участия в репликации между любыми двумя системами, говорящих протоколом CouchDB репликацией [2].
[2] http://www.dataprotocols.org/en/latest/couchdb_replication.html
Давайте надуманный пример: 1 обновление за 10 вторым окно базы данных источника для репликации, где база данных TouchDB является целевой. Давайте проведем 5-минутный опрос против непрерывной репликации. Для простоты подсчета звонков, давайте также возьмем вложения из изображения . Мы также предположим, что устройство имеет постоянное сетевое соединение.
Для непрерывного случая каждые 10 секунд TouchDB получит обновление в _changes
. Это приводит к закрытию соединения longpoll
. TouchDB затем выполняет изменения, запрашивая обновления из исходной базы данных ; один или несколько запросов GET на удаленном сервере. Пока это происходит, TouchDB должен открыть еще один longpoll
запрос по _changes
.Таким образом, за пять минут вы получите, возможно, 30 звонков на _changes, а также все звонки для получения документов и записи контрольных точек .
Сравните это с однократной репликацией каждые пять минут. Вы получите уведомление о 30 обновлениях в одном сообщении об обмене подпиской. TouchDB реализует оптимизацию [3] в результате чего он будет вызывать _all_docs получить обновленные документы на 1- оборотах, так что вы может в конечном итоге с помощью одного вызова, чтобы получить все 30 документов (не возможно в непрерывном случае, как вы мы получили одно изменение). Затем у вас есть контрольные документы . В лучшем случае менее 5 HTTP-звонков, самое большее около трети - это непрерывный случай, поскольку вы избегаете дополнительных запросов _changes
.
[3] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm#performance
Она сводится к частоте обновлений, которые вы ожидаете от базы данных. Репликация с одним выстрелом, скорее всего, обеспечит более плавную кривую , поскольку вы лучше контролируете количество выполненных вами запросов.
Еще один вопрос заключается в том, как часто происходит падение соединений из-за сетевых отключений , которые происходят регулярно с мобильными устройствами. Непрерывные репликации TouchDB будут срабатывать каждый раз, когда пользователь подключается к сети (если он добавлен через базу данных _replicator). Это дополнительный источник непредсказуемых затрат.
Однако выгоды от более непосредственной видимости изменений могут , безусловно, стоит неопределенности.
«Облако не совместимо с непрерывными повторениями TouchDB». Почему нет? – garbados
Майк упомянул проблему несовместимости в своем ответе. Это открытая проблема, которая еще не решена. Ни авторы TouchDB, ни поддержка Cloudant не смогли определить причину проблемы, но нам удалось воспроизвести ее с относительной легкостью. – airpaulg