2011-12-02 9 views
4

今日、私はan article onlineがFacebookのアーキテクチャについて議論していることを発見しました。それを読んでいる間、私はFacebookの規模、3番目の箇条書きの状態を助けセクションソフトウェアの下で気づい:Webサーバー上でデータベースが結合する

FacebookはMySQLを使用しますが、主キーと値の永続的なストレージとして、 移動は、ウェブ上に結合およびロジック最適化は、(Memcachedレイヤーの「反対側」で)より容易に実行できるので、サーバは です。

なぜ複雑な結合をWebサーバーに移動するのですか?結合ロジックを実行するためにデータベースが最適化されていませんか?この方法論は私が今までに学んだことに反しているように見えるので、説明はちょうど私を逃すだけです。

可能であれば、誰かがこれを説明して(例が大いに役立つでしょうか)、これをどうやってやりたいのかという利点(場合によっては例)について、私に良い記事(または2点)を教えてもらえますか?

答えて

3

Facebookについてはわかりませんが、私たちは同様のモデルに従ういくつかのアプリケーションを用意しています。基礎はかなり簡単です。

データベースには膨大な量のデータが含まれています。データベースレベルで結合を実行すると、たとえ小さなサブセットしか返さないとしても、データに対して行ったすべてのクエリが実際には遅くなります。 (親データの100行、親子関係の子データの1000行と言う)

しかし、.NET DataSetオブジェクトを使用して、必要な行を選択してから、DataRelationオブジェクトをDataSetでは、パフォーマンスが大幅に向上します。

これは、なぜ私はどちらかの内部動作についての知識ないんだけど、私は推測を思い切ってできるように私は、RDBMS(私たちの場合は、SQL Serverが)に持っている...、

にお答えすることはできませんファイルに存在するデータを処理します。これらのファイルは非常に大きく、重要なSQL Serverであってもメモリにロードできるだけの容量があるため、ディスクI/Oのペナルティがあります。

データセットの一部をデータセットにロードすると、結合がすべてメモリ内で行われているため、ディスクへのI/Oペナルティが失われます。

パフォーマンスの向上の理由を完全に説明することはできませんが(私の推測が正しいかどうかを知りたい人にはもっと知りたいと思っています)、あるケースでは非常に大量のデータですが、あなたのアプリはそれの小さなサブセットを引き出す必要があります。説明されているモデルに従うことで、パフォーマンスが著しく向上します。私たちは、それがちょうど稲妻のようなアプリに変わるアプリを見てきました。

しかし、不適切に実行された場合、ペナルティが発生します。マシンのRAMに過負荷がかかる場合や不適切な場合やあらゆる状況で実行すると、クラッシュやパフォーマンスの問題が発生します。

関連する問題