国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

bbs樹形結構的實現方法(三)

2019-11-18 21:44:43
字體:
來源:轉載
供稿:網友
【bigeagle】 于 2000-12-6 14:45:13 加貼在 Joy asp ↑:

下面這種方法是white提出來的。

BBS數據庫結構的浮點數表示法

BBS由一系列的文章組成,每篇文章有一些基本屬性,比如作者,創建時間,文章編號等。其中最為重要的,用以表示樹形結構的是層和序數。層表示位于文章樹的第幾層,最高層的帖子層等于0,其回復的層為1,回復的回復層為2,以此類推。所有層等于0的帖子依時間順序其序數分別為1,2,3.....剩下的帖子的序數滿足以下條件:當所有帖子按照樹形顯示的時候,其序數從大到小排列,沒有例外。

上述方法具體到BBS的實現時,各種操作如下進行:
0、系統維護一個記數器,表示當前使用的整數序數。
1、顯示帖子列表:依序數值的大小倒序簡單地顯示即可,帖子的層可幫助決定退格的多少。2、新加帖子:如果是層0上的帖子,則取下一個整數序數作為該帖子序數;如果是層L1帖子,其序數為N1,則新帖子的層L=L1+1,然后到數據庫中查找序數為N1的帖子的下一條帖子,取其序數,假設為N2,則新帖子的序數N=(N1+N2)/2。3、刪除帖子:假設是刪除層L1,序數為N1的帖子及其所有跟貼,則取層同為L1的下一個帖子
的序數N2,然后刪除所有序數為從N1到N2(不包括N2)的帖子。

上述方法的最大優勢在于顯示帖子列表時不需要進行任何額外的操作,速度異常的快,根本不需要進行任何的遞歸操作。另外就是分頁異常的方便,如果按照每頁固定主題數,那么可以在SQL查詢中僅僅返回當前頁的記錄,可以將對系統的資源利用降低到最小。即使按照每頁固定帖子總數,也可以限制SQL查詢僅僅返回一頁所需的記錄。

下面是一個各種值的直觀表示(為了容易理解,這里按照序數的升序排列,實際實現時將按降序,以讓最后的帖子顯示在最前面):

1.topic1(層=0,序數=1)
  5.Re:topic1(層=1,序數=1.125)
  4.Re:topic1(層=1,序數=1.25)
  3.Re:topic1(層=1,序數=1.5)
    6.Re:Re:topic1(層=2,序數=1.75)
      8.Re:Re:Re:topic1(層=3,序數=1.7875)
    7.Re:Re:topic1(層=2,序數=1.825)
2.topic2(層=0,序數=2)
  10.Re:topic2(層=1,序數=2.5)
9.topic3(層=0,序數=3)
  11.Re:topic3(層=1,序數=3.5)

從上面這個例子中可以看出,隨著層的增加,以及跟帖的增多,其序數的尾數越來越多,因此,這種方法的一個可能的問題是,SQL SERVER中無法表示足夠小的浮點數,以至于將兩條帖子的序數認為是一樣的了。經過實驗知道,SQL SERVER的浮點數有8位,最多能支持一條帖子有1023條回貼。

上述方法的另一個缺點是帖子列表時要做浮點的比較,插入帖子的時候要做浮點的加法和除法,不過除法因為剛好是除以2,所以在浮點運算時只需要較少的操作。但這屬于機器指令級的開銷增長,比起在腳本或VB程序里的遞歸導致WINDOWS系統調用的開銷來要小得多,另外,對系統內存的要求降低到了最小,因此理論上認為是劃算的。

請您就這種方法的可行性進行分析論證,因為我想把它設計成能支持大容量用戶訪問的系統,所以務必經過周密的分析。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泸溪县| 康保县| 高雄县| 洪雅县| 灯塔市| 区。| 宜良县| 乌苏市| 辉南县| 琼海市| 盐池县| 江川县| 茌平县| 杨浦区| 城步| 新蔡县| 伊宁市| 璧山县| 嵊州市| 西盟| 通化市| 丽水市| 鄄城县| 东阿县| 庆云县| 革吉县| 鸡东县| 来宾市| 桓台县| 九寨沟县| 彰武县| 商南县| 庄河市| 股票| 广州市| 谢通门县| 读书| 平乡县| 南投市| 谢通门县| 武隆县|