
Gluesync 2.3.1.4 では、Apache CouchDB エージェントが追加されました。_changes フィードからのスナップショットおよび CDC、並列一括書き込み、CouchDB 3.3 から 3.5 への対応、シングルノードまたはクラスタに対応しています。
Apache CouchDBには、レポート用データベース、検索エンジン、分析プラットフォーム、その他のCouchDBサーバーなど、他のシステムが利用したいJSONデータが大量に格納されています。これらのデータを確実に転送するには、通常、ポーリング、ページング、再試行を行うカスタムスクリプトが必要となります。2026年11月2日にリリースされたGluesync 2.3.1.4では、より優れた選択肢が提供されています。それは、単一ノードでもクラスタ上でも、ソースとしてもターゲットとしても機能する新しいApache CouchDBエージェントです。
ネイティブのCouchDBエージェントを選ぶ理由
このエージェントは、ベンダー提供のSDKを使用せず、JSONボディを用いたHTTP APIを介してCouchDBと通信します。ソースとして動作する場合、データベースに何も作成せず、サーバーに何もインストールせず、アプリケーションへの変更も一切必要としません。データベースを読み取り、その_changesフィードを追跡するだけです。ターゲットとして動作する場合、並列_bulk_docsリクエストでJSONドキュメントを書き込み、リビジョン、競合、削除を自動的に処理します。
1つのエージェント、2つの役割、そしてGluesync Core Hubですでに使用しているのと同じパイプラインモデルです。
使用場面
- CouchDBをソースとして使用する場合: CouchDBから、PostgreSQLなどGluesyncがサポートする任意のターゲットへドキュメントをストリーム送信します。
- CouchDBをターゲットとして使用する場合: リレーショナルデータベースやNoSQLソースからのデータを、JSONドキュメントとしてCouchDBに取り込みます。データベースごとに1つのエンティティが格納されます。
- CouchDB から CouchDB へ: パイプラインは、CouchDB をソースおよびターゲットとして設定できます。一方向での使用に限定してください。エージェントには再帰防止機能がないため、CouchDB データベース間の双方向同期を行うと、変更内容が相互に繰り返し送信されてしまいます。
サポートされているバージョンは、CouchDB 3.3、3.4、および 3.5 です。エージェントは接続時にサーバーを確認し、CouchDB 3.x 以外を拒否するため、CouchDB 2.x はサポートされていません。Couchbase は別の製品であり、独自の Gluesync エージェントが用意されています。
機能の概要
スナップショットとCDC
ソースエージェントは、スナップショットを使用してデータベースをコピーし、その後、変更フィードを追跡します。このスナップショットでは、_all_docsをページ単位で読み込みません。これはサーバー上の単一のストリームに縛られており、スケーラビリティに欠けます。その代わりに、変更フィードからドキュメントIDを取得し、多数の並列_bulk_getリクエストを用いてドキュメントを読み込みます。
読み取りが並列で実行されるため、スナップショットは単一のサーバースリームに縛られることなく、同時リクエスト数に応じてスケーリングします。
中断されたスナップショットは、安全に到達していたフィードの位置から再開されます。その後、CDCはCore Hubによって保存された位置から、ロングポールモードで各エンティティの変更フィードをポーリングし、スナップショットの実行中に発生した変更は、スナップショットが開始された地点から再実行されます。配信は少なくとも1回行われ、ターゲット側では変更が2回適用されても問題はありません。挿入、更新、削除がキャプチャされます。削除の場合、ターゲットにはドキュメントの_idのみが伝達されるため、エンティティキーは_idでなければなりません。
データ型のマッピング
CouchDBのドキュメントはJSON形式であり、そのフィールドはどこにも宣言されていません。ソース側では、エージェントがドキュメントのサンプルからフィールドを推論します(スキーマ検出のサンプルサイズ、デフォルトは1000で、その半分は_all_docsの先頭から、残りの半分は末尾から取得されます)。整数は「integer」に、その他の数値は「number」に、単一の種類のフィールドは「string」、「boolean」、「object」、または「array」になります。型が混在しているフィールド、またはすべて null のフィールドは json となります。ドキュメントの構造が異なるデータベースの場合は、サンプルサイズを増やしてください。
ターゲット側では、すべての Gluesync タイプにデフォルトの JSON 構造と、ドキュメントに記載された代替形式があります。知っておくべき 2 つの詳細:
- CouchDB は数値を IEEE ダブルとして保存するため、BIG_DECIMAL はデフォルトで文字列として書き込まれ、すべての桁が保持されます。有効桁数が約 15 桁で十分であれば、number を選択できます。
- 日付および日時値(LOCAL_DATE、LOCAL_DATE_TIME、OFFSET_DATE_TIME)は、デフォルトでISOテキストとして書き込まれますが、これらの型についてはエポックミリ秒形式もオプションとして利用可能です。時刻のみの値(LOCAL_TIME、OFFSET_TIME)はISOテキストとして書き込まれ、代替形式はありません。
一括書き込みスループット
ターゲットは、各バッチを並列な _bulk_docs リクエストで書き込みます(デフォルトはリクエストあたり1000ドキュメント、サイズ制限8 MiB、同時実行リクエスト数8、gzip圧縮有効)。現在のリビジョンを参照し、書き込み中に変更されたドキュメントは再試行し、削除はトゥームストーンとして書き込み、部分的な変更は保存済みのドキュメントにマージします。
主な調整要素は、ターゲットデータベースのシャード数(q)です。エージェントが未作成のデータベースを作成する際は、「Shards」設定(デフォルトは8)を使用します。2つ目の調整要素は「Write concurrency」(書き込み同時実行数)であり、処理中のリクエスト数や、リクエスト本文のgzip圧縮も効果的です。書き込み速度を向上させるには、シャード数を増やしたターゲットデータベースを作成し、それに合わせて「Write concurrency」の値も引き上げてください。
切り捨て戦略
CouchDBにはtruncateコマンドがないため、Core Hubが「スナップショット前のtruncate」などでエンティティを切り捨てる場合、エージェントはその切り捨て戦略に従います:
- DELETE_DOCUMENTS(デフォルト):
_all_docsページを参照し、デザインドキュメントを保持したまま、すべてのドキュメントを一括で削除します。 - RECREATE_DATABASE:
_securityオブジェクトを保存し、データベースを削除して同じ q および n を使用して再作成し、_securityを復元します。デザインドキュメントは失われ、サーバー管理者の介入が必要となります。 - SKIP:リクエストをログに記録し、データをそのまま残します。
セキュリティ
エージェントはHTTPベーシック認証を使用します。認証を無効にした場合は、匿名アクセスとなります。TLSを有効にしている場合、サーバー証明書は常に検証されます。証明書を無条件に信頼するオプションはありません。プライベート認証局を使用する場合は、エージェントにCA証明書を指定してください。プライベートネットワーク外にあるCouchDBについては、TLSを有効にしてください。
知っておくと役立つ情報
添付ファイルとパージはレプリケートされません。つまり、添付ファイルは読み取りも書き込みも行われません。変更フィードには現在のドキュメントのみが含まれるため、変更前のイメージは存在しません。アンダースコアで始まる最上位のフィールド名(_idを除く)はCouchDBによって予約されているため、_TRANSACTION_IDなどの技術的なフィールド名は、TRANSACTION_IDのように名前を変更してください。
はじめに
- 前提条件を確認してください。 Core Hub は、CouchDB の HTTP ポート(デフォルトは 5984)または TLS ポートへのネットワークアクセスを必要とします。レプリケーションを行うには、ソースユーザーがすべてのデータベースのメンバーであり、読み取りアクセス権を持っている必要があります。
_all_dbsを使用してデータベースを一覧表示するには、CouchDB 3.x ではサーバー管理者権限が必要です。それ以外の場合は、接続時にデータベース名を指定してください。ターゲットユーザーには読み取りおよび書き込みアクセス権が必要です。存在しないデータベースを作成する場合、または RECREATE_DATABASE を使用する場合は、サーバー管理者権限が必要です。 - Core Hub にエージェントを追加します。 CouchDB エージェント(タグ
couchdb)を選択し、ノードのアドレス、ポート、認証情報を入力します。必要に応じて TLS を有効にし、ノードがダウンした際にエージェントが順序通りにフェイルオーバーできるよう、追加のクラスターノードを指定します。 - ターゲットを調整します。 ワークロードに合わせて、Shards、Write concurrency、Truncate strategy を設定します。
- スナップショットを実行し、その後 CDC を実行します。

RSSフィードを取得する