Couchbase: синхронизировать данные с условиями - PullRequest
0 голосов
/ 16 мая 2018

Я создаю приложение чата, в котором пользователь мобильного приложения хранит данные на своем устройстве. Мы пытаемся синхронизировать только данные, относящиеся к пользователю, с сервера на клиент (с сервера couchbase на мобильный телефон couchbase). Но с мобильного с помощью swift все Bucket хранится с сервера на мобильный внутренний БД. Моя синхронизация JSON

{
  "interface": "192.168.0.68:4984",
  "adminInterface": "192.168.0.68:4985",
  "pretty": true,
  "log": ["*"],
  "databases": {
    "db": {
        "server": "http://192.168.0.68:8091",
        "bucket": "travel-sample",

        "username":"himanshu",
        "password":"123456",
        "users": {
            "himanshu": {
              "password": "123456",
              "admin_channels": [
                "*"
              ]
            }
          },
        "sync":`
            function (doc) {
                console.log("doc=================================================================>")
                channel (doc.channels);
            }
        `   
    }
}}

Возможно, что сервер отправляет на мобильный телефон только связанные данные для синхронизации.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Этого можно добиться, используя правильную конфигурацию каналов для каждого пользователя, чтобы определить доступ и ограничить пользователей.

Функция синхронизации позволяет предоставлять пользователям доступ к каналам на основе содержимого документов

В этом случае, когда вы создаете документ, его свойства должны указывать, что конкретный пользователь создал / отредактировал, и на основании этого запускается функция синхронизации для продолжения репликации.

Создайте массив тегов на основе типа документа, который интересует данного пользователя для репликации на мобильном устройстве, и передайте его в функцию синхронизации

{ 
  "tags" : [
    "fashion",
    "outing",
    "shopping"
   ]
}

и функция синхронизации будут аналогичны

function(doc) {
  channel(doc.tags);
}

ПО клиентской части синхронизирует соответствующий пользовательский контент с помощью встроенного API репликации, который устанавливает интерес пользователя к теме для извлечения соответствующих данных. Затем репликатор будет взаимодействовать с данными из каналов. Создайте репликацию по запросу, как в коде Objective-C

CBLReplication *pull = [database createPullReplication: url];
pull.channels = @[@"outing",@"shopping"];
[pull start];

Если мы не установили конкретный канал, то, вероятно, все существующие данные будут извлечены из Sync Gateway.

0 голосов
/ 17 мая 2018

Да, вы должны использовать Каналы шлюза синхронизации для маршрутизации нужных данных на устройство.Как часть вашей функции синхронизации, если вы направите данные, например, на «мобильный канал» и либо установите этот канал на своем репликаторе, либо настроите аутентификацию для мобильного пользователя, который имеет доступ только к этому каналу, вы получите только этоконкретные данные.

...