2016-05-14 13 views
0

У меня есть андроид и веб-приложения. 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" 
     } 
    } 
} 
} 
+0

Просто игнорируйте свойство '_sync'. Это внутренние метаданные, используемые Sync Gateway. –

ответ

0

Просто используйте bucket shadowing. Это двунаправленная синхронизация ведомого шлюза синхронизации с любым ведром сервера couchbase.

+0

Ваше решение похоже на то, что я ищу. Но я не могу заставить его работать. Когда я следую инструкциям во время запуска шлюза синхронизации, я получаю предупреждения: 'Ошибка при перемещении из внешнего ведра: 409 Не импортировано - db. (* Shadower) .readTapFeed() в shadower.go: 79' и' Ошибка при внесении изменений из внешнего ведра: 400 пользовательских свойств верхнего уровня, начинающихся с '_' ane, не разрешенных в документе body - db. (* Shadower) .readTapFeed() в shadower.go: 79' и Shadow, похоже, не работает. Все работает как раньше. – Mohru

+0

Могу ли я просмотреть конфигурационный файл шлюза синхронизации? –

+0

Затенение ковша больше не поддерживается Couchbase и, как таковое, не рекомендуется делать это. –

0

Если вы хотите сохранить все хорошие вещи, которые дает вам функция синхронизации, вам нужно пройти через шлюз синхронизации. Шлюз синхронизации предоставляет REST API, который вы можете использовать для создания своего веб-приложения.

+0

Что делать, если у меня уже есть ведро, которое используется в производстве и имеет более 1 миллиона документов? Затем следует использовать REST API шлюза синхронизации для перемещения каждого документа? –

+0

Да, вам нужен способ совместимости вашей модели данных с шлюзом синхронизации. Reimporting это определенно сработает. –

+0

Разве это не очень утомительный и долгий процесс, я думаю, что ведро было сделано только для ускорения этого процесса и удовлетворения этой конкретной проблемы (имея ведро уже в производстве). Я также использую теневое ведро, и теперь я волнуюсь, что я должен его использовать или нет. –

Смежные вопросы