OMG,到底在尋找什么..................
          (構造一個完美的J2EE系統(tǒng)所需要的完整知識體系)
          posts - 198,  comments - 37,  trackbacks - 0
          原帖地址:http://www.javaeye.com/topic/41018
          ————————————————————————————————

          Tag已經(jīng)成為Blog的一個事實標準之一,但是對于Tag的設計和實現(xiàn)方面很少找到相關資料:(

          1.Tag是否需要單獨建表統(tǒng)計管理?那么增加、更新和刪除如何處理?
          2.Tag的關聯(lián)性如何實現(xiàn)?
          ————————————————————————————————————————


          一種是用一個tag表和一個tag與其它表的關聯(lián)表來實現(xiàn),實現(xiàn)方式稍復雜些,你要記錄關聯(lián)的類型和ID。增加刪除就是處理這個關聯(lián)的表,更新可以分解為增加和刪除。

          另一種是利用類似lucene的引擎,把tag丟進去就可以了,實際上我沒用過它,不過簡單測試過在rails項目里用ferret,它沒有中文分詞,搜索中文不太好用,但對于tag正合適,只要用一個字段把tag用空格分開再放進去,只索引這一個字段。增加、刪除、更新其實只需要更新tags字段,ferret索引也更新一下就可以了。

          關聯(lián)性是個復雜點的問題,以前問了別人一個SQL語句,不過測試性能一般。沒想到好主意,不過暫時也用不上它。

          ————————————————————————————————————————————

          1.使用數(shù)據(jù)庫來存儲,總覺得很難處理,但是方便統(tǒng)計和檢索,再更新上效率低下,另外但數(shù)據(jù)量非常大的時候,性能會下降很快。

          2.使用Lucene是一個非常好的建議,但是我希望對Tag的使用上做不少細化的工作,如“Java”這個Tag在我的博客、我所在的圈子、網(wǎng)站等各級的統(tǒng)計,不知道Lucence是否支持?

          3.JavaEye使用了Tag技術,不知道如何實現(xiàn)的?


          _____________________________________________________________________________

          1.使用數(shù)據(jù)庫來存儲,總覺得很難處理,但是方便統(tǒng)計和檢索,再更新上效率低下,另外但數(shù)據(jù)量非常大的時候,性能會下降很快。

          2.使用Lucene是一個非常好的建議,但是我希望對Tag的使用上做不少細化的工作,如“Java”這個Tag在我的博客、我所在的圈子、網(wǎng)站等各級的統(tǒng)計,不知道Lucence是否支持?

          3.JavaEye使用了Tag技術,不知道如何實現(xiàn)的?


          ————————————————————————————————————————————

          frank_cn 寫道
          1.使用數(shù)據(jù)庫來存儲,總覺得很難處理,但是方便統(tǒng)計和檢索,再更新上效率低下,另外但數(shù)據(jù)量非常大的時候,性能會下降很快。


          這要看如何設計以及如何檢索,如果是搜索某個tag對應的記錄,其實是非常快的,tag關聯(lián)表用復合主鍵,把tag_id作復合主鍵的第1個,檢索是非常快的,因為用了主鍵索引。

          frank_cn 寫道

          2.使用Lucene是一個非常好的建議,但是我希望對Tag的使用上做不少細化的工作,如“Java”這個Tag在我的博客、我所在的圈子、網(wǎng)站等各級的統(tǒng)計,不知道Lucence是否支持?


          如果是統(tǒng)計這個,用數(shù)據(jù)庫效率也可以很高,加上適當?shù)木彺妫ū热鐭衢Ttag緩存起來)。lucence不清楚。

          我當時有點興趣的是如何查詢“購買了某書的人也購買了XX書”,這和標簽關聯(lián)有點相似,可以做一些關聯(lián)性內(nèi)容的推送。以前在CSDN問了一個,有人回復我一個,可以查詢“購買了C++編程語言書的人也購買了XX書”,列出前2本:

          代碼
          1. CREATE?TABLE?store?( ??
          2. ?bookname?VARCHAR(255)?NOT?NULL, ??
          3. ?username?VARCHAR(255)?NOT?NULL, ??
          4. ?PRIMARY?KEY?(bookname,?username) ??
          5. ); ??
          6. ??
          7. INSERT?INTO?store?(bookname,?username)?VALUES?('C++編程語言',?'a'); ??
          8. INSERT?INTO?store?(bookname,?username)?VALUES?('C++對象模型',?'a'); ??
          9. INSERT?INTO?store?(bookname,?username)?VALUES?('C++24小時通',?'a'); ??
          10. INSERT?INTO?store?(bookname,?username)?VALUES?('C++速成',?'a'); ??
          11. ??
          12. INSERT?INTO?store?(bookname,?username)?VALUES?('C++編程語言',?'b'); ??
          13. INSERT?INTO?store?(bookname,?username)?VALUES?('C++對象模型',?'b'); ??
          14. INSERT?INTO?store?(bookname,?username)?VALUES?('C++24小時通',?'b'); ??
          15. INSERT?INTO?store?(bookname,?username)?VALUES?('C++速成',?'b'); ??
          16. ??
          17. INSERT?INTO?store?(bookname,?username)?VALUES?('C++編程語言',?'c'); ??
          18. INSERT?INTO?store?(bookname,?username)?VALUES?('C++對象模型',?'c'); ??
          19. INSERT?INTO?store?(bookname,?username)?VALUES?('C++24小時通',?'c'); ??
          20. INSERT?INTO?store?(bookname,?username)?VALUES?('C++速成',?'c'); ??
          21. ??
          22. INSERT?INTO?store?(bookname,?username)?VALUES?('C++編程語言',?'d'); ??
          23. INSERT?INTO?store?(bookname,?username)?VALUES?('C++24小時通',?'d'); ??
          24. INSERT?INTO?store?(bookname,?username)?VALUES?('C++速成',?'d'); ??
          25. ??
          26. INSERT?INTO?store?(bookname,?username)?VALUES?('C++編程語言',?'e'); ??
          27. INSERT?INTO?store?(bookname,?username)?VALUES?('C++速成',?'e'); ??
          28. ??
          29. ? ??
          30. ??
          31. select?bookname,?count(*)?from?store?where?username?in ??
          32. ( ??
          33. ?select?username?from?store?where?bookname?=?'C++編程語言' ??
          34. ) ??
          35. and?bookname?<>?'C++編程語言' ??
          36. group?by?bookname ??
          37. having?count(*)?>=?0??
          38. order?by?count(*)?desc ??
          39. limit?2; ??


          效率不太高。我覺得tag最應該有的作用就是這個了。

          ————————————————————————————————————————————

          一張tag表存儲tag到文章的對應關系。
          然后每個文章還有個tagtxt字段,各個tag用空格進行分隔。
          在增加/修改文章的時候,對tag進行一次關聯(lián),并增加新增的tag。

          現(xiàn)在有些問題。tag名字的修改,得修改所有的tagtxt字段。不過修改tag名字的功能應當不是很必要。

          posted on 2007-01-14 02:30 OMG 閱讀(875) 評論(0)  編輯  收藏 所屬分類: Ajax/RSS/Tag

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經(jīng)典網(wǎng)站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乌恰县| 新干县| 安乡县| 清流县| 区。| 中超| 新巴尔虎左旗| 伊川县| 边坝县| 彭阳县| 城口县| 沅江市| 青冈县| 乾安县| 灵寿县| 万源市| 云霄县| 东光县| 凯里市| 乌审旗| 吉安市| 南投市| 萝北县| 华蓥市| 通州市| 凤冈县| 乌鲁木齐县| 庆元县| 广河县| 桓仁| 镇沅| 涟水县| 伊春市| 建瓯市| 永州市| 长兴县| 阿巴嘎旗| 安国市| 喀什市| 汽车| 阳东县|