【问题标题】:Confirming document upload in couchbase在 couchbase 中确认文件上传
【发布时间】:2019-01-23 21:02:39
【问题描述】:

我正在创建一个记录数据的应用程序。我正在创建包含数据的文档并将这些文档发送到 couchbase 服务器。或者我无论如何都在尝试。我的一个主要问题是如何确认文档存储在服务器上,以便可以立即在设备上删除它?我希望有一种快速有效的方法来做到这一点。最终结果是有一个线程不断检查是否有与 couchbase 的连接,如果有,则开始发送数据以将其从设备中清除。大多数文档似乎都与同步数据库有关,但是我不想这样做,因为我不想在设备上保留数据的副本。它会占用太多存储空间。谢谢你的帮助。

编辑:为澄清起见,我目前有应用程序在文档中存储许多数据点。我想将这些文档发送到 couchbase 服务器。我不想“同步”文档,而只是将它们插入数据库,然后立即将它们从设备中删除。怎么做呢?我见过的大多数示例通常是同步文档,例如配置文件信息,其中可以在各种同步数据库中进行更改,并且所有这些更改都会出现在每个数据库中。相反,我希望与数据库建立单向关系,即发送信息,确认已收到,然后立即从设备中删除。

【问题讨论】:

  • 您在使用 Couchbase Lite 和同步网关吗?
  • @MatthewGroves 我目前只编写了管理手机上沙发底座灯数据库的代码。因此,到目前为止,设备可以在设备上记录和存储数据点。我正在研究如何将这些数据发送到服务器,但是我看到的所有内容都引用了同步网关。我对同步网关的理解是它同步两个数据库,一个在设备上,一个在服务器上。这不是我想要的,因为一旦服务器有了副本,我就不再需要设备上的数据了。我不知道同步网关还有哪些其他功能,因为我看到它只用于一种方式。

标签: java android mobile couchbase


【解决方案1】:

至少有几种可能性。

如果您期望稳定的网络连接,或者可以自己处理错误,您可以通过直接 REST 调用 Sync Gateway 来实现。当然,您也可以始终编写自己的 REST 服务器,直接与 Couchbase 服务器对话。

第二种方式依赖于旧版本的 Couchbase Lite。 Couchbase Lite 2.x 是对该产品的一次重大改写。从当前发布版本 (2.1) 开始,它不支持这种方法,因此您需要使用 1.x 版本(1.3 或更高版本,IIRC)。进一步了解如何使用 2.1 解决此问题。

设置仅推送复制。复制后,循环浏览文档并清除所有尚未挂起的文档。 (这使用 Replication 类上的 isDocumentPending 方法。这是 2.1 中不可用的关键部分。)您可以运行一次性复制并在复制完成后执行此操作,或者监视连续复制的复制状态.

从本地 CB Lite 数据库中清除文档可以有效地使其表现得就好像它从未存在于该设备上一样。通过运行仅推送复制,您不必担心文档会被发送回设备。

使用 2.1,您无法轻松确定文档是否已被复制。因此,您需要运行复制完成,同时避免编写新内容时出现竞争条件。

这里的一种方法是暂停写入文档,运行一次性复制,然后在再次启动之前清除文档。您还可以使用交替数据库来解决问题,或者以某种方式自己跟踪文档等。

为了完整起见,如果您处于混合使用的情况,即只希望将一些文档从设备上推出并被遗忘,以及同步一些文档,您可以通过 Sync Gateway 通道进行控制。

【讨论】:

    【解决方案2】:

    我不太了解 Lite 和 Sync Gateway,但从服务器的角度来看:

    您可以在 Couchbase 中使用新的 Eventing 服务。当在存储桶 A 中创建文档时,您可以编写一个事件将该文档复制到存储桶 B。然后,如果在设备上删除了文档,则它们是否从存储桶 A 中删除也没关系。

    我有一个“staging”存储桶和一个“final”存储桶。我用“final”(我别名为“f”)创建了一个名为“moveIt”的函数。

    OnUpdate 函数可以这么简单:

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

    我主要关心的是时机。我认为在您决定在 Lite 中删除文档并开始同步之前,您的移动应用程序无法简单地知道该事件已完成文档复制。但这可能值得一试。查看文档至learn more about the Eventing service details

    【讨论】:

      【解决方案3】:

      在 Couchbase Lite 2.5 中,您可以使用 replicated events 来检测文档何时同步(推送到服务器或从服务器拉出)。您可以在 Couchbase Lite 复制器上注册回调,以检测文档是否已推送到同步网关,然后使用 purge API 进行本地清除

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-28
        • 2015-09-17
        • 2020-12-16
        • 2019-06-06
        • 2012-03-28
        • 2015-03-29
        • 1970-01-01
        • 2010-11-17
        相关资源
        最近更新 更多