CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Sync でジョブの並列処理がサポートされました

f:id:sugimomoto:20210923154720p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

今回はCData Sync の新機能として、ジョブの並列処理がサポートされたので、お伝えしたいと思います!

www.cdata.com

f:id:sugimomoto:20210923154542p:plain

概要

CData Sync では一つのジョブの中で複数のテーブルのレプリケーションを定義することができるようになっています。

f:id:sugimomoto:20210923154450p:plain

従来はこのジョブの中での処理はシリアルに一つ一つのテーブルがレプリケーションされるようになっており、1つ目のテーブルの処理が終わらない限り、次のテーブルの処理は進みませんでした。

f:id:sugimomoto:20210923154455p:plain

最新バージョンではジョブの設定において並列処理を有効化し、任意のワーカープール数を指定することで、パラレルにテーブルのレプリケーションが実行できるようになっています。

f:id:sugimomoto:20210923154505p:plain

これにより、一つ一つのテーブルの処理完了を待たずに、多くのレプリケーションを並列して処理できるようになりました。

f:id:sugimomoto:20210923154509p:plain

処理パフォーマンスを比較してみる

せっかくなので、シリアルとパラレルの処理でどのくらいパフォーマンスに変化がでるのか、検証してみました。

今回はSalesforceから5種類のテーブルを対象に、MySQLレプリケーションしてみます。

f:id:sugimomoto:20210923154523p:plain

レプリケーションオプションでテーブルは一度削除するようにしているので、差分は意識せず、毎回同じレプリケーションが実行されます。

f:id:sugimomoto:20210923154528p:plain

まずは並列処理は加えずに、通常通り実行してみました。

f:id:sugimomoto:20210923154532p:plain

処理結果はログ上で確認できます。約5千レコードを実行するのに9秒かかりました。

f:id:sugimomoto:20210923154537p:plain

続いて並列処理を有効化し、ワーカープールに5を指定してみます。

f:id:sugimomoto:20210923154542p:plain

手動実行を開始すると、すぐ違いが見て取れます。

通常であれば一つ一つステータスが「Running」に移り変わっていくのですが、5つのテーブル全部が一気に「Running」状態になりました。

f:id:sugimomoto:20210923154548p:plain

ジョブの終了後、同じように処理結果を確認してみると、「5秒」とおよそ半分の結果になりました。

f:id:sugimomoto:20210923154554p:plain

今回はわかりやすい数のテーブルのレプリケーションでしたが、対象のテーブルが増えるほど効果を発揮するでしょう。

並列処理レプリケーションで注意したいこと

さて、この機能はとても便利なのですが、CData Sync で取得するデータソースがSaaS APIなどの場合は、対象のサービスのAPI制限に抵触する可能性があるので注意が必要です。

特に同時リクエスト制限が設けられているAPIは抵触してしまう可能性が高いでしょう。

例えば、Salesforce APIの場合は同時APIの要求数がDeveloper Edition組織もしくはトライアル組織の場合は「5」で、本番環境やSandbox環境の場合は「25」です。

developer.salesforce.com

f:id:sugimomoto:20210923154600p:plain

もしテーブル数が増大する場合は、スレッドプールの数を抑えるか、並列処理は有効化せず、シリアルかつ、必要に応じてジョブとジョブの実行間隔も開けながら、利用していただくのが良いものと思います。