【问题标题】:Couchbase Lite pull replicationCouchbase Lite 拉取复制
【发布时间】:2016-09-10 19:16:51
【问题描述】:

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

到目前为止,它可以从移动设备发送数据并在网络应用程序和第二个移动设备中接收数据。我注意到所有发送文档都添加了“_sync”参数。

我的问题是如何启用通过 Web 应用程序添加的文档(到 couchbase 数据库)参与复制? (默认情况下它们没有“_sync”字段)

编辑

正如 Legendary_Hunter 建议的那样,我尝试使用 Shadow,但仍然无法正常工作。我的配置文件:

{
"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 (29.05.16)

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);

编辑3

所以最后我设法让阴影工作。如果有人有同样的问题。我的基本数据库是 kris_mobile_db,syncGateway 影子数据库是 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"
        }
    }
}
}

【问题讨论】:

  • 忽略_sync 属性。这是 Sync Gateway 使用的内部元数据。

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


【解决方案1】:

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

【讨论】:

  • 您的解决方案似乎正是我正在寻找的解决方案。但我无法让它工作。当我在同步网关启动期间按照说明进行操作时,我收到警告:Error aplying change from external bucket: 409 Not imported -- db.(*Shadower).readTapFeed() at shadower.go:79Error applying change from external bucket: 400 user defined top level properties beggining with '_' ane not allowed in document body -- db.(*Shadower).readTapFeed() at shadower.go:79,Shadow 似乎无法正常工作。一切都和以前一样。
  • 我可以看看你的同步网关配置文件吗?
  • Couchbase 不再支持桶阴影,因此不推荐这样做。
  • 好的,我意识到我将“影子”部分放在了错误的位置,我将其向上移动,现在 SyncGateway 正常启动,但通过网络插入文档后,我收到警告:WARNING: changeCache: Error unmarchalling doc"Contractor": json cannot unmarchall number into Go value of type db.DocumentRoot 然后仍然无法将其拉到手机上。我将配置文件附加到问题中。
  • 你是直接在同步网关bucket中通过Web插入还是通过Web在“kris_mobile_db”中插入?
【解决方案2】:

如果您想保留同步功能为您提供的所有好东西,那么您必须通过同步网关。同步网关公开了一个 REST API,您可以使用它来构建您的 Web 应用程序。

【讨论】:

  • 如果我已经有一个用于生产的存储桶并且拥有超过 100 万个文档怎么办?那么我应该使用同步网关的 REST API 来移动每个文档吗?
  • 是的,您需要一种方法让您的数据模型与同步网关兼容。重新导入它肯定会起作用。
  • 这不是一个非常乏味和漫长的过程,我认为桶阴影只是为了加快这个过程并解决这个特殊问题(已经有一个桶在生产中)。我也在使用桶阴影,现在我担心我是否应该使用它
  • 基本上桶阴影已停止,因为它并没有真正起作用。您可能不应该使用它。是的,这是一个乏味的过程。目前,couchbase mobile 的路线图是更好地集成同步网关并解决该问题。
  • (此处为 Couchbase 移动架构师。)支持桶阴影 ,与上面所说的相反。很抱歉沟通不畅。如果您从头开始,我们建议您使用 SG REST API;但是,如果您已经有一个 Couchbase 存储桶,其中包含要复制的数据,那么存储桶影子就是您要走的路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多