У меня есть андроид и веб-приложения. Android-приложение использует Couchbase Lite, веб-приложение использует Couchbase. Я использую Couchbase Sync Gateway, чтобы включить репликацию данных между этими двумя базами данных.Репликация реплики Couchbase Lite
Пока он работает нормально для отправки данных с мобильных устройств и приема их как в веб-приложении, так и во втором мобильном устройстве. Я заметил, что все отправляющие документы добавили параметр «_sync».
Мой вопрос: как включить документы, добавленные через веб-приложение (в базу данных 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 (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);
Edit3
Так, наконец, мне удалось получить теневое работу. Если у кого-то была такая же проблема. Моя базовая база данных - 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. –