【问题标题】:Deleting document with PHP API doesn't sync to sync gateway Couchbase使用 PHP API 删除文档不会同步到同步网关 Couchbase
【发布时间】:2015-01-28 21:46:22
【问题描述】:

我使用 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?

【问题讨论】:

    标签: php couchbase couchbase-lite couchbase-sync-gateway


    【解决方案1】:

    您可以通过两种方式在这里使用 Couchbase。

    如果您直接与 Sync Gateway 后面的存储桶交谈,则可能是这样。如果您这样做,则不是使用 Couchbase 的预期方式,并且直接删除文档没有受支持的方法。

    另一种可能的方法是,如果您使用的是"shadow buckets" feature。如果您这样做,那么听起来可能是an issue that needs to be filed

    作为一种解决方法,您可能想要做的是使用您的视图来识别“旧文档”,而不是通过 SDK 的界面删除它们,而是尝试通过 Sync Gatway REST API 删除它们。

    【讨论】:

    • 我直接与存储桶对话,这是因为我的项目应该同时拥有 App 和 Web 客户端。对于应用程序客户端,我使用 CB Lite 并因此与同步网关交谈。但对于网络客户端,我直接与存储桶对话。如果这不是正确的方法,那么 PHP SDK 有什么用处?
    • 大多数 Couchbase 部署使用直接与存储桶对话的 SDK,但如果您使用 Couchbase Mobile 的 Sync Gateway,则由于此类部署中的某些特殊需求,这不是有效的部署。这是团队现在正在考虑的事情。 (注:我来自 Couchbase, Inc.)
    • 所以你说我不应该直接与 CB 服务器对话,我应该始终使用 Sync Gateway REST API 来代替?
    • 撰写本文时,使用 Sync Gateway 时有两个受支持的选项。一种是bucket shadowing,另一种是使用Sync Gateway REST API。直接读取和写入由 Sync Gateway 管理的存储桶目前不是一个选项。这里有未来计划的增强功能。
    【解决方案2】:

    在影子存储桶上创建一个视图并从影子存储桶中删除文档。影子存储桶上的删除将被复制到同步存储桶,并添加同步/复制所需的元数据(例如 _deleted = true)。现在,在影子存储桶中进行的任何删除都会被通知/复制到移动设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多