2010-08-28 92 views
3

在邏輯和數據庫設計和優化(PHP和MySQL)中,CMS和高流量網站(如新聞門戶)之間是否有區別? 我已在計算器中搜索php site scalabilitymemcached佔多數。 是否有MySQL優化技術? (IM找書的這個問題。我已經搜查amazon但我不知道什麼是最好的最佳的選擇。)提前 感謝CMS和高流量網站:PHP和MySQL

+0

你的問題是什麼? – 2010-08-28 19:09:23

+0

一般來說,CMS的優化選項更受限制,但想法是相同的。 – arthurprs 2010-08-28 19:29:23

+0

「高流量」是什麼意思?像Google新聞一樣會使用不同的數據庫架構(沒有MySQL),但這一切都取決於多少數據,多少流量,應用程序的目的等。 – bjudson 2010-08-28 19:29:37

回答

3

這不是很容易回答。 有不同的方法和各種意見,但生病嘗試涵蓋一些常見的情況。但首先是一些基礎知識。

大多數Web應用程序可以在應用程序和數據庫中進行擴展。數據庫的使用可以分爲事務性(oltp)和分析性(olap)

在最好的情況下,您可以啓動一些應用程序服務器並在它們之間分配流量。它們都連接到相同的數據庫服務器並可以獨立工作。 但是,如果您有其他共享數據,會話等,這可能會很困難。 您可以通過在dns中簡單地將多個ip地址添加到您的域名中來完成此操作。 或者您使用負載平衡技術來轉發客戶端執行不同的服務器。

應用程序縮放通常非常容易。數據庫要複雜得多。

要做的第一件事通常是設置一個或多個具有與主數據庫相同數據的複製服務器。它們可以級​​聯,但有1個缺點。他們的數據並不總是最新的。一般不會超過幾秒鐘,但它可能會更負載。但對於許多用例來說,這很好。只顯示信息的大型站點可以將其數據庫複製到某些從屬服務器,設置一些應用程序服務器(在同一臺服務器上運行一個從屬服務器和一個應用程序服務器並讓該應用程序服務器訪問該數據庫從屬服務器)一切都很好。

每個olap查詢都可以指向一個從機。 olap querys是那些不修改任何東西,不需要100%2日期數據。

因此,一切都需要寫入到每個其他服務器從其獲取其副本的數據庫源服務器。例如每篇文章的評論。

如果這個瓶頸太緊了,你可以去兩個方向。

  1. 分片
  2. 主 - 主複製

拆分意味着你決定應用服務器在哪裏存儲和在哪裏獲取你的數據上。例如,每個以a開頭的評論都會到達服務器a,b-> b等等。 這是一個愚蠢的例子,但它基本上是如何。大部分內部ID都涉及到。 如果可能的話,它很好的分割數據,以便它可以完全從服務器agani拉。 在上面的例子中,如果我想要一篇文章的所有評論,我將不得不問eveyr服務器a-z併合並結果。這是無效的但可能的,因爲這些服務器可以被複制。這被稱爲映射(你可以檢查着名的谷歌地圖 - 減少算法,基本上只是這樣做)。

主 - 主複製意味着您將數據寫入不同的主服務器,並且它們彼此同步,並且不會像存儲分片一樣單獨存儲。 如果您的應用程序無法自行決定存儲和獲取數據的位置,則必須執行此操作。 你只需要存儲到任何主服務器,每臺服務器都可以獲得一切,每個人都快樂?不,因爲這涉及到另一個嚴重的問題。 衝突!想象兩個用戶輸入評論。 commentA存儲在serverA上,commentB存儲在serverB上。我們應該使用哪個ID。哪一個先來? 最好的是設計一個應用程序,避免這種情況下,有不同的鍵和東西。但通常發生的是衝突解決,優先次序和內容。 oracle在這個層面上有很多特性,而mysql依然落後。但趨勢正在進入更復雜的數據結構像雲anaway ...

以及我不認爲我解釋得很好,但你應該至少從文字中,可以進一步調查的一些關鍵字。

+1

非常感謝您的很好回答。 你能爲這個問題建議一個資源嗎? – TheNone 2010-08-28 19:59:55

+0

確定我的解釋,特別是當涉及到master master複製非常差時,我會獲取一些好的資源並添加它們 – 2010-08-28 22:13:33

1

當然,也有可以做,以優化您的PHP各種各樣的事情/適用於高流量網站的MySQL Web應用程序。然而,他們中的大多數取決於你的具體情況,你沒有在你的問題中給出。

無論您是否擁有高流量的網站,您的數據庫應該結構良好。如果您使用現成的CMS,這通常很好。除了良好的應用程序體系結構之外,還沒有一種萬能的解決方案。