2016-05-14 63 views
0

我有Android和网络应用程序。 Android应用使用Couchbase Lite,Web应用使用Couchbase。我正在使用Couchbase Sync Gateway来启用这两个数据库之间的数据复制。Couchbase Lite拉复制

到目前为止,它在从移动设备发送数据并在网络应用程序和第二个移动设备上接收数据方面工作正常。我注意到所有发送的文件都添加了“_sync”参数。

我的问题是如何启用通过web应用程序(以couchbase数据库)添加的文件参与复制? (他们没有场“_sync”默认情况下)

编辑

由于Legendary_Hunter建议我尝试使用阴影,但仍无法得到它的工作。我的配置文件:

{ 
"log":["CRUD+", "REST+", "Changes+", "Attach+"], 
"databases": { 
    "kris_mobile_db": { 
     "server":"http://192.168.0.11:8091", 
     "sync":` 
      function (doc) { 
      channel (doc.channels); 
     }`, 
     "bucket":"kris_mobile_db", 
     "users": { 
      "GUEST": { 
       "disabled": false, 
       "admin_channels": ["*"] 
      } 
     }, 
     "shadow": { 
      "server": "http://localhost:8091", 
      "bucket": "kris_mobile_db_sync" 
     } 
    } 
} 
} 

EDIT2(16年5月29日)

public class DatabaseManager { 

private static DatabaseManager manager; 
private static CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().autoreleaseAfter(6000).build(); 
private static String bucketName = "kris_mobile_db"; 
private Cluster cluster; 
private Bucket bucket; 

    public static DatabaseManager getInstance(){ 

     if(manager == null) 
      manager = new DatabaseManager(); 

     return manager; 
    } 

    public Bucket getBucketInstance(){ 
     if(bucket == null) 
      bucket = cluster.openBucket(bucketName); 

     return bucket; 
    } 


    public boolean establishConnection(String host, String port, String bucketName){ 

     // host: 192.168.0.11, port: 8091 
     cluster = CouchbaseCluster.create(env, host+":"+port); 

     DatabaseManager.bucketName = bucketName; 
     bucket = cluster.openBucket(bucketName); 

     return true; 
    } 
} 

和插入像

JsonDocument doc = JsonDocument.create(docId, content); 
DatabaseManager.getInstance().getBucketInstance().insert(doc); 

EDIT3

所以最后我设法遮蔽工作。如果有人有同样的问题。我的基本数据库是kris_mobile_db,syncGateway shadowing数据库是kris_mobile_db_sync。配置文件:

{ 
"log":["CRUD+", "REST+", "Changes+", "Attach+"], 
"databases": { 
    "kris_mobile_db": { 
     "server":"http://192.168.0.11:8091", 
     "sync":` 
      function (doc) { 
      channel (doc.channels); 
     }`, 
     "bucket":"kris_mobile_db_sync", 
     "users": { 
      "GUEST": { 
       "disabled": false, 
       "admin_channels": ["*"] 
      } 
     }, 
     "shadow":{ 
      "server":"http://192.168.0.11:8091", 
      "bucket":"kris_mobile_db" 
     } 
    } 
} 
} 
+0

只要忽略'_sync'属性即可。这是Sync Gateway使用的内部元数据。 –

回答

0

只需使用bucket shadowing。它是同步网关存储桶与任何存储桶服务器的双向同步。

+0

您的解决方案似乎是我正在寻找的解决方案。但我无法得到它的工作。当我在同步网关启动期间按照说明操作时,我收到以下警告: '从外部存储区更改错误:409未导入 - db.(* Shadower).readTapFeed()在shadower.go:79'和'应用更改时出错来自外部存储桶:400个用户定义的顶级属性使用'_'开始在文档主体中不允许使用--db。(* Shadower).readTapFeed()在shadower.go:79'和Shadow似乎不起作用。一切和以前一样。 – Mohru

+0

我可以看看你的同步网关配置文件吗? –

+0

Couchbase不再支持桶映射,因此不推荐这样做。 –

0

如果你想保留同步功能给你的所有好东西,你必须通过同步网关。同步网关公开了一个可用于构建Web应用程序的REST API。

+0

如果我已经有一个在生产中使用的桶,并且拥有超过100万份文档,该怎么办?那我应该使用同步网关的REST API来移动每个文件吗? –

+0

是的,您需要一种让您的数据模型与同步网关兼容的方法。重新导入它肯定会奏效。 –

+0

这不是一个非常单调乏味的漫长过程,我认为桶影只是为了加快这个过程,并迎合这个特殊问题(有一个桶已经投入生产)。我也使用桶影,现在我担心我应该使用它还是不是 –