SlideShare a Scribd company logo
1 of 37
Django/Celeyを用いた 
データ分析Webアプリケーションにおける 
非同期処理の設計と実装 
永安悟史 
pgcon14j 
12/5/2014
Who Am I?
Who Am I? 
• Database Engineer 
• Data Center Engineer 
• ITSM Specialist 
• Data Steward 
• System Architect 
• Co-founder 
• CTO
Agenda 
• Background & Motivation 
• Django 
• Async Processing in Django 
• Async Processing with Django/Celery 
• Design and Implementation 
for the Analytics App 
• Wrap-up
Background & Motivation
バックグラウンド 
• ヘルスケアデータベース 
– レセプトと検診データ 
– データベースサイズは100GB程度 
– 1テーブル数千万~1億レコード 
• 分析用のデータ抽出・集計のために、半定型な 
クエリを投げるようになってきた 
– 条件を変えて何度も繰り返し投げる 
– これまではエンジニアがSQLのテンプレを都度書き換 
えて作業 
– エンドユーザも検索できるようにしたい
モチベーションと要求事項 
• 半定型の集計クエリ(レポーティング) 
– 診断名、医薬品名、その他抽出条件が都度変わる 
• Webインターフェースを提供する必要性 
– 非技術者が使えるように 
• クエリの実行時間は「Webとしては」長い 
– 数十秒から長くて10分程度 
• スマートなWebインターフェースを提供したい 
– ブロッキングやタイムアウトをさせない 
– 開発期間(着手~プロトデモ)は実質的に1週間程度
Django
Django
About Django 
• PythonのWebフレームワーク 
– https://www.djangoproject.com/ 
• PythonにおけるRails的な位置付け(らしい) 
– 全部入りのフレームワーク 
• MTV (Model, Template, View) モデル 
– Template/ViewはMVCにおけるView/Controller 
• 組み込みO/Rマッパー入り 
– その他、SQLAlchemyも使える
Django Architecture 
出典:Djangoチュートリアル(前編) :CodeZine http://codezine.jp/article/detail/4065?p=2
Why Django? 
• 別件で使ったことがあった( 同じチームで) 
• 最小限の手間で、そこそこのものが作れる 
• 細かいところにそんなに拘らない 
• 普段、Webアプリ作らないので詳しくない 
• データ分析系なので、Pythonスキルを獲得・維持 
したい
Platforms and Frameworks 
• Windows 7 & Linux 
• Apache 
• Django 
• PostgreSQL 
• psycopg2 
• Twitter Bootstrap
Async Processing in Django
Long running queries in Django 
• クエリの実行時間は「Webとしては」長い 
– 数十秒から長くて10分程度 
• 実行時間を短縮させる必要性はさほどない 
– パフォーマンス改善における費用対効果の問題 
• スマートなWebインターフェースを提供したい 
– ブロッキングやタイムアウトをさせない 
• あまり大きなアーキテクチャにはしたくない 
– 運用性、保守性、属人性を考慮する
Async processing in Django 
https://www.djangopackages.com/grids/g/workers-queues-tasks/ 
As of Sep/21/2014
Development Status 
• Production/Stable 
• Beta 
• Beta 
• n/a 
• Beta 
• Alpha 
• Unknown 
• Unknown 
• Beta 
• Alpha 
As of Sep/21/2014 
So, which one should I choose? 
Lots of options, but no choice.
Djangoにおける非同期処理 
• django-tasks (623,000) 
– https://code.google.com/p/django-tasks/ 
• django-async (185,000) 
– https://pypi.python.org/pypi/django-async/ 
• django-rq (172,000) 
– http://python-rq.org/patterns/django/ 
• Celery (240,000) 
– http://www.celeryproject.org/
Async Processing with 
Django/Celery
UI/UX We Need 
• 一般的なWebUI 
– 検索条件を入力したら非同期処理を飛ばす 
• クエリを実行している間はspinnerを回す 
– バックグラウンドで実行 
• クエリが終わったら結果を表示
Celery 
• Distributed Task Queue 
• Real-time & Scheduled task 
• Simple & Easy to implement 
www.celeryproject.org
Celery Components 
• Client 
• Broker 
• Backend 
• Worker 
• Task 
Client 
Broker 
Backend 
Worker Worker
Supported Components
Celery Tasks 
• Pythonの関数として作成 
– 任意の引数、戻り値の定義が可能 
• DecolatorでCeleryのタスクとして定義
Celery Metadata 
• BackendとBrokerのデータ
Design and Implementation 
for the Analytics App
System Architecture 
Apache 
Django 
Celery 
PostgreSQL 
(Broker/Backend) 
PostgreSQL 
(Healthcare DB) 
1 Core, 1GB RAM 
25GB SAN DISK 
4 Core, 16GB RAM 
25+100GB SAN DISK 
Internet
From Query Templates To 
Celery Tasks 
• 条件に応じてSQLテンプレートからクエリを生成 
– テンプレートファイルを読み込み 
– 独自のプリプロセス処理(ifdef & endif) 
– プレースホルダにパラメータをバインド 
– O/Rマッパーは使わずpsycopg2を直叩き 
• Djangoのテンプレート+独自テンプレート 
– データ構造がModelに綺麗に当てはまらない 
– テンプレートを読み込んでプレースホルダを置き換え 
• 最後にCeleryのキューに投入する
Bind Parameters and Macros 
SELECT "連番" 
FROM "rez_iyaku" 
WHERE "薬剤コード" IN ( :DRUGCODE ) 
-- #ifdef EXCLUDE_DRUGCODE 
AND "薬剤コード" NOT IN ( :EXCLUDE_DRUGCODE ) 
-- #endif EXCLUDE_DRUGCODE 
SELECT "連番" 
FROM "rez_iyaku" 
WHERE "薬剤コード" IN ( 123456, 234567 ) 
/* 
AND "薬剤コード" NOT IN ( :EXCLUDE_DRUGCODE ) 
*/
From Query Templates To 
Celery Tasks 
Query 
Templates 
実行するクエリの元となるテンプレート 
(1クエリにテーブル6、WITH句6、約100行) 
Bind 
Parameters 
プレースホルダに対して 
入力条件である変数をバインド 
Preprocess 
Macros 
検索の条件に応じて 
ifdefマクロを 
コメントアウト処理 
Celery Tasks 
Celeryのタスク 
としてキューに 
投入
Internal Sequence 
Template View 
QueryBuilder QueryRunner 
Celery 
Broker Backend Worker 
Submit 
Polling 
Result 
Executing 
App Moudle 
Django
Processing a Task within 
Backend 
[2014-11-24 22:11:26,330: INFO/MainProcess] Received task: 
webui.QueryRunner.runQuery[1b5b8fd2-9296-4a25-9e98-f002b2068fdd] 
[2014-11-24 22:11:26,330: DEBUG/MainProcess] TaskPool: Apply <function 
_fast_trace_task at 0x2267938> (args:('webui.QueryRunner.runQuery', 
'1b5b8fd2-9296-4a25-9e98-f002b2068fdd', (...) 
[2014-11-24 22:11:26,333: DEBUG/MainProcess] Task accepted: 
webui.QueryRunner.runQuery[1b5b8fd2-9296-4a25-9e98-f002b2068fdd] 
pid:10450 
[2014-11-24 22:18:35,504: INFO/MainProcess] Task 
webui.QueryRunner.runQuery[1b5b8fd2-9296-4a25-9e98-f002b2068fdd] 
succeeded in 429.172908468s: {‘CCC_2_60_69_2012_REZ': '-', 
‘CCC_2_30_39_2010_ID': '-', ‘AAA_2_20_29_2012_ID': '172', 
‘AAA_1_30_39_2013_REZ': '324',...
Wrap-up
Wrap-up 
• Ad-hoc系で時間のかかる半定型クエリの実行を 
Webシステムとして実現 
• Django/Celeryを使って、DBAが実質2週間程 
度で開発(Djangoで1週間、Celeryで1週間)
感想 
• Djangoはデータ分析アプリに向いている 
– Web的なパフォーマンスを求められない 
– 全部入りでアプリの開発は比較的容易 
• Celeryは非同期処理に向いている 
– 特に問題なく動作している 
– 但し、Windowsでの動作は怪しい
And currently working on... 
1 min 50 sec ⇒ 0.2 sec
Thank you.

More Related Content

What's hot

NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部openrtm
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージMori Ken
 
新社会人が今すぐ使える、​ExcelでC#を使う方法
新社会人が今すぐ使える、​ExcelでC#を使う方法新社会人が今すぐ使える、​ExcelでC#を使う方法
新社会人が今すぐ使える、​ExcelでC#を使う方法Tetsuo Honda
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解Koji Terada
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII
 
SLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMSLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMIwami Kazuya
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMYoshitaka HARA
 
ORB-SLAMの手法解説
ORB-SLAMの手法解説ORB-SLAMの手法解説
ORB-SLAMの手法解説Masaya Kaneko
 
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -MPRG_Chubu_University
 
WindowsではじめるROSプログラミング
WindowsではじめるROSプログラミングWindowsではじめるROSプログラミング
WindowsではじめるROSプログラミングTakayuki Goto
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜Hideki Takase
 
GPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIAGPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIANVIDIA Japan
 
ROS2勉強会 4章前半
ROS2勉強会 4章前半ROS2勉強会 4章前半
ROS2勉強会 4章前半tomohiro kuwano
 
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーションakio19937
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選Takuya Ueda
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要Google Cloud Platform - Japan
 
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...Deep Learning JP
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII
 

What's hot (20)

NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
 
新社会人が今すぐ使える、​ExcelでC#を使う方法
新社会人が今すぐ使える、​ExcelでC#を使う方法新社会人が今すぐ使える、​ExcelでC#を使う方法
新社会人が今すぐ使える、​ExcelでC#を使う方法
 
PCL
PCLPCL
PCL
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
SLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMSLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAM
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAM
 
ORB-SLAMの手法解説
ORB-SLAMの手法解説ORB-SLAMの手法解説
ORB-SLAMの手法解説
 
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
 
WindowsではじめるROSプログラミング
WindowsではじめるROSプログラミングWindowsではじめるROSプログラミング
WindowsではじめるROSプログラミング
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
 
GPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIAGPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIA
 
ROS2勉強会 4章前半
ROS2勉強会 4章前半ROS2勉強会 4章前半
ROS2勉強会 4章前半
 
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
 
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 

Viewers also liked

Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Hironori Sekine
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようHiroshi Funai
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境Hisao Soyama
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012makoto tsuyuki
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Shinya Okano
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Hironori Sekine
 
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Ian Lewis
 
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発Takahiro Kubo
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集Hikaru Takemura
 
RとPythonによるデータ解析入門
RとPythonによるデータ解析入門RとPythonによるデータ解析入門
RとPythonによるデータ解析入門Atsushi Hayakawa
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjpShinichi Nakagawa
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門Hironori Sekine
 

Viewers also liked (20)

Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
 
[WIP] pgDay Asia 2016
[WIP] pgDay Asia 2016[WIP] pgDay Asia 2016
[WIP] pgDay Asia 2016
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしよう
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
 
Django learning Part2
Django learning Part2Django learning Part2
Django learning Part2
 
Django 1.9
Django 1.9Django 1.9
Django 1.9
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
 
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法
 
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集
 
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
 
Gensim
GensimGensim
Gensim
 
RとPythonによるデータ解析入門
RとPythonによるデータ解析入門RとPythonによるデータ解析入門
RとPythonによるデータ解析入門
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
 

Similar to Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装

企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!Kazumi IWANAGA
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤Sotaro Kimura
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareerKyosuke MOROHASHI
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
ソフトウェア工学2023 04 開発プロセスモデル
ソフトウェア工学2023 04 開発プロセスモデルソフトウェア工学2023 04 開発プロセスモデル
ソフトウェア工学2023 04 開発プロセスモデルToru Tamaki
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Kazumi IWANAGA
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費Tatsumi Akinori
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル貴志 上坂
 
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編Daiyu Hatakeyama
 
20120421中国gtug
20120421中国gtug20120421中国gtug
20120421中国gtugYusuke Sato
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回Naoyuki Yamada
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう幹雄 小川
 
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Qiita x Microsoft - 機械学習セミナー Microsoft AI PlatformQiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Qiita x Microsoft - 機械学習セミナー Microsoft AI PlatformDaiyu Hatakeyama
 

Similar to Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装 (20)

企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
ソフトウェア工学2023 04 開発プロセスモデル
ソフトウェア工学2023 04 開発プロセスモデルソフトウェア工学2023 04 開発プロセスモデル
ソフトウェア工学2023 04 開発プロセスモデル
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
JAWS DAYS 2022
JAWS DAYS 2022JAWS DAYS 2022
JAWS DAYS 2022
 
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
 
20120421中国gtug
20120421中国gtug20120421中国gtug
20120421中国gtug
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
超高速な機械学習を Oracle Database で実現!
超高速な機械学習を Oracle Database で実現!超高速な機械学習を Oracle Database で実現!
超高速な機械学習を Oracle Database で実現!
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
 
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Qiita x Microsoft - 機械学習セミナー Microsoft AI PlatformQiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
 

More from Satoshi Nagayasu

データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) Satoshi Nagayasu
 
Oracle対応アプリケーションのDockerize事始め
Oracle対応アプリケーションのDockerize事始めOracle対応アプリケーションのDockerize事始め
Oracle対応アプリケーションのDockerize事始めSatoshi Nagayasu
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会Satoshi Nagayasu
 
In-Database Analyticsの必要性と可能性
In-Database Analyticsの必要性と可能性In-Database Analyticsの必要性と可能性
In-Database Analyticsの必要性と可能性Satoshi Nagayasu
 
10 Reasons to Start Your Analytics Project with PostgreSQL
10 Reasons to Start Your Analytics Project with PostgreSQL10 Reasons to Start Your Analytics Project with PostgreSQL
10 Reasons to Start Your Analytics Project with PostgreSQLSatoshi Nagayasu
 
A Story Behind the Conference, or How pgDay Asia was born
A Story Behind the Conference, or How pgDay Asia was bornA Story Behind the Conference, or How pgDay Asia was born
A Story Behind the Conference, or How pgDay Asia was bornSatoshi Nagayasu
 
データベースエンジニアがデータヘルスの2年間で見たもの(仮)
データベースエンジニアがデータヘルスの2年間で見たもの(仮)データベースエンジニアがデータヘルスの2年間で見たもの(仮)
データベースエンジニアがデータヘルスの2年間で見たもの(仮)Satoshi Nagayasu
 
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 TaipeiPostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 TaipeiSatoshi Nagayasu
 
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 SingaporePostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 SingaporeSatoshi Nagayasu
 
PostgreSQL Community in Japan
PostgreSQL Community in JapanPostgreSQL Community in Japan
PostgreSQL Community in JapanSatoshi Nagayasu
 
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!Satoshi Nagayasu
 
映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論Satoshi Nagayasu
 
統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定Satoshi Nagayasu
 
PostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementPostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementSatoshi Nagayasu
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方Satoshi Nagayasu
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価Satoshi Nagayasu
 

More from Satoshi Nagayasu (20)

データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
Oracle対応アプリケーションのDockerize事始め
Oracle対応アプリケーションのDockerize事始めOracle対応アプリケーションのDockerize事始め
Oracle対応アプリケーションのDockerize事始め
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
In-Database Analyticsの必要性と可能性
In-Database Analyticsの必要性と可能性In-Database Analyticsの必要性と可能性
In-Database Analyticsの必要性と可能性
 
10 Reasons to Start Your Analytics Project with PostgreSQL
10 Reasons to Start Your Analytics Project with PostgreSQL10 Reasons to Start Your Analytics Project with PostgreSQL
10 Reasons to Start Your Analytics Project with PostgreSQL
 
pgDay Asia 2016 & 2017
pgDay Asia 2016 & 2017pgDay Asia 2016 & 2017
pgDay Asia 2016 & 2017
 
A Story Behind the Conference, or How pgDay Asia was born
A Story Behind the Conference, or How pgDay Asia was bornA Story Behind the Conference, or How pgDay Asia was born
A Story Behind the Conference, or How pgDay Asia was born
 
データベースエンジニアがデータヘルスの2年間で見たもの(仮)
データベースエンジニアがデータヘルスの2年間で見たもの(仮)データベースエンジニアがデータヘルスの2年間で見たもの(仮)
データベースエンジニアがデータヘルスの2年間で見たもの(仮)
 
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 TaipeiPostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
 
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 SingaporePostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
PostgreSQL 9.4 and Beyond @ FOSSASIA 2015 Singapore
 
PostgreSQL 9.4
PostgreSQL 9.4PostgreSQL 9.4
PostgreSQL 9.4
 
PostgreSQL Community in Japan
PostgreSQL Community in JapanPostgreSQL Community in Japan
PostgreSQL Community in Japan
 
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
海外の技術カンファレンスに行こう! Let’s go tech conferences overseas!
 
映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論映画「マネーボール」に学ぶデータ分析と組織行動論
映画「マネーボール」に学ぶデータ分析と組織行動論
 
統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定統計勉強会 分割表とカイ二乗検定
統計勉強会 分割表とカイ二乗検定
 
PgAccelerator
PgAcceleratorPgAccelerator
PgAccelerator
 
PostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementPostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer Management
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価
 
20040228 Hokkaido 1
20040228 Hokkaido 120040228 Hokkaido 1
20040228 Hokkaido 1
 

Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装

  • 3. Who Am I? • Database Engineer • Data Center Engineer • ITSM Specialist • Data Steward • System Architect • Co-founder • CTO
  • 4. Agenda • Background & Motivation • Django • Async Processing in Django • Async Processing with Django/Celery • Design and Implementation for the Analytics App • Wrap-up
  • 6. バックグラウンド • ヘルスケアデータベース – レセプトと検診データ – データベースサイズは100GB程度 – 1テーブル数千万~1億レコード • 分析用のデータ抽出・集計のために、半定型な クエリを投げるようになってきた – 条件を変えて何度も繰り返し投げる – これまではエンジニアがSQLのテンプレを都度書き換 えて作業 – エンドユーザも検索できるようにしたい
  • 7. モチベーションと要求事項 • 半定型の集計クエリ(レポーティング) – 診断名、医薬品名、その他抽出条件が都度変わる • Webインターフェースを提供する必要性 – 非技術者が使えるように • クエリの実行時間は「Webとしては」長い – 数十秒から長くて10分程度 • スマートなWebインターフェースを提供したい – ブロッキングやタイムアウトをさせない – 開発期間(着手~プロトデモ)は実質的に1週間程度
  • 10. About Django • PythonのWebフレームワーク – https://www.djangoproject.com/ • PythonにおけるRails的な位置付け(らしい) – 全部入りのフレームワーク • MTV (Model, Template, View) モデル – Template/ViewはMVCにおけるView/Controller • 組み込みO/Rマッパー入り – その他、SQLAlchemyも使える
  • 11. Django Architecture 出典:Djangoチュートリアル(前編) :CodeZine http://codezine.jp/article/detail/4065?p=2
  • 12. Why Django? • 別件で使ったことがあった( 同じチームで) • 最小限の手間で、そこそこのものが作れる • 細かいところにそんなに拘らない • 普段、Webアプリ作らないので詳しくない • データ分析系なので、Pythonスキルを獲得・維持 したい
  • 13. Platforms and Frameworks • Windows 7 & Linux • Apache • Django • PostgreSQL • psycopg2 • Twitter Bootstrap
  • 15. Long running queries in Django • クエリの実行時間は「Webとしては」長い – 数十秒から長くて10分程度 • 実行時間を短縮させる必要性はさほどない – パフォーマンス改善における費用対効果の問題 • スマートなWebインターフェースを提供したい – ブロッキングやタイムアウトをさせない • あまり大きなアーキテクチャにはしたくない – 運用性、保守性、属人性を考慮する
  • 16. Async processing in Django https://www.djangopackages.com/grids/g/workers-queues-tasks/ As of Sep/21/2014
  • 17. Development Status • Production/Stable • Beta • Beta • n/a • Beta • Alpha • Unknown • Unknown • Beta • Alpha As of Sep/21/2014 So, which one should I choose? Lots of options, but no choice.
  • 18. Djangoにおける非同期処理 • django-tasks (623,000) – https://code.google.com/p/django-tasks/ • django-async (185,000) – https://pypi.python.org/pypi/django-async/ • django-rq (172,000) – http://python-rq.org/patterns/django/ • Celery (240,000) – http://www.celeryproject.org/
  • 19. Async Processing with Django/Celery
  • 20. UI/UX We Need • 一般的なWebUI – 検索条件を入力したら非同期処理を飛ばす • クエリを実行している間はspinnerを回す – バックグラウンドで実行 • クエリが終わったら結果を表示
  • 21. Celery • Distributed Task Queue • Real-time & Scheduled task • Simple & Easy to implement www.celeryproject.org
  • 22. Celery Components • Client • Broker • Backend • Worker • Task Client Broker Backend Worker Worker
  • 24. Celery Tasks • Pythonの関数として作成 – 任意の引数、戻り値の定義が可能 • DecolatorでCeleryのタスクとして定義
  • 25. Celery Metadata • BackendとBrokerのデータ
  • 26. Design and Implementation for the Analytics App
  • 27. System Architecture Apache Django Celery PostgreSQL (Broker/Backend) PostgreSQL (Healthcare DB) 1 Core, 1GB RAM 25GB SAN DISK 4 Core, 16GB RAM 25+100GB SAN DISK Internet
  • 28. From Query Templates To Celery Tasks • 条件に応じてSQLテンプレートからクエリを生成 – テンプレートファイルを読み込み – 独自のプリプロセス処理(ifdef & endif) – プレースホルダにパラメータをバインド – O/Rマッパーは使わずpsycopg2を直叩き • Djangoのテンプレート+独自テンプレート – データ構造がModelに綺麗に当てはまらない – テンプレートを読み込んでプレースホルダを置き換え • 最後にCeleryのキューに投入する
  • 29. Bind Parameters and Macros SELECT "連番" FROM "rez_iyaku" WHERE "薬剤コード" IN ( :DRUGCODE ) -- #ifdef EXCLUDE_DRUGCODE AND "薬剤コード" NOT IN ( :EXCLUDE_DRUGCODE ) -- #endif EXCLUDE_DRUGCODE SELECT "連番" FROM "rez_iyaku" WHERE "薬剤コード" IN ( 123456, 234567 ) /* AND "薬剤コード" NOT IN ( :EXCLUDE_DRUGCODE ) */
  • 30. From Query Templates To Celery Tasks Query Templates 実行するクエリの元となるテンプレート (1クエリにテーブル6、WITH句6、約100行) Bind Parameters プレースホルダに対して 入力条件である変数をバインド Preprocess Macros 検索の条件に応じて ifdefマクロを コメントアウト処理 Celery Tasks Celeryのタスク としてキューに 投入
  • 31. Internal Sequence Template View QueryBuilder QueryRunner Celery Broker Backend Worker Submit Polling Result Executing App Moudle Django
  • 32. Processing a Task within Backend [2014-11-24 22:11:26,330: INFO/MainProcess] Received task: webui.QueryRunner.runQuery[1b5b8fd2-9296-4a25-9e98-f002b2068fdd] [2014-11-24 22:11:26,330: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x2267938> (args:('webui.QueryRunner.runQuery', '1b5b8fd2-9296-4a25-9e98-f002b2068fdd', (...) [2014-11-24 22:11:26,333: DEBUG/MainProcess] Task accepted: webui.QueryRunner.runQuery[1b5b8fd2-9296-4a25-9e98-f002b2068fdd] pid:10450 [2014-11-24 22:18:35,504: INFO/MainProcess] Task webui.QueryRunner.runQuery[1b5b8fd2-9296-4a25-9e98-f002b2068fdd] succeeded in 429.172908468s: {‘CCC_2_60_69_2012_REZ': '-', ‘CCC_2_30_39_2010_ID': '-', ‘AAA_2_20_29_2012_ID': '172', ‘AAA_1_30_39_2013_REZ': '324',...
  • 34. Wrap-up • Ad-hoc系で時間のかかる半定型クエリの実行を Webシステムとして実現 • Django/Celeryを使って、DBAが実質2週間程 度で開発(Djangoで1週間、Celeryで1週間)
  • 35. 感想 • Djangoはデータ分析アプリに向いている – Web的なパフォーマンスを求められない – 全部入りでアプリの開発は比較的容易 • Celeryは非同期処理に向いている – 特に問題なく動作している – 但し、Windowsでの動作は怪しい
  • 36. And currently working on... 1 min 50 sec ⇒ 0.2 sec