Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
株式会社アプレッソ
開発部 開発グループ
第2チーム リーダー
土岐 拓未
2014年4月17日 dstnHUB
自己紹介
• 名前
– 土岐 拓未 (とき たくみ)
• 所属
– 株式会社アプレッソ 開発部
• 開発グループ 第2グループリーダー
• 担当業務
– PIMSYNC、その他新製品開発
• dstn担当
– 連載記事の執筆・管理
• 神尾みか...
本日のテーマ
DataSpiderはなぜ高速なのか?
Part.1 アーキテクチャ編
Part.2 テクニカル編
1. スクリプトのコンパイラ型実
行
2. PSP&スマートコンパイラによ
る大容量処理高速化
3. 各コンポーネントのパフォー
DataSpiderの高速処理を支える3つの技
術
1. スクリプトのコンパイラ型
実行
Servista 2~
コンパイラ型実行形式
DataSpider 1.x
インタプリタ型実行形式
どのようにスクリプトは実行される
か?
スクリプト作成・保存時
Studioでのスクリプト作成・保
存
XML形式
・設定情報
・位置情報
・フロー設定
・変数設定
など
設定ファイル
(.script)
保存
開く
スクリプトの各種設定情報は「.script」ファイルに保存
設定ファイル
インタプリタ型実行形式
各コンポ―ネントの処理
ループによる繰り返し
Ifアイコンによる条件分
岐
データ変換処理
JavaVM
実行
インタプリ
タによる変
換
インタプリ
タによる変
換
インタプリ
タによる変
換
インタプリ...
インタプリタ型実行形式の
パフォーマンス上の問題点
1. インタプリタによる変換が
逐次行われる
2. ループ、条件分岐自体も処
理が必要となりコストがか
かる
3. Javaコンパイラ、JVMによる
最適化がされにくい
XML形式
・設定情報
・位置情報
・フロー設定
・変数設定
など
設定ファイル(.script)
Javaソースコー
ド
・メソッド
・変数
・制御
・その他処理
.javaファイル
classファイル
.classファイル
生成 コンパイ
...
Javaソースコー
ド
・メソッド
・変数
・制御
・その他処理
….
for
(process_d00000fg3ml1i0i8gmg3mo2igdgf() ; ...
..
if
(evaluate_u80000fg3ml1i0i8gm9v...
Servista 2~
コンパイラ型実行形式
classファイル
実行
classファイル JavaVM
コンパイル型実行形式の
パフォーマンス上の長所
1. インタプリタ変換が不要
2. ループ、条件分岐はfor文・if
文になり処理コストが大幅
減少
3. Javaコンパイラ、JVMによる
最適化の恩恵を最大限に享
受できる
DSS 2.0DS 1.5 vs
ループ、分岐処理の処理速度比較データ
100万件のデータを繰り返し・分岐させた合計
値 繰り返し(LOOP) 分岐(IF)
DS1.5 6分7秒 5分16秒
DSS 2.0 0.8秒 0.9秒
繰り返し・分岐処...
2. PSP/スマートコンパイラに
よる大容量処理高速化
Parallel Stream Processing(PSP)と
は
メモリ消費を抑えながら大容量デー
タを高速に処理する機構
• 読み取り、変換、書き込みの処理を並列に実行する
→高速な処理が可能
• メモリに保持するのは一定のサイズのデータのみ
→メモリを使い過ぎることなくデータ処理が可能
通常フローの実行イメージ
変換
読み取り
書き込み
中間
データ
中間
データ
処理ごとにす
べてのデータ
をメモリ(※)
に保持
(※)大容量データ処
理がオンの場合は
ファイルに保持
総実行時間はすべての処理
の合計時間となる
PSPフローの実行イメージ
変換
読み取り
書き込み
中間
デー
タ
中間
デー
タ
中間
デー
タ
中間
デー
タ
中間
デー
タ
中間
デー
タ
総実行時間はす
べての処理の合
計時間より短く
なる
一定単位(1000
件)ごとにデー
タを...
デモで実験!
PSP モニターアダプタ
読み取り・変換・書き込みのデータ処理状況を監視するデモ用アダプタ&Webアプリケー
ション
読み取り~変換間の
中間データ件数
読み取り処理件数
変換処理件数
変換~書き込み間の
中間データ処理件数
書き込み処理件数
デモシナリオ
• 10000件のデータ
– PSPオフ
– PSPオン
• 読み取りが遅い場合
• 変換が遅い場合
• 書き込みが遅い場合
実験結果
• 1000件以上のデータでは並列で処理が実行
されるため総実行時間は短くなる
• 次の処理に必要なデータのみメモリに保持
する(一定量以上のデータを保持しない)た
め、少ないメモリで処理が可能
大容量データの高速・低メモリ負荷
の処...
スマートコンパイラ
DataSpider 3.0以前
PSPスクリプト形式
通常
スクリプ
ト
PSP
スクリプ
ト
「PSPスクリプト」を作り、通常スクリプトから
呼び出す
スクリプト呼び出し
デメリット
• PSPを使うことを意識してスクリプトを作る必要がある...
Servista 3.1
スマートコンパイラ
メリット
• PSP処理を意識することなく、高速・低メ
モリ負荷のスクリプトを作成可能
• スクリプト内でPSP処理が可能であるた
め、スクリプトの一覧性がアップ
PSP実行可能な処理を
自動的にP...
製品コンポーネントでのパフォーマンスや
PSPを活かすスクリプトの作り方は
Part.2 テクニカル編で!
3. 各コンポーネントのパ
フォーマンス最適化実装
コンポーネント 概要 詳細
XML Framework プリミティブ型で値を扱う
ように実装
高速・低メモリ負荷の処理を
実現
アダプタ全般 リソースプーリングによる
コネクションキャッシュ
コネクションのオープン/ク
ローズ回数を減少
データ...
ケース1 CSVアダプタ
CSV読み取りに最適化したファイルI/O処理実装
• java.io.PushbackReader
→ 読み取った文字を戻すことができるReader
– 任意のバッファサイズを指定できる
– スレッドセーフにするための...
• CSV読み取り専用PushbackReader
→ CSV読み取りに特化したシンプルな設計で実
装
– バッファサイズは1のみ
– スレッドセーフである必要がないため、同期処
理は排除
読み取りパフォーマンスが1.3~1.5倍
に
ケース2 Mapper
処理による実行エンジンの切り替え
• マッピング内容によって実行エンジンの切
り替えを行う
読み取り処理 書き込み処理
SimpleInputConverter
ExpressionInputConverte
r
XML...
さらなる高速化を目指して
今後も改善し続けていきます!
ご静聴ありがとうございました。
Nächste SlideShare
Wird geladen in …5
×

2014年4月17日 dstnHub発表スライド「dataspiderインターナル:アーキテクチャ編」

2.068 Aufrufe

Veröffentlicht am

Veröffentlicht in: Internet
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

2014年4月17日 dstnHub発表スライド「dataspiderインターナル:アーキテクチャ編」

  1. 1. 株式会社アプレッソ 開発部 開発グループ 第2チーム リーダー 土岐 拓未 2014年4月17日 dstnHUB
  2. 2. 自己紹介 • 名前 – 土岐 拓未 (とき たくみ) • 所属 – 株式会社アプレッソ 開発部 • 開発グループ 第2グループリーダー • 担当業務 – PIMSYNC、その他新製品開発 • dstn担当 – 連載記事の執筆・管理 • 神尾みかさんのDS自由自在 • DataSpiderデザインパターンβ • DataSpider Cookbook • dstn インタビュー – パワポ絵職人 神尾みかさん
  3. 3. 本日のテーマ
  4. 4. DataSpiderはなぜ高速なのか?
  5. 5. Part.1 アーキテクチャ編 Part.2 テクニカル編
  6. 6. 1. スクリプトのコンパイラ型実 行 2. PSP&スマートコンパイラによ る大容量処理高速化 3. 各コンポーネントのパフォー DataSpiderの高速処理を支える3つの技 術
  7. 7. 1. スクリプトのコンパイラ型 実行
  8. 8. Servista 2~ コンパイラ型実行形式 DataSpider 1.x インタプリタ型実行形式
  9. 9. どのようにスクリプトは実行される か?
  10. 10. スクリプト作成・保存時 Studioでのスクリプト作成・保 存 XML形式 ・設定情報 ・位置情報 ・フロー設定 ・変数設定 など 設定ファイル (.script) 保存 開く スクリプトの各種設定情報は「.script」ファイルに保存
  11. 11. 設定ファイル インタプリタ型実行形式 各コンポ―ネントの処理 ループによる繰り返し Ifアイコンによる条件分 岐 データ変換処理 JavaVM 実行 インタプリ タによる変 換 インタプリ タによる変 換 インタプリ タによる変 換 インタプリ タによる変 換 実行 実行 実行 インタプリタ
  12. 12. インタプリタ型実行形式の パフォーマンス上の問題点 1. インタプリタによる変換が 逐次行われる 2. ループ、条件分岐自体も処 理が必要となりコストがか かる 3. Javaコンパイラ、JVMによる 最適化がされにくい
  13. 13. XML形式 ・設定情報 ・位置情報 ・フロー設定 ・変数設定 など 設定ファイル(.script) Javaソースコー ド ・メソッド ・変数 ・制御 ・その他処理 .javaファイル classファイル .classファイル 生成 コンパイ ル Servista 2~ スクリプト保存時
  14. 14. Javaソースコー ド ・メソッド ・変数 ・制御 ・その他処理 …. for (process_d00000fg3ml1i0i8gmg3mo2igdgf() ; ... .. if (evaluate_u80000fg3ml1i0i8gm9vb8megdge()) { process_oi0000fg3ml1i0i8gm7vls1igdge(); } else if (evaluate_sk0000fg3ml1i0i8gme1hq00gdgf()) { …. } …. } …. if・forアイコンなどのアイコンはそのままJavaのif文・for 文に変換 手組みのJavaアプリケーションと 同等のパフォーマンス
  15. 15. Servista 2~ コンパイラ型実行形式 classファイル 実行 classファイル JavaVM
  16. 16. コンパイル型実行形式の パフォーマンス上の長所 1. インタプリタ変換が不要 2. ループ、条件分岐はfor文・if 文になり処理コストが大幅 減少 3. Javaコンパイラ、JVMによる 最適化の恩恵を最大限に享 受できる
  17. 17. DSS 2.0DS 1.5 vs ループ、分岐処理の処理速度比較データ 100万件のデータを繰り返し・分岐させた合計 値 繰り返し(LOOP) 分岐(IF) DS1.5 6分7秒 5分16秒 DSS 2.0 0.8秒 0.9秒 繰り返し・分岐処理の処理コストは極限ま で減少
  18. 18. 2. PSP/スマートコンパイラに よる大容量処理高速化
  19. 19. Parallel Stream Processing(PSP)と は
  20. 20. メモリ消費を抑えながら大容量デー タを高速に処理する機構 • 読み取り、変換、書き込みの処理を並列に実行する →高速な処理が可能 • メモリに保持するのは一定のサイズのデータのみ →メモリを使い過ぎることなくデータ処理が可能
  21. 21. 通常フローの実行イメージ 変換 読み取り 書き込み 中間 データ 中間 データ 処理ごとにす べてのデータ をメモリ(※) に保持 (※)大容量データ処 理がオンの場合は ファイルに保持 総実行時間はすべての処理 の合計時間となる
  22. 22. PSPフローの実行イメージ 変換 読み取り 書き込み 中間 デー タ 中間 デー タ 中間 デー タ 中間 デー タ 中間 デー タ 中間 デー タ 総実行時間はす べての処理の合 計時間より短く なる 一定単位(1000 件)ごとにデー タを渡し、メモ リ負荷を軽減
  23. 23. デモで実験!
  24. 24. PSP モニターアダプタ 読み取り・変換・書き込みのデータ処理状況を監視するデモ用アダプタ&Webアプリケー ション 読み取り~変換間の 中間データ件数 読み取り処理件数 変換処理件数 変換~書き込み間の 中間データ処理件数 書き込み処理件数
  25. 25. デモシナリオ • 10000件のデータ – PSPオフ – PSPオン • 読み取りが遅い場合 • 変換が遅い場合 • 書き込みが遅い場合
  26. 26. 実験結果 • 1000件以上のデータでは並列で処理が実行 されるため総実行時間は短くなる • 次の処理に必要なデータのみメモリに保持 する(一定量以上のデータを保持しない)た め、少ないメモリで処理が可能 大容量データの高速・低メモリ負荷 の処理を実現
  27. 27. スマートコンパイラ
  28. 28. DataSpider 3.0以前 PSPスクリプト形式 通常 スクリプ ト PSP スクリプ ト 「PSPスクリプト」を作り、通常スクリプトから 呼び出す スクリプト呼び出し デメリット • PSPを使うことを意識してスクリプトを作る必要がある • 別スクリプトになるため、スクリプト内の一覧性に欠ける
  29. 29. Servista 3.1 スマートコンパイラ メリット • PSP処理を意識することなく、高速・低メ モリ負荷のスクリプトを作成可能 • スクリプト内でPSP処理が可能であるた め、スクリプトの一覧性がアップ PSP実行可能な処理を 自動的にPSP化! PSPで実行可能な形式、コンポーネントはヘルプを参照くだ
  30. 30. 製品コンポーネントでのパフォーマンスや PSPを活かすスクリプトの作り方は Part.2 テクニカル編で!
  31. 31. 3. 各コンポーネントのパ フォーマンス最適化実装
  32. 32. コンポーネント 概要 詳細 XML Framework プリミティブ型で値を扱う ように実装 高速・低メモリ負荷の処理を 実現 アダプタ全般 リソースプーリングによる コネクションキャッシュ コネクションのオープン/ク ローズ回数を減少 データベースアダプタ 書き込み処理のBatch実行 大量データをまとめて書き込 むことでDB書き込みのパ フォーマンスを上げる データベースアダプタ PreparedStatementの使用 SQL実行の処理性能を向上 CSVアダプタ CSV読み取りに最適化した ファイルI/O処理実装 PushbackReaderの独自実装 Mapper 処理による実行エンジンの 切り替え 複雑な処理、単純な処理でエ ンジンを切り替えて高速化 ・・・ さまざまなコンポーネントで行われているパフォーマンス最適 化実装
  33. 33. ケース1 CSVアダプタ CSV読み取りに最適化したファイルI/O処理実装 • java.io.PushbackReader → 読み取った文字を戻すことができるReader – 任意のバッファサイズを指定できる – スレッドセーフにするための同期処理を実装 汎用的なクラスであるため、 CSV読み取りでは不要な処理が多い
  34. 34. • CSV読み取り専用PushbackReader → CSV読み取りに特化したシンプルな設計で実 装 – バッファサイズは1のみ – スレッドセーフである必要がないため、同期処 理は排除 読み取りパフォーマンスが1.3~1.5倍 に
  35. 35. ケース2 Mapper 処理による実行エンジンの切り替え • マッピング内容によって実行エンジンの切 り替えを行う 読み取り処理 書き込み処理 SimpleInputConverter ExpressionInputConverte r XML2XMLConverter テーブルモデル型同士で単純な繰り返し、ロ ジック無し、文字列型のみの場合 テーブルモデル型同士の場合 XML型の場合 可能な限り実行パフォーマンスが高い 実行エンジンを使うことで最適化
  36. 36. さらなる高速化を目指して 今後も改善し続けていきます!
  37. 37. ご静聴ありがとうございました。

×