2011-12-02 175 views
4

今天我發現an article online討論Facebook的架構(雖然它有點過時)。在閱讀它,我注意到部分軟件,幫助Facebook的規模,第三點的狀態下:數據庫加入網絡服務器

的Facebook使用MySQL,但主要是作爲一個鍵 - 值持久存儲, 移動連接和邏輯到網上服務器,因爲優化是 更容易執行那裏(在Memcached層的「另一邊」)。

爲什麼要將複雜的連接移動到Web服務器?不是數據庫優化來執行連接邏輯?這種方法似乎與我到目前爲止所瞭解到的情況相反,所以也許這種解釋只是讓我不知所措。

如果可能的話,有人可以解釋這個(一個例子會有很大的幫助),或者指出我有一個好的文章(或兩個)來說明你如何以及爲什麼要這樣做的好處(也可能是例子)?

回答

3

我不確定Facebook,但我們有幾個應用程序,我們遵循類似的模型。基礎非常簡單。

該數據庫包含大量的數據。在數據庫級別執行連接確實會減慢我們對數據的任何查詢,即使我們只返回一小部分子集。 (例如說說100行的父數據和1000行的父子數據中的子數據)例如

但是,使用.NET DataSet對象,我們選擇我們需要的行,然後創建DataRelation對象DataSet,我們看到了性能的戲劇性提升。

我不能回答這是爲什麼,因爲我不諳熟無論是內部工作,但我可以大膽猜測......

的RDBMS(在本例中SQL Server)的有處理存在於文件中的數據。這些文件非常大,只有很多文件可以加載到內存中,即使在我們沉重的SQL Server上也是如此,所以它會損壞磁盤I/O。

當我們將它的一小部分加載到數據集中時,連接完全在內存中發生,所以我們失去了進入磁盤的I/O損失。儘管我無法完全解釋性能提升的原因(並且我希望讓更多的知識淵博的人告訴我,如果我的猜測是正確的),我可以告訴你,在某些情況下,非常大量的數據,但是你的應用只需要拉一小部分數據,通過遵循所描述的模型,在性能上有明顯的啓動。我們已經看到它將應用程序轉變爲閃電般快速的應用程序。

但是,如果做得不當,會有一個懲罰 - 如果你超負荷機器的RAM,但是做得不恰當或者在任何情況下,那麼你也會有崩潰或性能問題。

相關問題