Java 确认couchbase中的文档上载

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

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


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

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

您可以在Couchbase中使用新的事件服务。在bucket a中创建文档时,您可以编写一个事件将该文档复制到bucket B。然后,如果在设备上删除了文档,那么从bucket a中删除这些文档就无关紧要了

我有一个桶“分期”和一个桶“最终”。我创建了一个名为“moveIt”和“final”的函数(别名为“f”)

OnUpdate功能可以简单到:

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

我主要关心的是时机。我认为,在您决定在Lite中删除文档并开始同步之前,您的移动应用程序很难知道事件已完成对文档的复制。但也许值得一试。请将文档签出至。

至少有几种可能性

如果您期望可靠的网络连接,或者自己处理错误还可以,那么可以通过直接调用同步网关的REST来实现这一点。当然,您也可以编写自己的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,您无法轻松确定文档是否已被复制。因此,您需要运行复制到完成,同时通过编写新内容避免竞争条件

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


为完整起见,如果您处于一种混合使用的情况,即只需要一些文档从设备上推到设备上并被遗忘,还有一些文档被同步,那么您可以通过同步网关通道进行控制。

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

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