Подтверждение загрузки документа в couchbase - PullRequest
0 голосов
/ 24 января 2019

Я создаю приложение, которое регистрирует данные.Я создаю документы с данными и отправляю эти документы на сервер couchbase.Или я все равно пытаюсь.Одна из основных проблем, с которыми я сталкиваюсь, заключается в том, как подтвердить, что документ хранится на сервере, чтобы его можно было немедленно удалить на устройстве?Я надеюсь, что есть быстрый и эффективный способ сделать это.В конечном итоге поток должен постоянно проверять наличие соединения с couchbase и, если это так, начать отправку данных, чтобы очистить их от устройства.Кажется, что большая часть документации касается синхронизации базы данных, однако я не хочу этого делать, потому что я не хочу хранить копию данных на устройстве.Это заняло бы слишком много памяти.Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Для пояснения, в настоящее время у меня есть приложение, хранящее много точек данных в документах.Я хочу отправить эти документы на сервер couchbase.Я не хочу «синхронизировать» документы, а просто вставляю их в базу данных, а затем сразу же удаляю их с устройства.Как можно это сделать?Большинство примеров, которые я видел, обычно синхронизируют документы, такие как информация профиля, где изменения могут быть внесены в различные синхронизированные базы данных, и все эти изменения будут появляться в каждой базе данных.Вместо этого я хочу получить одностороннюю связь с базой данных, в которой информация отправляется, подтверждается как полученная, а затем немедленно удаляется с устройства.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Есть как минимум несколько возможностей.

Если вы ожидаете надежного сетевого соединения или можете справиться с ошибками самостоятельно, вы можете добиться этого с помощью прямого вызова REST для Sync Gateway.Конечно, вы всегда можете написать свой собственный REST-сервер, который также напрямую взаимодействует с Couchbase Server.

Второй способ основан на более старой версии Couchbase Lite.Couchbase Lite 2.x является основной переписью продукта.Начиная с текущей версии доставки (2.1) он не поддерживает этот подход, поэтому вам нужно будет использовать версию 1.x (1.3 или более позднюю, IIRC).Подробнее о том, как подойти к этому с помощью 2.1.

, см. Ниже. Настройка репликации только для push.После репликации просмотрите все документы и удалите все те, которые еще не ожидали.(При этом используется метод isDocumentPending в классе Replication. Это ключевой элемент, недоступный с 2.1.) Вы можете запустить репликацию одним выстрелом и сделать это после завершения репликации, или контролировать состояние репликации непрерывной репликации..

Очистка документа из локальной базы данных CB Lite эффективно заставляет его действовать так, как если бы он никогда не существовал на этом устройстве.Запуская репликацию только для отправки, вам не нужно беспокоиться о том, что документы будут отправлены обратно на устройство.

Используя 2.1, вы не можете так же легко определить, был ли документ реплицирован.Таким образом, вам нужно запустить репликацию до завершения, избегая состояния гонки с написанием чего-то нового.

Один из подходов здесь - это приостановить написание документов, запустить репликацию одним выстрелом, а затем очистить документы перед повторным запуском.Вы могли бы также что-то проработать с чередующимися базами данных или как-то самостоятельно отслеживать документы и т. Д.

Для полноты, если вы оказались в ситуации, когда у вас было смешанное использование, то есть вам нужно было только отодвинуть некоторые документыустройство и забыто, а некоторые синхронизируются, вы бы управляли этим через каналы Sync Gateway.

0 голосов
/ 10 августа 2019

В Couchbase Lite 2.5 вы можете использовать реплицированные события , чтобы определить, когда документ синхронизирован (передан на сервер или извлечен с сервера).Вы можете зарегистрировать обратный вызов в репликаторе Couchbase Lite, чтобы определить, были ли документы переданы в шлюз синхронизации, а затем использовать API очистки для локальной очистки

0 голосов
/ 24 января 2019

Я недостаточно хорошо знаю Lite и Sync Gateway, но с точки зрения сервера:

Вы можете использовать новый сервис Eventing в Couchbase. Когда документ создается в корзине A, вы можете записать событие, чтобы скопировать этот документ в корзину B. Затем, если документы будут удалены на устройстве, не имеет значения, удаляются ли они из корзины A.

У меня есть ведро "постановка" и ведро "финал". Я создал функцию с именем «moveIt» и «final» (я назвал ее «f»).

Creating a 'moveit' function in Couchbase Eventing

Функция OnUpdate может быть простой:

function OnUpdate(doc, meta) {
    f[meta.id] = doc;
}

Моей главной заботой будет время. Я не думаю, что у вашего мобильного приложения есть простой способ узнать, что событие завершило копирование документа, прежде чем вы решите удалить его в Lite и запустить синхронизацию. Но, возможно, стоит попробовать. Ознакомьтесь с документами , чтобы узнать больше об услуге службы событий .

...