0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Sync Gateway機能解説:JavaScriptによる処理のカスタマイズとインポートフィルター

Last updated at Posted at 2021-10-18

JavaScriptによる処理のカスタマイズ

概要

Sync Gatewayは、同期プロセスのカスタマイズのために、JavaScript関数の使用をサポートしています。

登録例

次の例は、JavaScript同期関数を設定するさまざまな方法を示しています。
この例ではSync関数を指定する例を示していますが、JavaScript関数を用いるインポートフィルター等の他の設定にも、同じアプローチが適用されます。

ローカルファイル

以下のようにローカルファイルを指定することができます。
このケースでは、関数が定義されている、外部ファイル(sync.js)を指定しています。
複数台ノードでSync Gatewayをクラスターとして構成している場合には、それぞれのノードで同じ(内容の)ファイルが参照できる必要があります。

curl -X PUT 'http://localhost:4985/db1/_config' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
         "sync": "/opt/couchbase-sync-gateway/sync.js" 
      },
    }
}'

HTTPSエンドポイント

このケースでは、プロビジョニングするJavascript関数への解決としてHTTPSエンドポイントを指定します

  curl -X PUT 'http://localhost:4985/db2/_config' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
         "sync": "https://localhost/sync/func2" 
      }
   }
}

外部Javascript関数がHTTPSエンドポイントでホストされている場合は、適切なサーバーのCA証明書を登録する必要があります(テストの目的で、認証をスキップすることができます。unsupported.remote_config_tls_skip_verifytrueに設定すると、セキュリティチェックが回避されます。)

Sync Gateway設定内のインラインJavaScript関数

このケースでは、Sync Gateway設定の内部(インライン)に、JavaScript関数を含めます。

インライン関数として定義されるJavaScriptプログラムは、バックティック(``)のペアで囲まれている必要があります(JSONデータとして管理される、Sync Gateway構成における独自の構文)。

curl -X PUT 'http://localhost:4985/db3/_config' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
         "sync": `function(doc,oldDoc, meta){ if (doc.published) { channel("public");} }`
      } 
   }
}

インポートフィルター

目的

大量のデータを含むクラスターの場合、最初のインポートプロセスが完了するまでにかなりの時間がかかることがあります。
インポートフィルターを使用すると、プロセスをより効率的にすることができます。

設定解説

//
{
  //  ... may be preceded by additional configuration data as required by the user ...
  "databases": {
    "getting-started-db": {
      "bucket": "getting-started-bucket",
      "import_docs": true,
      "num_index_replicas": 0, 
      "import_filter": `
        function(doc) {
          if (doc.type != "mobile") { 
            return false
          }
          return true
        }`,
      "sync": `function (doc, oldDoc) {
        if (doc.sdk) {
          channel(doc.sdk);
        }
      }`
    }
  }
  //  ... may be followed by additional configuration data as required by the user ...
}
//
  • ①インポートフィルターを設定するバケット名。
  • ②「type」プロパティが、「mobile」に等しいをドキュメントのみをインポートします。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?