2010-06-17 82 views
2

參考這篇文章:How to implement tag counting用PHP和mySQL實現標記系統。緩存幫助!

我已經完全實現了建議的3表標記系統。要計算每個標記的文章數,我在標記定義表中使用另一個名爲tagArticleCount的列。 (其他列是tagId,tagText,tagUrl,tagArticleCount)。

如果我實現了對此表的實時編輯,以便每當用戶向文章添加另一個標籤或刪除現有標籤時,tag_definition_table都會更新以更新已添加/已移除標籤的計數器。每次進行任何修改時,這將花費額外的查詢。 (同時,標記和文章的相關鏈接條目將從tagLinkTable中刪除)。

另一種方法是不允許對計數器進行任何實時編輯,而是使用CRON在指定的時間段後更新每個標記的計數器。 這裏是我想討論的問題。這可以看作是緩存數據庫中的文章數量。您能否幫助我找到一種方式,在探索標籤時以及該標籤的文章計數器不是最新的時候,將列表中的文章呈現在列表中。例如: 1.計數器顯示50篇文章,但標籤鏈接表中有55個條目(鏈接標籤和文章)。 2.計數器顯示50篇文章,但實際上標籤鏈接表中有45個條目。

如何處理這兩個例子中給出的scenerios。我打算使用APC來保存這些計數器的緩存。在你的解決方案中考慮它。還討論實時/ CRONNED計數器更新中的性能。

回答

1

這一切都歸結於您的應用程序的需求。對於信息的更新有多關鍵?在大多數情況下,我認爲這是值得額外的查詢有實時數據。

我實際上最近在開發一個系統時面臨同樣的挑戰,但最終決定使用一個字段來存儲標籤數的解決方案將不起作用。這可能是值得考慮我以另一種方式的原因,以防萬一它適用於您的情況:

使用基於字段的方法,您只有一個計數可用。對於我的系統,我希望能夠提供多個級別的深度。因此,以本文中的標籤爲例,我想知道的不僅僅是'php','mysql','best-practices','performance'和'tagging'的總體數量。我也想知道各種組合的數量。

我去的解決方案是使用COUNT(*),如下所示:

SELECT count(*) 
FROM items i, categories c 
WHERE c.Id = i.Id 
AND (c.category IN ('php', 'mysql', 'tagging')) 
GROUP BY i.Id 
HAVING COUNT(i.Id)=3 

爲了減輕這種越來越慢的可能性,我使用AJAX來填充頁面段到其中的相關數據顯示。