七月 12
- 網站的功能需求
這往往取決於網站提供資訊的方式,例如社群網站有各種討論版的總覽、討論版內有話題列表、然後是討論串的內容等等,當然也總是有最新討論的話題摘錄。
這可以濃縮成二個重點:在導覽內容上循序漸進;在氛圍營造上突顯特色。
表現在功能需求上會變成──
- 資訊的陳列
例如新聞列表、產品列表、討論版總覽、....。它的特色是多樣化,設計方式隨網站、內容甚至使用者愛好不同而異。 - 資訊的展示
例如部落格文章、產品介紹、討論串內容、....。它的特色是差異極大,如部落格文章的多樣、產品介紹的複雜、討論內容的龐大。
- 資訊的陳列
- 資料的更新頻率
從上述的內容中來看更新頻率,可以發現陳列方式的更新頻率大於展示內容。
舉部落格的例子來說,一篇文章寫好後,除非作者去修改內容,否則內容是永遠不變的。然而這篇文章在部落格中陳列時,卻會因為時間、新文章推擠、....各種可能的因素,而改變他出現的地方。
從實體店面來看則是,銷售的商品(內容)不變,但可能排放的位置(陳列)會經常性的調整。所以,陳列資訊的更新頻率是遠高於展示內容的。 - 資源的有效運用
網站的資源不外乎主機運算能力、記憶體等等(頻寬不在討論之列)。
要如何有效運用資源?簡單來說,就是只作絕對必要的運算。
回到資料庫的範疇來看,如果一個網站的文章內容和統計資訊放在一起,那麼資料庫就會變得龐大。而當統計資料在更新時,就必須連同不變的文章內容一起寫回主機,增加了硬碟IO的時間。甚至,如果文章內容更新頻率極低,那麼將內容轉為靜態檔案,就可以減少資料庫佔用的記憶體數量。(當然這必須在記憶體資源和硬碟IO速度上評估最佳作法)
- 更新頻率低、容量大的內容應該被獨立出來。例如部落格的文章內容。
- 決定陳列方式的內容必須被獨立出來,並且善用索引功能來提昇資料取出速度和排列組合的彈性。
- 統計資訊(更新頻率極高者),應該盡可能縮小容量、簡化記錄,並且可以考慮是否將它放在記憶體中執行。(memcache)
- 資料庫中更新頻率越高的檔案越小、常常撈的資料則作了索引,展示的內容則只是透過資料庫來儲存而已。
- 程式在運作時只和部份資料檔有關,陳列時用到建好索引的資料庫,展示時只從資料庫捉出大容量內容,而回寫統資料時則是只和另一個短小的資料庫有關,大幅度減少硬碟IO的時間。
- 資源利用上,佔空間的內容可以考慮轉成靜態網頁、索引資料維持在資料庫中、統計資料可以考慮移植到記憶中處理,大大增加了系統設計的彈性。
因此,提昇資料庫網站效能的不二法門就是精算主機每個運算、每次IO對於網站運作的貢獻,排除各種可能浪費時間、資源的作法。當主機效能發揮到百分之百仍然無法因應時,也只有增加主機才能克服了。
如果您有其他疑問或更好的見解,都歡迎透過迴響來集思廣益喔,謝謝!