2016-05-14 97 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

這不是一個非常單調乏味的漫長過程,我認爲桶影只是爲了加快這個過程,並迎合這個特殊問題(有一個桶已經投入生產)。我也使用桶影,現在我擔心我應該使用它還是不是 –