2

私は自分のサイトを最適化しようとしていますが、この素敵な小さな Django doc: Database Access Optimizationを見つけました。これは、データベース最適化の開始点として、プロファイリングに続いてインデックス作成と適切なフィールドの選択を提案しています。

通常、django のドキュメントは、より経験豊富なプログラマーが「明白」と考えるかもしれないことでさえ、物事をかなりよく説明しています。この場合はそうではありません。インデックス作成についての説明がなかった後、ドキュメントは次のように続けています。

上記の明らかなことを行ったと仮定します。

うーん。待って!インデックス作成とは一体何ですか?

明らかに、私はGoogleを介してインデックス作成が何であるかを理解することができます.私の質問は、スケーラブルなWebサイトを作成するために、データベースに関する限り、何を知る必要がありますか? 特に Django フレームワークについて何を知っておく必要がありますか? 他に知っておくべき「明らかな」ことは何ですか?それらはどこで学べますか?

私はここで方向を指し示したいと思っています。SQL について何もすべてを学ぶ必要はありません。アプリを正しい方法で構築するのに十分な情報を得たいだけです。

前もって感謝します!

4

3 に答える 3

3

他の回答が示唆していることや、このテーマに関して見つけることができる他のすべてのことを読むことをお勧めします。これは、知っておくとよい情報であり、より優れたプログラマーになるためです。

とは言うものの、Djangoや他の同様のフレームワークの良いところの1つは、ほとんどの場合、DBの舞台裏で何が起こっているのかを知る必要がないことです。Djangoは、インデックスを必要とするフィールドにインデックスを自動的に追加します。さらに追加することをお勧めするのは、アプリのユースケースに基づいています。1つの特定のフィールドに基づいて継続的にクエリを実行する場合は、そのフィールドにインデックスが付けられていることを確認する必要があります。すでに存在している可能性がありますが(外部キー、主キーなどの場合)、他のランダムフィールドは通常そうではありません。

データベースクライアント固有のさまざまな最適化もあります。Djangoは、データベースに依存しないことを目標としているため、ここでは多くのことを実行できません。したがって、PostgreSQLやMySQLなどを使用している場合は、それらの特定のクライアントに関する最適化とベストプラクティスについて読んでください。

于 2012-01-11T15:31:01.510 に答える
1

ウィキペディア データベースの設計、およびデータベースの正規化http://en.wikipedia.org/wiki/Database_designhttp://en.wikipedia.org/wiki/Database_normalizationは、インデックス作成に加えて、2 つの非常に重要な概念です。

これらに加えて、選択したデータベースの基本的な理解が必要です。ユーザーを追加し、権限を設定し、データベースを作成できることは、知っておくべき重要なことです。

データのバックアップ方法を学ぶことも重要です。

リストは長くなり続けています。django が処理するデータベースの関係、OneToOne、ManyToMany、ManyToOne にも注意する必要があります。https://docs.djangoproject.com/en/dev/topics/db/models/

JOIN のパフォーマンスへの影響は無視できません。django でモデルのプロパティにアクセスするのはとても簡単ですが、一部の外部キー関係がパフォーマンスに大きな影響を与える可能性があることを理解することも考慮すべき事項です。

これらの基本を理解したら、重要な django アプリを作成するためのかなり良い出発点になるはずです!

于 2012-01-11T00:45:44.837 に答える
1

ウィキペディアには、データベースのインデックスに関する素晴らしい記事があります。それらは本のインデックスに似ています (似ています)。つまり、インデックスを見るだけなので、(コンピューター) はより速く物事を見つけることができます (おそらく非常に悪い例:-)

パフォーマンスに関しては、できることはたくさんありますが、おそらくそれ自体が非常に詳細な主題であり、各 RDBMS に固有のものであるため、それら (django) が詳細に説明することは気が散る/無関係になるでしょう。最善の方法は、特定の RDBMS のパフォーマンスに関するヒントをグーグルで検索することです。インデックス作成、必要なデータのみを返すクエリの制限など、いくつかの一般的なヒントがあります。

主なものの1つは、通常の形式にできるだけ固執し、一般的に、モデルなどをプログラミングする前にデータベースを実際に考慮して、優れた設計であると思います(明らかにそうしているようです)。命名規則も大きなプラスです。明示的は暗黙的よりも優れていることを覚えておいてください:-)

要約すると:

  • リレーショナルモデルなどの基礎を学ぶ・理解する
  • 命名規則を決める
  • おそらくERMツールを使用してデータベースを設計する
  • サロゲート ID を優先
  • 可能な最小サイズの正しいデータ型を使用する
  • インデックスを適切に使用し、過剰なインデックスを作成しない
  • 不必要な/過剰なクエリを避ける
  • 生のパフォーマンスよりもセキュリティと安定性を優先する
  • データベースを稼働させたら、データベースの分析/プロファイリング設定、クエリ、設計などを「調整」します。
  • 定期的なバックアップとアーカイブ - cron
  • ここでたむろ:-)
  • 必要に応じてレプリケーションに進みます (マスター/スレーブ - django もこれを十分にサポートしています)。
  • ハードウェアのアップグレードを検討する
  • あまり夢中にならないで
于 2012-01-11T00:48:29.123 に答える