2015-01-28 1 views
1

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

$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 не уведомляет синхронизации шлюз, чтобы удалить их с устройства. Когда я запускаю приложение на любом устройстве (планшеты Android), документы начинают синхронизироваться с сервером Couchbase вместо того, чтобы удаляться с устройства. Но когда я удаляю документ с устройства, Sync Gateway уведомляет сервер CB, и документ также удаляется с сервера CB.

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

ответ

1

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

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

Другим возможным способом является использование "shadow buckets" feature. Если вы это делаете, то это звучит так, как будто это может быть an issue that needs to be filed.

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

+0

Я разговариваю с ведром напрямую, и это потому, что в моем проекте должны быть как приложения, так и веб-клиенты. Для клиента приложения я использую CB Lite и, следовательно, разговариваю с шлюзом синхронизации. Но для веб-клиента я напрямую разговариваю с ведром. Если это не так, то для чего нужен PHP SDK? – Hadu

+1

Большинство развертываний Couchbase используют SDK, которые напрямую общаются с ведрами, но это недействительное развертывание, если вы используете Couchbase Mobile Sync Gateway из-за некоторых конкретных потребностей в таком развертывании. Это то, что команда смотрит прямо сейчас. (обратите внимание: я из Couchbase, Inc.) –

+0

Итак, вы говорите, что я никогда не должен напрямую разговаривать с сервером CB, и я должен всегда использовать API-интерфейс REST Sync Gateway? – Hadu

0

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

Смежные вопросы