54
Salesforce API シリーズ Bulk APIを使った高速並列データロード

Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Embed Size (px)

DESCRIPTION

9月12日に行われた、「Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar」で使用されたスライドです。

Citation preview

Page 1: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Salesforce API シリーズ Bulk APIを使った高速並列データロード

Page 2: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Safe Harbor

Safe harbor statement under the Private Securities Litigation Reform Act of 1995:

This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.

The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of intellectual property and other litigation, risks associated with possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-Q for the most recent fiscal quarter ended July 31, 2012. This documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site.

Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.

Page 3: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Speakers

Mitsuhiro Okamoto

Developer Program Manager @mitsuhiro

Page 4: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

ソーシャルアカウントをフォローください

@salesforcedevjp / #salesforcedevjp

Salesforce Developers Japan

+Salesforce Developers Japan

Developer Force Japan

Developer Force Group

録画ビデオはYoutube及びWebinar

詳細ページにて公開されます (参加登録URLと同じです)

本Webinarは録画されています

Page 5: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

質問がある場合には?

§  質問は最後まで待つ必要はありません! –  Questionの機能を使って質問をして下さい。

可能な場合は別のスタッフが質問について解答します。 すぐに解答出来ない場合は、後ほどスピーカーが解答します

§  ライブQ&Aを最後に行います –  時間の許す限り、Webinarの最後にQ & Aの時間を設けます

§  開発者フォーラムを活用しましょう –  よりたくさんの質問がある場合は?こちらをご利用下さい

http://developer.salesforce.com/jp/forums

Page 6: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Salesforceへのデータ投入を 高速にするにはどうするか?

Page 7: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

あなたは 1時間でどれぐらいのデータをSalesforceに登録できますか?

Page 8: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

データロードのスループット

-

5,000,000

10,000,000

15,000,000

20,000,000

25,000,000

OK なかなか 素晴らしい

レコード件数 / 1時間

Page 9: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

並行処理

Page 10: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並行処理と類似するもの: 溝掘り

Page 11: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

順次(逐次)処理

Page 12: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並行処理

Page 13: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

プロセッサやスレッドが ひとつの処理に費やされる数

Page 14: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

もっとも最適な並行処理

順次

並列

2,000万 レコード

500万 レコード

500万 レコード

500万 レコード

500万 レコード

時間

Page 15: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

最適化されていない並行処理

順次

並列

Time

500万 レコード

500万 レコード

500万 レコード

500万 レコード

2,000万 レコード

Page 16: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

ロック, 例外, トリガ, 関連, …などなど

順次

並列

Time

500万 レコード

500万 レコード

500万 レコード

500万 レコード

2,000万 レコード

スループットを阻害

Page 17: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

データロードケーススタディ

§  Salesforce Bulk API を実際に試してみる §  順次データ処理 と 並列データ処理 を比べる §  並列度 及び スループットを統計する

§  スループット阻害要因を特定し回避する §  最大のスループットを達成

Page 18: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

前提条件

Page 19: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Salesforce Bulk API

§  非同期 のデータロード

§  大量データセットに最適化 §  REST API

§  様々なツールで利用されている

§  任意のプログラミング言語 (Java等)から 呼び出すことができる

Page 20: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Force.com Web Service Connector (WSC)

§  Salesforce APIを簡単に使うためのJavaツールキット –  Web Services/SOAP

–  Asynchronous/BULK

§  依存ライブラリが無くシンプルに利用可能

Page 21: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

デモスキーマ

Page 22: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Bulk APIのロードにまつわるキーワード …

ealize, nvestigate, lan

把握、調査、計画

Page 23: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

ケーススタディ

Page 24: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

順次データロード

Page 25: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread

順次ロード: 想定プラン

時間

•  単一ジョブ •  100バッチ •  10,000レコード / バッチ •  トータル100万レコード

Page 26: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

順次ロード: Job設定

Page 27: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

順次ロード: バッチ作成

Page 28: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

順次ロード: バッチ実行

Page 29: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Demo 順次ロード

Page 30: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

順次ロード結果

同時実行モード 順次 処理レコード数 1,000,000 失敗レコード数 0 実行時間 41 minutes スループット 24,300 レコード / 分 平行処理率 0.92 問題点 並行処理率は必ず1以下となってしまう 解決策 スループット向上の為に並行ロードを検討する

Page 31: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並行処理 vs 単一ジョブのスループット

0

50000

100000

150000

200000

250000

300000

350000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

順次処理

順次実行 •  並行性に問題有り

並列処理

スループット

(レコード数

) / 1分

Page 32: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

並行データロード

Page 33: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread

並行読み込み: 想定プラン

時間

•  複数ジョブ •  100バッチ •  10,000 レコード /バッチ •  トータル100万レコード

Page 34: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並列ロード: ジョブ設定

Page 35: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

以下に注目

§  ロックは並列実行に多大な影響を与える –  処理能力を無駄にしてしまう

–  スループットの低下

–  エラー

§  再実行はすべてを解決するわけではない

Page 36: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

デモ 並列処理 v1

Page 37: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並列ロード v1 まとめ

同時実行モード 並列 処理レコード数 404200 失敗レコード数 198600 実行時間 10分 スループット 25,000レコード / 分 平行処理率 15.79 問題点 ロック例外が発生。 サーバは処理を分散させて行ったが、スループットは上がらなかった 解決策 順次モードで動作するか、ロックを管理する

Page 38: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並行処理v1 vs 順次処理 : スループット

0

50000

100000

150000

200000

250000

300000

350000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

順次処理

並行実行 v1 •  高い並行処理率 •  ロックによるスループットが低下

並列処理

スループット

(レコード数

) / 1分

並行処理 v1

Page 39: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

最適化!!

§  最適なデータロードのためのキーワード「 」

§  ealize – 把握 –  ロックは並行性とスループットを阻害

§  nvestigate – 調査 –  何がロックの原因か

§  lan – 計画 –  ロックをコントロールする

Page 40: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

デモ 並行ロード v2

スキーマ変更によるロック解除

Page 41: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並列処理v2 : 結果

同時実行モード 並行 処理レコード数 100万レコード 失敗レコード数 0 実行時間 2分36秒 スループット 400,000レコード / 分 平行処理率 19 問題点 なし 解決策 n/a

Page 42: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

並行処理v2 vs 順次処理 : スループット

0

50000

100000

150000

200000

250000

300000

350000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

順次処理

並行処理 v2 •  高い並行性 •  高スループット

並行処理

スループット

(レコード数

) / 1分

並行処理 v1

並行処理 v2

Page 43: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

ロックの管理 … 注意しなければならないポイント

§  主従関係

§  参照関係

§  積み上げ集計項目

§  トリガ

§  ワークフロールール

§  グループメンバーシップロック

Page 44: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

ロックは管理出来る

§  ロックの原因となる要因を排除する –  トリガ、ワークフローを一時的に停止する

–  ファイル内のデータをソートする

Page 45: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Parallel load: Sample results

同時実行モード Parallel 処理レコード数 1 million 失敗レコード数 0 実行時間 4 minutes 所要時間 1 hour スループット 250,000 records per minute 平行処理率 16.5 問題点 Minimal overhead due to locks 解決策 Remove all unnecessary locks

Page 46: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

スロット制御/

並行データロード

Page 47: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

スロット制御でのデータロード

§  スループットと平行制を考慮したスロットリング –  並行処理及びローディング

–  非同期処理の優先順位付け

§  複雑なジョブにおける阻害要因を管理する –  データのタイミング

–  複数のロック

Page 48: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread

スロット制御ユースケース1:想定

時間

•  100 ジョブ •  1 バッチ/ジョブ •  10,000 レコード/バッチ •  100万レコード

Page 49: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

スロット制御 vs 順次処理 : スループット

0

50000

100000

150000

200000

250000

300000

350000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

順次

スロット制御 v1 •  低い並列性 •  低いスループット

Degree of Parallelism

Thro

ughp

ut R

ecor

ds/M

in

並行処理 v1

並行処理 v2

スロット制御 v1

Page 50: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread

Controlled Feed Use Case 2: Expected plan

Time

•  10 ジョブ •  10 バッチ/ジョブ •  10,000 レコード/バッチ •  100万トータルレコード

Page 51: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

スロット制御 vs 順次処理 : スループット

0

50000

100000

150000

200000

250000

300000

350000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

順次

スロット制御実行 •  並行性を抑える •  期待通りのスループット

並列処理

スループット

(レコード数

) / 1分

Parallel 1

並行処理 v2

スロット制御

Page 52: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

#salesforcedevjp

まとめ

§  並列データロードのためのキーワード「 」

§  ealize – 把握 –  ロックは並行性とスループットを阻害

§  nvestigate – 調査 –  何がロックの原因か

§  lan – 計画 –  ロックをコントロールする

Page 53: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Q & A

#salesforcedevjp

Mitsuhiro Okamoto

Developer Program Manager @mitsuhiro

Page 54: Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar

Thank you