2

複雑な django アプリを作成するには、さまざまな場所 (ビュー、テンプレートなど) で ORM オブジェクトを操作する必要があります。ただし、ORM モデルの設計は通常、プロジェクトの開始時に行われます。その段階では、データがどのようにクエリされるか (主にどの ForeignKey が使用されるか) を正確に予測することは非常に困難です。

ORM が作成するクエリの数を最適化できる多くの段階があります。

  • select_related() - 指定された ORM 呼び出しで
  • prefetch_related() - 指定された ORM 呼び出しで
  • モデル ModelManager をオーバーライドして、すべてのクエリに関連するすべてのモデルをプリフェッチする

これを最適化する私の通常の方法は、アプリ全体を作成し、Developer Toolbar を使用して、特定のビューに対して生成されたクエリの数を確認し、それらがどこから来て、どのように回避するかを決定することです (上記のオプションを使用) )。

しかし、この方法はエラーが発生しやすいことがわかりました (たとえば、すべてのビューや他のバックグラウンドの /celery/ メソッドを調べるのを忘れる可能性があります)。ただし、ロジックを作成しているときに最適化を行うのは非効率的であることがわかりました (その時点では ORM 呼び出しではなく、ロジックに集中したいため)。

私の質問は、ORM クエリを最適化するベスト プラクティス (最適な瞬間) は何ですか?

4

1 に答える 1

1

彼らは、時期尚早の最適化が諸悪の根源であると言います。物事が遅くなってきたら、最適化について心配し始める必要があります (最終的には遅くなることがわかっていても)。
実際、Django Debug Toolbar を使用してすべてのビューを手動でチェックすると、より自動化されたテストよりもエラーが発生しやすくなります。
最初のアプローチは、django-timelogを介していくつかのメトリクスを収集してから、遅いビューから開始して DDT を使用することです。

于 2012-10-16T14:08:58.353 に答える