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_verify
をtrue
に設定すると、セキュリティチェックが回避されます。)
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」に等しいをドキュメントのみをインポートします。
参考情報