8

stackoverflow のような高トラフィック Web サイトのデータベース設計と正規化のベスト プラクティスは何ですか?

正規化されたデータベースを使用して記録を保持するか、正規化された手法を使用するか、または両方を組み合わせて使用​​する必要がありますか?

正規化されたデータベースを記録管理用のメイン データベースとして設計して冗長性を減らし、同時に高速検索のために別の非正規化形式のデータベースを維持することは賢明ですか?

また

メイン データベースは非正規化する必要がありますが、高速なデータベース操作のためにアプリケーション レベルで正規化されたビューを使用する必要がありますか?

または他のアプローチ?

4

6 に答える 6

11

参加によるパフォーマンスへの影響は、過大評価されることがよくあります。Oracle などのデータベース製品は、非常に効率的に結合するように構築されています。結合のパフォーマンスが悪いと見なされることがよくありますが、実際の原因は不十分なデータ モデルまたは不適切なインデックス作成戦略です。また、データの挿入や更新に関して、非正規化されたデータベースのパフォーマンスが非常に悪いことも忘れられています。

留意すべき重要な点は、作成するアプリケーションのタイプです。有名な Web サイトのほとんどは、通常のエンタープライズ アプリケーションとは異なります。これが、Google や Facebook などがリレーショナル データベースを使用しない理由です。最近、このトピックについて多くの議論があり、私はそれについてブログを書いています.

そのため、半構造化されたコンテンツの大量配信を主な目的とする Web サイトを構築している場合、非正規化などのリレーショナル データベースを使用したくないでしょう。しかし、トランザクションの多い Web サイト (オンライン バンクなど) を構築している場合は、データのセキュリティと整合性を保証し、それをうまく機能させる設計が必要です。これは、少なくとも第 3 正規形のリレーショナル データベースを意味します。

于 2009-08-02T08:11:09.633 に答える
5

大量のクエリに必要な結合の数を減らすためにデータベースを非正規化することは、さまざまなスケーリング方法の 1 つです。結合が少なくて済むということは、データベースによる負担が軽減され、ディスクが安価になることを意味します。

とはいえ、途方もない量のトラフィックの場合、適切なリレーショナル データベース パフォーマンスを達成するのは難しい場合があります。これが、多くの大規模サイトがキー値ストア (memcached など) やその他のキャッシュ メカニズムを使用する理由です。

キャパシティ プランニングの技術は非常に優れています。

于 2009-08-01T19:33:43.423 に答える
1

ポッドキャストでスタック オーバーフローの作成者によるこのトピックに関する議論を聞くことができます:
http://itc.conversationsnetwork.org/shows/detail3993.html

于 2010-03-14T01:41:56.797 に答える
1

最初に: hight-traffic の意味を自分で定義します。

  • 1 日あたり 50.000 ページビュー?
  • 1 日あたり 500.000 ページビュー?
  • 1 日あたり 5.000.000 ページビュー?
  • もっと?

次に、これを計算して、1 分あたりおよび 1 秒あたりの予想ピーク ページ ビューを計算します。その後、ページビューごとにクエリするデータについて考えます。データはキャッシュ可能ですか? データの動的性、データのサイズは?

個々の要件を分析し、コードをプログラミングし、負荷テストを行い、最適化します。ほとんどの場合、データベース サーバーをスケール アウトする前に、Web サーバーをスケール アウトする必要があります。

リレーショナル データベースは、完全に最適化されていれば、テーブルを結合するときに驚くほど高速になります。

リレーショナル データベースは、バックエンドとして、キャッシュにデータを入力したり、非正規化されたデータ テーブルに入力したりする場合に、めったにヒットしない可能性があります。非正規化をデフォルトのアプローチにするつもりはありません。

(検索について言及しましたが、全文検索が必要な場合は、たとえば lucene などを調べてください。)

最良のベストプラクティスの答えは間違いなく次のとおりです。それは依存します;-)

于 2009-08-01T20:22:56.320 に答える
0

私が取り組んでいるプロジェクトでは、主要なテーブルの読み取りに対する書き込みの比率が高いと予想されるため、非正規化テーブルルートを選択しました(すべてのユーザーが同じテーブルにアクセスするのではなく、非正規化して設定しました特定のシャードを使用するための各「ユーザーセット」)。あなたは読んで見つけるかもしれません「ビッグサイト」がボリュームにどのように対処するかの例については、http://highscalability.com/-StackOverflowが最近取り上げられました。

于 2009-08-01T20:55:12.293 に答える
0

適切にキャッシュしていなくても問題ありません。

于 2009-08-02T08:14:57.490 に答える