当前位置:  技术问答>java相关

树型论坛的数据库设计和快速算法(对左轻侯的快速算法的一点小改进)(前20名回复给分)

    来源: 互联网  发布时间:2015-10-27

    本文导语:  树型论坛的数据库设计和快速算法(对左轻侯的快速算法的一点小改进) 关键字     树型论坛 算法 表结构 杨小志 2002.10.18 树型论坛(即阶梯式论坛)的实现算法,是一直被讨论的问题。总结起来,一般无非是...

树型论坛的数据库设计和快速算法(对左轻侯的快速算法的一点小改进)

关键字     树型论坛 算法 表结构


杨小志
2002.10.18

树型论坛(即阶梯式论坛)的实现算法,是一直被讨论的问题。总结起来,一般无非是两种:
 第一是递归。这种方式最简单,思路最清楚,但是效率也最低,特别是进行页定位的时候。由于每进行一次递归调用,就必须执行一条数据库查询,使它在大量并发请求时的负载成为灾难性的。因此这种算法一般不实用。
 第二是增加一个排序字段,思路是使用一个特殊设计的字段,例如排序串或者中值排序基数,来实现贴子的插入,在显示的时候,只需要为每一个主贴执行一次查询,将所有得到的记录按序显示即可。这种方式在效率上有了很大提高,但是仍然不很理想,而且使得插入的代码增加了不必要的复杂性,同时还往往导致了支持层次有限制的问题。

有没有一种办法可以简单、高效地实现树型论坛呢?

左轻侯提出一种算法,在显示速度上超过我见的任何类似算法,实现起来也不复杂。
它的思路很简单:就是完全不理会树型结构本身,将整个论坛视为一个简单的顺序表。这样不论任何形式的页面,只需要一条查询即可得到。那么如何实现树型结构呢?方法是添加两个格式化字段,一个记录顺序表的次序,一个记录树的层次,对取得的记录集进行相应格式化,即可得到原汁原味的树型论坛。

我的改进是,
        1。取消ordernum,用messageID的顺序来实现,
        2。在BBSmessage表里面取消threadID的FK,用算法来映射
        3。在BBSthread表里面增设一个endMessageID来为最大MessageID,提高插入数据的速度

 具体实现方法如下:

dbschema:

BBSmessage:            贴子表
    messageID   int                 : 贴子ID
    deep        smallint            : 树的深度,0为主贴,以此类推
    context     varchar 4096        : 正文
    title       varchar 256         : 标题
    clickDate   timestamp           : 阅读时间
    createDate  timestamp           : 创建时间(发布时间)
    clickCnt    smallint            : 人气
    rewards     smallint            : 得分
    userID      int                 : 创建用户ID
    flag        char(1)             : 标志  D=删除状态  A =活跃状态
//  threadID    int                 : 主题ID = messageID/1000

BBSthread:              话题表
    threadID            int         : 话题ID
    forumID             int         : 所属论坛ID
    clickDate           timestamp   : 阅读时间
    createDate          timestamp   : 创建时间

    clickSum            smallint    : 话题人气
    replySum            smallint    : 回复数量
    endMessageID        int         : 尾部ID
//  rootMessageID       int         : 该话题的根贴子ID,可以用threadID*1000得到rootMessageID
//  replyDate           timestamp   : 最新回复时间,因为可以用lastMessageID得到时间
//  title               vchar(20)   : 标题,可以用threadID*1000得到rootMessageID,再取得title

BBSUserInfo:            用户表
    userid              int         : 用户ID
    userNickName        vchar 20    : 昵称
    sex                 char (1)    : 性别
    rewards             smallint    : 得分
    PostCnt             smallint    : 一共发贴数
    icon                smallint    : 图标ID


列出全部话题列表的SQL:
//      主题     人气        创建人  最后更新时间 回复人 删除属性
select title , clickSum , replyDate , userName , deep , replySum,deep,visual
    from
        BBSUserInfo,BBSthread,BBSmessage
    where
        BBSmessage.userid = BBSUserInfo.userid
        and
        BBSmessage.messageID = BBSthread.rootMessageID
        and
        BBSthread.messageID 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我欲做一论坛,但不知论坛文章是存放在数据库里好还是直接放在硬盘里好。
  • 一个论坛要什么样的数据库结构才算完整?
  • http://www.itpub.net 论坛更换数据库,速度更快,欢迎大家前去讨论!
  • http://www.itpub.net 论坛更新数据库,速度更快,欢迎大家前去讨论unix&linux知识!
  • 如何让我们的论坛系统全面的支持各种数据库?? 100分赠送
  • 公告:CSDN AIX论坛有奖话题讨论活动(八)——本期话题:除了数据库应用,还有哪些应用也可以运行于AIX系统之上?(和Linux系统相比较,性能更优)
  • 论坛设计中,关于防止用户发含有HTML贴子破坏论坛结构的方法的讨论!!!
  • 论坛越来越烂了,还是散分走人吧!请大家介绍更好的linux论坛!
  • 论坛越来越烂了,还是散分走人吧!请大家介绍更好的linux论坛! iis7站长之家
  • 申请Linux/Unix社区大论坛下程序开发区小论坛的版主
  • PHP论坛系统 SMF
  • 申请Linux/Unix社区大论坛下系统维护与使用区小论坛的版主
  • Java中文论坛系统 iforums
  • 国内开源的jsp论坛 JEEBBS
  • Node.js论坛系统 NodeBB
  • 论坛系统软件 JSPNote
  • 统计进入论坛的人数问题一侧,与其他问题不同的。高手解答!
  • PHP论坛系统 Vanilla
  • PHP论坛系统 MyBestBB
  • PHP论坛软件 XMB
  • PHP论坛软件 SEO-Board
  • PHP论坛软件 MySmartBB
  • 轻量级PHP论坛系统 PunBB
  • 在LINUX下浏览CSDN论坛无法显示左边的菜单栏的问题,急.....
  • Java论坛软件 Yazd
  • Java论坛软件 JForumFusion


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3