Salesforceの実に30世代目となるバージョンアップ「Winter '10」で、新たに「Bulk API」が追加されました。
EAIの製品強化(DCSpider)や、APIを利用した開発を多く手掛けるため、新たなAPIの登場はとっても気になりますね。
ということで、遅ればせながら調べてみました。
クラウド上でシステム開発を行った場合、しばしば大量データの初期移行や、大量データを伴う
システム連携(バッチ処理)のパフォーマンスが問題になります。
パフォーマンス問題の多くの理由に、その処理時間の多くを
データ通信時間が占めているケースがあります。
これは、クラウド・サービスがインターネット上にあり、インターネットを介して
データを流通させる以上、避けては通れない課題であります。
Salesforce(Force.com)の場合、APIを介したデータの読取りや更新はSOAPにより行い、
例えば、レコードを追加したい場合には、最大200件のレコードを
1回のSOAPメッセージにまとめて送信できるよう工夫されています。
さらに、gzipやdeflateをサポートしているので、httpリクエスト自体を圧縮し、
データ通信量を減らすことも可能です。
※データ読取りの場合ですと、例えば6000件のデータが読取り対象となった時、
一度に2000件ずつ、3回のSOAPメッセージの交換で読取ることができます。
この工夫により、データ更新時におけるデータ通信量やSOAPメッセージの
交換回数を減らすことが可能となりますが、レコードの追加対象が
数十万や数百万件のレベルに達すると、SOAPメッセージの冗長さや、
SOAPメッセージ交換にかかる通信時間は、見過ごせないレベルに達します。
このような問題を解決するのが、「Bulk API」です。
Bulk APIでは、例えばレコードを更新したい場合、
SOAPメッセージにレコード情報を含めるのではなく、SOAPメッセージにRESTベースでCSV、あるいはXML形式のファイルを添付し、
サーバサイドでファイルをローディングし、非同期にデータ更新を実施します。
この方式により、従来と比較して大幅な処理時間短縮を実現しているわけです。
この処理方式を単純に説明すると、SalesforceにはインポートウィザードというCSVファイルを
会話形式にロードする機能が提供されており、ロードされたデータはインポートキューに
蓄えられてモニタ可能であり、そのインポート処理は非同期に実施されます。
これと似たようなことが、APIを介して実現できるようになったと考えると判り易いでしょう。
実際に、Bulk APIを利用した場合、「一括データ読み込みジョブの監視」としてSalesforceの
管理画面でジョブの実行状況をモニタすることが可能です。
尚、Bulk API は、 Salesforceが無償提供する
ApexDataLoader 17.0 が既に対応済みです。
また、Bulk API を使用するサンプルコードも提供されています。
興味ある人、早速 Bulk API 評価・検証してみましょう!
コメントする