七月 12
加入書籤 Google Bookmarks HemiDemi Del.icio.us MyShare Baidu Yahoo! My Web Digg technorati furl YouPush udn共享書籤 Fiigo網路分享書籤
一般來說這和資料庫的正規化(normalization)有極大的關聯性,但除了把工作丟給 DBA(DataBase Administrator) 之外,還可以從幾個面向來思考 ───
  1. 網站的功能需求
    這往往取決於網站提供資訊的方式,例如社群網站有各種討論版的總覽、討論版內有話題列表、然後是討論串的內容等等,當然也總是有最新討論的話題摘錄。
    這可以濃縮成二個重點:在導覽內容上循序漸進在氛圍營造上突顯特色
    表現在功能需求上會變成──
    • 資訊的陳列
      例如新聞列表、產品列表、討論版總覽、....。它的特色是多樣化,設計方式隨網站、內容甚至使用者愛好不同而異。
    • 資訊的展示
      例如部落格文章、產品介紹、討論串內容、....。它的特色是差異極大,如部落格文章的多樣、產品介紹的複雜、討論內容的龐大。

  2. 資料的更新頻率
    從上述的內容中來看更新頻率,可以發現陳列方式的更新頻率大於展示內容。
    舉部落格的例子來說,一篇文章寫好後,除非作者去修改內容,否則內容是永遠不變的。然而這篇文章在部落格中陳列時,卻會因為時間、新文章推擠、....各種可能的因素,而改變他出現的地方。
    從實體店面來看則是,銷售的商品(內容)不變,但可能排放的位置(陳列)會經常性的調整。所以,陳列資訊的更新頻率是遠高於展示內容的。
  3. 資源的有效運用
    網站的資源不外乎主機運算能力、記憶體等等(頻寬不在討論之列)。
    要如何有效運用資源?簡單來說,就是只作絕對必要的運算。
    回到資料庫的範疇來看,如果一個網站的文章內容和統計資訊放在一起,那麼資料庫就會變得龐大。而當統計資料在更新時,就必須連同不變的文章內容一起寫回主機,增加了硬碟IO的時間。甚至,如果文章內容更新頻率極低,那麼將內容轉為靜態檔案,就可以減少資料庫佔用的記憶體數量。(當然這必須在記憶體資源和硬碟IO速度上評估最佳作法)
所以,網站效能除了靠資料庫正規化之外,還必須仔細分析資料的應用、更新和資源分配。有幾點必須注意的:
  1. 更新頻率低、容量大的內容應該被獨立出來。例如部落格的文章內容。
  2. 決定陳列方式的內容必須被獨立出來,並且善用索引功能來提昇資料取出速度和排列組合的彈性。
  3. 統計資訊(更新頻率極高者),應該盡可能縮小容量、簡化記錄,並且可以考慮是否將它放在記憶體中執行。(memcache)
修正之後可以發現───
  • 資料庫中更新頻率越高的檔案越小、常常撈的資料則作了索引,展示的內容則只是透過資料庫來儲存而已。
  • 程式在運作時只和部份資料檔有關,陳列時用到建好索引的資料庫,展示時只從資料庫捉出大容量內容,而回寫統資料時則是只和另一個短小的資料庫有關,大幅度減少硬碟IO的時間。
  • 資源利用上,佔空間的內容可以考慮轉成靜態網頁、索引資料維持在資料庫中、統計資料可以考慮移植到記憶中處理,大大增加了系統設計的彈性。

因此,提昇資料庫網站效能的不二法門就是精算主機每個運算、每次IO對於網站運作的貢獻,排除各種可能浪費時間、資源的作法。當主機效能發揮到百分之百仍然無法因應時,也只有增加主機才能克服了。

如果您有其他疑問或更好的見解,都歡迎透過迴響來集思廣益喔,謝謝!