Удаление документа с помощью PHP API не синхронизируется со шлюзом синхронизации Couchbase

Я использую PHP SDK для получения документов из представления дизайна и их удаления.

$myCluster = new CouchbaseCluster('couchbase://127.0.0.1');
$myBucket = $myCluster->openBucket($bucketName);
$query = CouchbaseViewQuery::from('dev_view', 'old_docs');
$res = $myBucket->query($query);
foreach ($res['rows'] as $doc) 
    $res = $myBucket->remove($doc['key']);

Все документы из представления удаляются с сервера Couchbase, но Couchbase не уведомляет Sync Gateway об их удалении с устройств. Когда я запускаю приложение на любом устройстве (планшеты Android), документы начинают синхронизироваться с сервером Couchbase, а не удаляются с устройства. Но когда я удаляю документ с устройства, Sync Gateway уведомляет сервер CB, и документ также удаляется с сервера CB.

Есть ли ошибка с PHP SDK? Должен ли я вызывать функцию для уведомления Sync Gateway после удаления документов?


person Hadi Sharghi    schedule 28.01.2015    source источник


Ответы (2)


Здесь есть два возможных способа использования Couchbase.

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

Другой возможный способ - использовать функция" теневых корзин ". Если вы это делаете, то это может быть проблемой, которую необходимо зарегистрировать .

В качестве обходного пути вы можете использовать свое представление для определения «старых документов» и вместо того, чтобы удалять их через интерфейс SDK, попробуйте удалить их с помощью Sync Gatway REST API.

person Matt Ingenthron    schedule 29.01.2015
comment
Я обращаюсь к корзине напрямую, потому что в моем проекте должны быть как приложения, так и веб-клиенты. В качестве клиента приложения я использую CB Lite и, следовательно, общаюсь со шлюзом синхронизации. Но для веб-клиента я обращаюсь непосредственно к ведру. Если это неправильный путь, то для чего нужен PHP SDK? - person Hadi Sharghi; 30.01.2015
comment
В большинстве развертываний Couchbase используются SDK, которые напрямую взаимодействуют с корзинами, но это недопустимое развертывание, если вы используете шлюз синхронизации Couchbase Mobile из-за некоторых особых потребностей в таком развертывании. Команда сейчас смотрит на это. (примечание: я из Couchbase, Inc.) - person Matt Ingenthron; 02.02.2015
comment
Итак, вы говорите, что я никогда не должен напрямую разговаривать с CB-сервером и всегда должен использовать вместо этого Sync Gateway REST API? - person Hadi Sharghi; 04.02.2015
comment
На момент написания этой статьи при использовании Sync Gateway поддерживаются два варианта. Один из них - теневое копирование корзины. а другой - использовать Sync Gateway REST API. Чтение и запись непосредственно в корзину, управляемую Sync Gateway, в настоящее время недоступны. Здесь запланированы улучшения в будущем. - person Matt Ingenthron; 05.02.2015

Создайте представление на теневом ведре и удалите документы из теневого ведра. Удаления в теневом сегменте будут реплицированы в сегмент синхронизации с добавленными метаданными (например, _deleted = true), необходимыми для синхронизации / репликации. Теперь любые удаления, сделанные в теневом ведре, будут уведомляться / реплицироваться на мобильные устройства.

person user2787531    schedule 14.06.2016