Movatterモバイル変換


[0]ホーム

URL:


Uploaded byhirokiky
PDF, PPTX12,537 views

Pycon2014 django performance

Djangoアプリケーションチューニング、Djangoアプリケーションのチューニング方法、負荷測定方法を紹介します。PyConJP2014での発表資料です。発表の動画はこちら http://youtu.be/1aLAZG4Udg0

Embed presentation

Download as PDF, PPTX
Djangoアプリケーション パフォーマンスチューニング @hirokiky
話すこと Djangoアプリケーション高速化 パフォーマンス測定ツール
話さないこと ミドルウェアパラメータ調整 検証用データの作成方法 なんか魔法みたいに速くなる技
自己紹介 @hirokiky Python Django 好き ギョームで100万ユーザーくらいのサイト Django本体への貢献
Github https://github.com/hirokiky/
Djangoアプリ高速化 SQLを吐きまくるコードは誰だ インデックス キャッシュキャッシュキャッシュ アプリケーション外
SQLを吐きまくるコードは誰だ ● django-debug-toolbar dbログ出力
django-debug-toolbar デモ https://pypi.python.org/pypi/django-debug-toolbar
django-debug-toolbar
dbログ出力
dbログ出力設定例 LOGGING['loggers']['django.db.backends'] = { 'level': 'DEBUG', 'handlers': ['console'] } 'console'ハンドラーは標準出力に表示する想定
SQLを吐きまくるコードを倒す ● .select_related/.prefetch_related .bulk_create / .update .count / .exists
.select_related (demo) ● FK先のデータも一緒に取ってくる 内部的にはJOINなどが走る
.prefetch_related (demo) ● FK元のデータも一緒に取ってくる 複数クエリを実行しPython側で結合
.bulk_create (demo) ● 複数のオブジェクトを一度に作成
.update
.exist - countダメ
その他 ● .only / .defer .values / .values_list アプリケーションが複雑化しやすい....
QuerySetはlazy >>> articles = Article.objects.all() >>> articles = articles.filter(title__startswith='title') >>> print(articles) >>> >>> q = articles.filter(author_id=1) >>> print(q) ここでクエリ実行 https://docs.djangoproject.com/en/1.7/topics/db/queries/#querysets-are-lazy
ここまでのまとめ ● ORMが実行するSQLを知ろう ORMの特性を意識しよう 他にも: https://docs.djangoproject.com/en/1.7/topics/db/optimization/
インデックス ● 適切なインデックスを使おう 結局相手にしてるのはRDB
インデックス 1) 吐かれてるSQLをみて適応してく 2) インデックスがかかるクエリに変更
吐かれるクエリは? 検証環境などにデータたっぷりいれて 画面をポチポチします JetProfilerなどがツールも優秀です
JetProfiler for MySQL http://www.jetprofiler.com/tour/
インデックスの貼り方 ここでは話しません
インデックスがかかるクエリにする .extra: クエリの一部分を生SQLで書く .raw: クエリを生SQLで書く 複雑化しやすいのでキャッシュとの兼ね合いです
ここまでのまとめ ● クエリを眺めてインデックス適応 好みのクエリを走るようにする あとそもそもテーブルの設計ちゃんとしましょう
キャッシュキャッシュキャッシュ キャッシュの種類と使いどころ Redisでのキャッシュ
キャッシュの種類 レスポンスキャッシュ ビューキャッシュ テンプレートキャッシュ オブジェクトキャッシュ 効果的 https://docs.djangoproject.com/en/1.7/topics/cache/
テンプレートキャッシュ {% load cache %} {% cache 500 sidebar %} .. sidebar .. {% endcache %} https://docs.djangoproject.com/en/1.7/topics/cache/
キャッシュの使いどころ ユーザーに依存する表示は基本キャッシュ無理 画面設計段階でどこキャッシュできるか考える
Redisでキャッシュ Redisならではの型を有効利用: * Set型でユニークユーザーの管理 * SortedSet型でランキング http://redis.io/
まとめ ユーザーに近いほどキャッシュは有効 あまり複雑化しないように設計
アプリケーション外 セッションバックエンド変更 静的ファイル圧縮 DBのPrimary/Replica構成
セッションバックエンド変更 Cacheバックエンド Redisのバックエンド
Redisバックエンド $ pip install django-redis-sessions SESSION_ENGINE = 'redis_sessions.session' https://pypi.python.org/pypi/django-redis-sessions
静的ファイル圧縮 django-compressor か django-asset
django-compressor {% load compress %} {% compress css %} <link rel="stylesheet" href="/static/css/one.css" type="text/css"> <style type="text/css">p { border:5px solid green;}</style> <link rel="stylesheet" href="/static/css/two.css" type="text/css"> {% endcompress %} http://django-compressor.readthedocs.org/en/latest/
DBのMaster/Slave django-replicatedが便利 レプリ遅延にも賢く対応
django-replicated $ pip install django-replicated DATABASES = {'default': {...}, 'slave1': {...}} DATABASE_SLAVES = ['slave1'] DATABASE_ROUTERS = ['django_replicated.ReplicationRouter'] 更新が master, 参照が slave になります https://github.com/yandex/django_replicated
レプリ遅延対策 MIDDLEWARE_CLASSES = [ ... 'django_replicated.middleware.ReplicationMiddleware', ] GET, HEADで slave, それ以外で master https://github.com/yandex/django_replicated
レプリ遅延対策 2 from django_replicated.decorators import use_master, use_slave @use_master def my_view(request, ...): # GETで更新&参照するViewなんだぜ。。。 Viewに強制指定 https://github.com/yandex/django_replicated
まとめ ORMの使い方は基本としてマスター インデックス+キャッシュのバランス まんべんなくやっとくのが吉です
Funkloadでパフォーマンス測定 負荷試験ツール (Pythonで書く) セッション付きのシナリオ 静的ファイルの自動取得などリッチ https://funkload.nuxeo.org/
Funkload (テストシナリオ) 1) 一覧画面 2) 詳細画面 3) 編集画面 4) 更新 5) 詳細画面
Funkload (demo) $ fl-run-test test_Wiki.py $ fl-run-bench test_Wiki TestWiki.test_update
Funkload 一覧画面
Funkload 詳細画面
Funkload 編集画面
Funkload 更新
Funkload 詳細画面
Funkload レポートビルド $ fl-run-test test_Wiki.py $ fl-run-bench test_Wiki TestWiki.test_update
レポートその他 2レポート間の差分レポート 複数レポートでのトレンドレポート
耐えるべき負荷は? アクティブユーザー10万人、1日100万PV ピーク時でその3倍として秒間34PV 人間1人5秒/1ページとして同時接続数170 このあたり模索中で良い方法などあれば教えてください
ここまでのまとめ FunkloadはPythonで書ける シナリオでかけるので信頼できる
全体まとめ ORMの扱いなどは当たり前にやっておく 面倒、複雑なものは測定しつつ必要な分やる
感想 カッコいいこと言っても結局 設計とミドルウェアが重要 どううまく使うかを考えましょう
出会い系 オフィスアワー(会議室4/5)に13:15〜 Sprint(3日目)
@hirokiky

Recommended

PPTX
グラフデータベース入門
PDF
Redmine にいろいろ埋め込んでみた
PDF
Redmineとgitの 連携利用事例
PDF
Fess/Elasticsearchを使った業務で使える?全文検索への道
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
ドメイン駆動設計のためのオブジェクト指向入門
PPTX
HashMapとは?
PDF
CTF for ビギナーズ ネットワーク講習資料
PPTX
DockerコンテナでGitを使う
PDF
Rest ful api設計入門
PPTX
研修成果プレゼン資料
PDF
すごい constexpr たのしくレイトレ!
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
Spring fest2020 spring-security
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
PDF
RESTfulとは
PPTX
SharePoint で始める情報共有とそのアプローチ
PDF
オブジェクト指向エクササイズのススメ
PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PPTX
Sharding with sql alchemy
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
PDF
[DL輪読会] Residual Attention Network for Image Classification
PPTX
SQLチューニング入門 入門編
PDF
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
PPTX
ミクシィ 21卒向け Android研修
 
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PPTX
DjangoでさくっとWeb アプリケーション開発をする話
PPTX
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装

More Related Content

PPTX
グラフデータベース入門
PDF
Redmine にいろいろ埋め込んでみた
PDF
Redmineとgitの 連携利用事例
PDF
Fess/Elasticsearchを使った業務で使える?全文検索への道
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
ドメイン駆動設計のためのオブジェクト指向入門
PPTX
HashMapとは?
PDF
CTF for ビギナーズ ネットワーク講習資料
グラフデータベース入門
Redmine にいろいろ埋め込んでみた
Redmineとgitの 連携利用事例
Fess/Elasticsearchを使った業務で使える?全文検索への道
オブジェクト指向プログラミングのためのモデリング入門
ドメイン駆動設計のためのオブジェクト指向入門
HashMapとは?
CTF for ビギナーズ ネットワーク講習資料

What's hot

PPTX
DockerコンテナでGitを使う
PDF
Rest ful api設計入門
PPTX
研修成果プレゼン資料
PDF
すごい constexpr たのしくレイトレ!
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
Spring fest2020 spring-security
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
PDF
RESTfulとは
PPTX
SharePoint で始める情報共有とそのアプローチ
PDF
オブジェクト指向エクササイズのススメ
PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PPTX
Sharding with sql alchemy
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
PDF
[DL輪読会] Residual Attention Network for Image Classification
PPTX
SQLチューニング入門 入門編
PDF
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
PPTX
ミクシィ 21卒向け Android研修
 
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
DockerコンテナでGitを使う
Rest ful api設計入門
研修成果プレゼン資料
すごい constexpr たのしくレイトレ!
Python 機械学習プログラミング データ分析ライブラリー解説編
Spring fest2020 spring-security
Azure Api Management 俺的マニュアル 2020年3月版
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
RESTfulとは
SharePoint で始める情報共有とそのアプローチ
オブジェクト指向エクササイズのススメ
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Sharding with sql alchemy
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
[DL輪読会] Residual Attention Network for Image Classification
SQLチューニング入門 入門編
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
ミクシィ 21卒向け Android研修
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)

Similar to Pycon2014 django performance

PPTX
DjangoでさくっとWeb アプリケーション開発をする話
PPTX
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
KEY
How to django at first
PDF
Django最速デバッグ指南 PyConAPAC 2013
PDF
Djangoのススメ
PDF
Djangoのエントリポイントとアプリケーションの仕組み
PDF
pytestを爆速にする10の方法 @ PyCon JP 2025
PDF
Django boodoo
PDF
Djangoフレームワークの紹介
PPTX
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
DjangoでさくっとWeb アプリケーション開発をする話
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
How to django at first
Django最速デバッグ指南 PyConAPAC 2013
Djangoのススメ
Djangoのエントリポイントとアプリケーションの仕組み
pytestを爆速にする10の方法 @ PyCon JP 2025
Django boodoo
Djangoフレームワークの紹介
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう

More from hirokiky

PDF
簡単な算数でできる文章校正
PDF
エンジニアが起業のアイディアを見つける方法
PDF
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
PDF
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
PDF
営業も広報もいない僕たちが11年間やってきたこと
PPTX
LLoT ランゲージアップデート Python
PDF
How we realized SOA by Python at PyCon JP 2015
PDF
価値を届ける技術 #bpstudy 96
PDF
gargant.dispatch, a flexible dispatcher for WSGI
PDF
軽量のススメ
PDF
django-websettingsの紹介
PDF
pyramid_layoutと僕と、ときどきzope.interface
PDF
My pyhack 1301
PDF
Useful Django 1.4
PDF
使えるDjango1.4
PDF
個人の嗜好を学習し記事を推奨するフィードリーダ
PDF
卒研中間発表資料:個人に最適化したフィードリーダの構築
簡単な算数でできる文章校正
エンジニアが起業のアイディアを見つける方法
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
営業も広報もいない僕たちが11年間やってきたこと
LLoT ランゲージアップデート Python
How we realized SOA by Python at PyCon JP 2015
価値を届ける技術 #bpstudy 96
gargant.dispatch, a flexible dispatcher for WSGI
軽量のススメ
django-websettingsの紹介
pyramid_layoutと僕と、ときどきzope.interface
My pyhack 1301
Useful Django 1.4
使えるDjango1.4
個人の嗜好を学習し記事を推奨するフィードリーダ
卒研中間発表資料:個人に最適化したフィードリーダの構築

Pycon2014 django performance


[8]ページ先頭

©2009-2025 Movatter.jp