大量データを処理するバッチでは厳しい性能要件が求められる場合が多くあります。
多くの場合はSQL文のチューニングなどの個別対応で性能向上を目指しますが、アーキテクチャの変更にまで及ぶ大幅なケースも少なくありません。
プロアクシアでは、これらの問題を解決するためのストリームベースのバッチ高速化フレームワークを提供しています。

ストリームベースのデータ処理

ストリームベースのデータ処理は CEP(complex event processing)のように、大量のストリームデータをあるまとまり単位で処理する方法を RDBMS に応用した手法です。
SQL 文を実行し大量データをある単位(チャンク)ごとに切り出して、連続的に読み出しながら、ビジネスロジックを並列処理して結果をテーブルに高速出力(BulkCopy)します。

【主なメリット】

  • 処理するデータのみメモリにロードされるので、大量データであってもメモリリソースの消費は少ない
  • 発行される SQL 文はストリームの読み出しが中心で、少数で処理コストが読みやすくチューニングポイントがわかりやすい
  • チャンクはビジネス的に意味のある単位になり、ビジネスロジックの記述も自然で保守性が向上(高速化のトリックが不要)

上記のストリーム処理の考えをフレームワーク化したのが、プロアクシアが提供するバッチ高速化フレームワークです。

【参考:BulkCopyを利用した更新処理の効果】

INSERTUPDATEDELETE
VB.NET から SQL 文を実行38.10秒37.87秒37.96秒
ストアドプロシージャ(カーソルループ)11.79秒17.81秒17.38秒
VB.NET から BulkCopy を実行
(更新・削除は BulkCopy したデータを利用して一括更新)
0.55秒0.74秒1.36秒

※10万件処理のデータを開発用ノート PC 1台で実行した結果