2012-01-11 5 views
2

私は自分のサイトを最適化しようとしていますが、これはちょっとしたDjangoのドキュメントです: Database Access Optimizationこれはプロファイリングの後にインデックスを付け、データベース最適化の出発点として適切なフィールドを選択することを示唆しています。高品質のDjangoアプリケーションを作成するためにデータベースについて知っておくべきことは何ですか?

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

あなたはあなたが上記の明白なことを行ったと仮定します。

Uhhh。待つ!一体何がインデックスを作成していますか?

明らかに私は索引付けがGoogleを介していることを理解できます。私の質問は、スケーラブルなWebサイトを作成するためにデータベースの内容が分かるまでは何ですか?私はDjangoフレームワークについて具体的に何を認識すべきですか?私が知るべき他の "明白な"ものは何ですか?どこでそれらを学ぶことができますか?

私はここで方向を指摘しています。私は何かを学ぶ必要はありませんし、SQLについてはすべて、私はちょうど私のアプリを適切な方法を構築するために十分な情報を知りたいです。

ありがとうございます!

答えて

3

を切ってはいけない、私は他の答えが示唆することをすべてし、他のものは何でも被写体に見つけることができますを読むことをお勧めします

  • ハードウェアのアップグレードを検討)あまりにもよくITEそれはすべての良い情報を知っているし、より良いプログラマになりますので。

    Djangoや他の同様のフレームワークに関する素晴らしい点の1つは、ほとんどの場合、DBの中で何が起こっているのかを知る必要がないということです。 Djangoは、必要なフィールドに対してインデックスを自動的に追加します。さらに追加することの奨励は、アプリの使用例に基づいています。 1つの特定のフィールドに基づいて継続的に照会する場合は、そのフィールドが索引付けされていることを確認する必要があります。すでに(外部キー、主キーなどの場合)、他のランダムなフィールドは通常そうではありません。

    データベースクライアント固有のさまざまな最適化もあります。データベースの独立性を保つことが目的なので、Djangoはここではあまり働けません。ですから、PostgreSQL、MySQLなどを使用している場合は、特定のクライアントに関する最適化とベストプラクティスについてお読みください。

  • 1

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

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

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

    リストが長くなっていくうちに、djangoが扱うdb関係、OneToOne、ManyToMany、ManyToOneも認識しておく必要があります。 https://docs.djangoproject.com/en/dev/topics/db/models/

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

    これらのことを基本的に理解してから、非自明なdjangoアプリを作成するための出発点になるはずです。

    1

    Wikipediaは、データベースインデックスについての素敵な記事を持っています。本のインデックスと似ています。つまり、インデックスを見るだけでコンピュータを見つけることができます(おそらく非常に悪い例です。 )

    パフォーマンスに関しては、できるだけ多くのことがあり、おそらくそれ自体が非常に詳細なテーマであり、それぞれのRDBMSに特有のものであり、それらが気にならない/無関係なもの(django)非常に詳細に。最良のことは、実際には特定のRDBMSのGoogleパフォーマンスに関するヒントです。索引付け、必要なデータのみを戻すように問合せを制限するなどの一般的なヒントがいくつかあります。

    Normal Formに可能な限り貼り付けて、実際にあなたのモデルなどをプログラミングする前にデータベースを考慮に入れていることが、大きな特徴の1つです。命名規則は

    を要約すると、明示的、暗黙:-)その後、良いです思い出して、また大きなプラスです:

    • naming convention
    • デザインを決定/学習などrelational model
    • として基本を理解してあなたのデータベースはERMツールを使用している可能性があります
    • 代理IDを使用する
    • 可能な最小サイズの正しいデータ型を使用してください
    • 使用インデックスを適切としないインデックスを超える
    • 避けるに、不要な/あなたがアップし、データベース「チューニング」データベース解析/プロファイリング設定を実行したら
    • は、生のパフォーマンス
    • 上でのセキュリティと安定性を優先照会オーバー、クエリ、デザインなど
    • 定期的にバックアップおよびアーカイブ -
    • :-) cron
    • ハングアウトhere必要な事前の複製(マスタ/スレーブにした場合 - DjangoはこのQUをサポートしています、
    • があまりに
    • それについて
    関連する問題