2010-08-25 175 views
2

我創建通過Zend Framework的網站,我一直在想這個現在相當一段時間的Meta屬性(關鍵字/描述)......Zend框架:從數據庫

試想一下,你已經創造了最好的文章模塊,並且您通常會爲每篇文章添加meta_keywords/meta_description數據庫條目,以便在視圖呈現時使用管理後端中輸入的數據填充相關元字段。

但是,想象一下你的動態內容較少的情況,到目前爲止,您正在使用HeadMeta()視圖助手向頁面添加元關鍵字/元描述。

我想有一種方法來配置元關鍵字/元描述或一些其他元數據在數據庫中的每頁。我一直在琢磨什麼是最好的解決方案,而不會增加額外的開銷(因爲您需要爲在您的網站上發生的每一個動作執行查詢)

我最初的想法是將元屬性保存在數據庫的索引中,以便爲每個操作快速檢索所有相關數據。我很快意識到通過GET/POST傳遞的參數可能會改變提供的結果,使得結果集不相關。因此,也許我們可以添加參數,但是您可能想同時忽略幾個參數(因爲不需要考慮參數?page = 12 ...)。也許在索引中使用序列化參數添加另一個varchar列?

或者添加整個URL並執行REGEXP選擇而不是常規選擇? (我猜這可能是最慢的解決方案......)

另外請注意,mySQL在大約varchar(200)的UTF-8索引上有限制(因此一個巨大的URL無法保存)

有沒有人想過解決這個問題的好方法?

+0

你想爲每個網址/視圖提供獨特的元數據嗎? – chelmertz 2010-08-25 21:51:51

+0

我認爲它應該是獨一無二的。考慮到元數據實際上表達了實際的url/view的事實。你心裏還有別的東西嗎? – mobius 2010-08-26 07:14:38

回答

1

這聽起來像數據結構是正確的:元關鍵字/描述需要是每篇文章。

最終,您需要從db獲取文章 - 無論是單篇文章還是一組「最佳」文章。在我看來,關鍵是要通過某種服務器端緩存來保持最高性能。

通常,我使用配置了db連接的服務類(see sample),並緩存它檢索的數據。緩存生存期可以設置得足夠短,以至於即使緩存數據也「足夠新鮮」。或者,您可以通過cron清除/填充緩存,以便前端請求始終獲得緩存命中。或者您可以將緩存生命週期設置爲永久,並且只在管理端清除/填充更新中的緩存;這種方法的可行性取決於更新的頻率。

獲得數據後,它將值堵塞到HeadMeta視圖助手中。

+0

好的緩存總是一個可以接受的選項。但真正的問題在於如何在數據庫中保存動態頁面的數據並有效檢索它們。我一直在考慮擴展FrontController Action以在數據庫中執行查詢併爲每個頁面緩存它們...但是,使用GET參數保存uri的最佳方式是什麼(考慮一些並保留一些內容) – mobius 2010-08-28 20:41:40