View
347
Download
0
Category
Preview:
DESCRIPTION
9月12日に行われた、「Salesforce API シリーズ: バルクAPIを使った高速並列データロードWebinar」で使用されたスライドです。
Citation preview
Salesforce API シリーズ Bulk APIを使った高速並列データロード
#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.
#salesforcedevjp
Speakers
Mitsuhiro Okamoto
Developer Program Manager @mitsuhiro
#salesforcedevjp
ソーシャルアカウントをフォローください
@salesforcedevjp / #salesforcedevjp
Salesforce Developers Japan
+Salesforce Developers Japan
Developer Force Japan
Developer Force Group
録画ビデオはYoutube及びWebinar
詳細ページにて公開されます (参加登録URLと同じです)
本Webinarは録画されています
#salesforcedevjp
質問がある場合には?
§ 質問は最後まで待つ必要はありません! – Questionの機能を使って質問をして下さい。
可能な場合は別のスタッフが質問について解答します。 すぐに解答出来ない場合は、後ほどスピーカーが解答します
§ ライブQ&Aを最後に行います – 時間の許す限り、Webinarの最後にQ & Aの時間を設けます
§ 開発者フォーラムを活用しましょう – よりたくさんの質問がある場合は?こちらをご利用下さい
http://developer.salesforce.com/jp/forums
Salesforceへのデータ投入を 高速にするにはどうするか?
あなたは 1時間でどれぐらいのデータをSalesforceに登録できますか?
#salesforcedevjp
データロードのスループット
-
5,000,000
10,000,000
15,000,000
20,000,000
25,000,000
OK なかなか 素晴らしい
レコード件数 / 1時間
並行処理
#salesforcedevjp
並行処理と類似するもの: 溝掘り
#salesforcedevjp
順次(逐次)処理
#salesforcedevjp
並行処理
プロセッサやスレッドが ひとつの処理に費やされる数
#salesforcedevjp
もっとも最適な並行処理
順次
並列
2,000万 レコード
500万 レコード
500万 レコード
500万 レコード
500万 レコード
時間
#salesforcedevjp
最適化されていない並行処理
順次
並列
Time
500万 レコード
500万 レコード
500万 レコード
500万 レコード
2,000万 レコード
#salesforcedevjp
ロック, 例外, トリガ, 関連, …などなど
順次
並列
Time
500万 レコード
500万 レコード
500万 レコード
500万 レコード
2,000万 レコード
スループットを阻害
#salesforcedevjp
データロードケーススタディ
§ Salesforce Bulk API を実際に試してみる § 順次データ処理 と 並列データ処理 を比べる § 並列度 及び スループットを統計する
§ スループット阻害要因を特定し回避する § 最大のスループットを達成
前提条件
#salesforcedevjp
Salesforce Bulk API
§ 非同期 のデータロード
§ 大量データセットに最適化 § REST API
§ 様々なツールで利用されている
§ 任意のプログラミング言語 (Java等)から 呼び出すことができる
#salesforcedevjp
Force.com Web Service Connector (WSC)
§ Salesforce APIを簡単に使うためのJavaツールキット – Web Services/SOAP
– Asynchronous/BULK
§ 依存ライブラリが無くシンプルに利用可能
#salesforcedevjp
デモスキーマ
Bulk APIのロードにまつわるキーワード …
ealize, nvestigate, lan
把握、調査、計画
ケーススタディ
順次データロード
#salesforcedevjp
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
順次ロード: 想定プラン
時間
• 単一ジョブ • 100バッチ • 10,000レコード / バッチ • トータル100万レコード
#salesforcedevjp
順次ロード: Job設定
#salesforcedevjp
順次ロード: バッチ作成
#salesforcedevjp
順次ロード: バッチ実行
Demo 順次ロード
#salesforcedevjp
順次ロード結果
同時実行モード 順次 処理レコード数 1,000,000 失敗レコード数 0 実行時間 41 minutes スループット 24,300 レコード / 分 平行処理率 0.92 問題点 並行処理率は必ず1以下となってしまう 解決策 スループット向上の為に並行ロードを検討する
#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分
並行データロード
#salesforcedevjp
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
並行読み込み: 想定プラン
時間
• 複数ジョブ • 100バッチ • 10,000 レコード /バッチ • トータル100万レコード
#salesforcedevjp
並列ロード: ジョブ設定
#salesforcedevjp
以下に注目
§ ロックは並列実行に多大な影響を与える – 処理能力を無駄にしてしまう
– スループットの低下
– エラー
§ 再実行はすべてを解決するわけではない
デモ 並列処理 v1
#salesforcedevjp
並列ロード v1 まとめ
同時実行モード 並列 処理レコード数 404200 失敗レコード数 198600 実行時間 10分 スループット 25,000レコード / 分 平行処理率 15.79 問題点 ロック例外が発生。 サーバは処理を分散させて行ったが、スループットは上がらなかった 解決策 順次モードで動作するか、ロックを管理する
#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
#salesforcedevjp
最適化!!
§ 最適なデータロードのためのキーワード「 」
§ ealize – 把握 – ロックは並行性とスループットを阻害
§ nvestigate – 調査 – 何がロックの原因か
§ lan – 計画 – ロックをコントロールする
デモ 並行ロード v2
スキーマ変更によるロック解除
#salesforcedevjp
並列処理v2 : 結果
同時実行モード 並行 処理レコード数 100万レコード 失敗レコード数 0 実行時間 2分36秒 スループット 400,000レコード / 分 平行処理率 19 問題点 なし 解決策 n/a
#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
#salesforcedevjp
ロックの管理 … 注意しなければならないポイント
§ 主従関係
§ 参照関係
§ 積み上げ集計項目
§ トリガ
§ ワークフロールール
§ グループメンバーシップロック
#salesforcedevjp
ロックは管理出来る
§ ロックの原因となる要因を排除する – トリガ、ワークフローを一時的に停止する
– ファイル内のデータをソートする
#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
スロット制御/
並行データロード
#salesforcedevjp
スロット制御でのデータロード
§ スループットと平行制を考慮したスロットリング – 並行処理及びローディング
– 非同期処理の優先順位付け
§ 複雑なジョブにおける阻害要因を管理する – データのタイミング
– 複数のロック
#salesforcedevjp
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
スロット制御ユースケース1:想定
時間
• 100 ジョブ • 1 バッチ/ジョブ • 10,000 レコード/バッチ • 100万レコード
#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
#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万トータルレコード
#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
スロット制御
#salesforcedevjp
まとめ
§ 並列データロードのためのキーワード「 」
§ ealize – 把握 – ロックは並行性とスループットを阻害
§ nvestigate – 調査 – 何がロックの原因か
§ lan – 計画 – ロックをコントロールする
Q & A
#salesforcedevjp
Mitsuhiro Okamoto
Developer Program Manager @mitsuhiro
Thank you
Recommended