我不知道它們是否合格,但DotNetKicks和Kigg都是開源的digg克隆實現。你可以看看他們如何做標籤和搜索。
我沒有很多的醞釀最佳猜測:)
- 我從來沒有像序列化多個值到一個單一領域的想法,存儲在一個字段,以便分隔字符串不吸引我...可能適用於具有樹的鄰接路徑,但這些路徑總是有序的而標籤不需要。這看起來好像會徵稅LIKE操作員的工作,你可能會找到它們。
所以我最初的看法可能是實體 - > EntityTag < - 標籤。
此方法使得通過標籤查找項目變得非常簡單,通過EntityTag連接回去,稱之爲一天。
您需要一個輔助操作來爲結果集選擇不同的標記。所以a。)拉取結果集,b。)標準化標籤空間。我認爲,不管第一個答案是什麼 - 即使將標籤填充到一個字段中仍然會產生重複標籤(並且您必須反序列化它們才能執行此操作 - 因此更多的工作,另一個完全關係的參數方法)。
還是很容易的。以下是序列化方法效果更好的一個領域。無需加入子標籤,它就在實體中。也就是說,通過兩個表連接拉出0..n標籤對我來說似乎不是太具有挑戰性。如果你正在討論perf的考慮事項,首先將它構建爲規範化,然後通過緩存或denorm進行優化。
另一種選擇是「同時做」。這感覺就像是一種過早的優化,但是您可以採用完全標準化的方法來支持任何以標籤爲中心的操作,並在持續存在序列化後在實體中擁有非標準化版本。如果還沒有完全覆蓋,還有一些工作可能會失去同步,但如果在用例中完全標準化的方式存在真正的限制,那麼兩者都是最好的。
Lucene也很有趣,你可以在索引IIRC中聲明特定的元數據,所以你也可以用這種方式來利用標籤搜索。我的懷疑是,如果你在這條路上走得太遠,那麼你最終會在數據庫中存儲的內容與某個時刻的索引之間斷開連接。我可以贊同Lucene的說法,它的功能非常強大且易於使用 - 我相信.Text將其用於搜索功能,並且在它切換到社區服務器之前支持所有的weblogs.asp.net。如果MSSQL不在圖片/足夠的範圍內,我會堅持使用全文搜索來解決數據庫中的標籤問題。
着upmod這篇文章足以 – Shawn 2009-01-03 21:16:48