yyjn12 2009-06-16 11:02 采纳率: 100%
浏览 658
已采纳

求一个“评论盖楼”的设计思路,系统设计高手进

可以参考一下网易的新闻的评论系统,如
http://comment.news.163.com/news2_bbs/5BRE0I4400012Q9L.html#mainReplies

这种盖楼的效果,数据库和页面展示是怎么做的?
还要方便能删除任何一层的评论。

一种方案是把整个楼层内容存在数据库的一个字段中,可这样一来不好删除了。
如果不这么做的话,查询的时候又很难查。

[b]问题补充:[/b]
没有说清楚,如果不考虑性能的问题,问题似乎变的无比的简单。

但是问题在于,拿新浪的新闻评论说吧,平均每篇新闻的评论数绝对超过1000。
每天发的新闻数量级也在过千。
浏览访问量更是无比的巨大,在这种情况下,评论系统如何设计 ,才会成为一个难题。

我需要做的负载能力当然没有新浪那么强,但是性能指标也是很恐怖的,所以才觉得被一个看似简单的问题给难住了。

  • 写回答

11条回答 默认 最新

  • zhouning13 2009-06-17 12:01
    关注

    [quote]如果性能非常重要,这个方式是很有意义的,
    引用
    最简单、最高效的方式是用文件来存储每一个楼,每个新闻一个楼,使用xml、json等树形结构的文件格式来规范评论和新闻内容。这样每进一个楼只需要访问一个文件,发评论只是创建一个文件,把楼盖高,只是给增加新内容。而新闻列表可以存储在数据库中,也可以用lucene做索引。

    而且新闻列表一定是用lucene做索引。
    新闻首页一定不是直接查询数据库,而是静态化该页面。在后台做一个轮训器,定期更新这个静态页,如果有重大新闻发生,强制更新该页面。
    新闻内容、评价页静态化或者单文件处理,能极大降低服务器压力,毕竟没有数据库操作。每天一个目录,或者每小时一个目录,在文件存储方面就不会对文件系统形成较大压力。[/quote]
    至于数据压力,用数据库的话,可以分拆为每年、每个月再或者每周一个新闻库,只需要每次新增一个库即可。具体的处理方式就要看你用的数据库。
    某些情况下,将当月、重点的新闻单独提炼出来静态页面项目,需要对当月、重点的新闻做大规模的负载均衡,对其他不重要新闻则使用普通的方式。

    新闻内容如果静态化
    优势:可以使用apache甚至lighttpd、nginx服务器,对应的处理压力的能力较强。
    方式:可以用新闻内容本身+新闻模版生成静态的新闻文件,在新闻文件上用ajax异步加载新闻的评论。
    缺点:新闻页面上的其他因素成为开发起来比较麻烦的东西,比如广告、相关文章链

    新闻内容如果不静态化
    缺点:使用的服务器受到你的系统的架构的影响,处理压力的能力受限。
    方式:可以将该新闻的内容、评论等相关因素放在一个xml里面,访问该新闻时仅仅读一个新闻xml,仅一次读IO,性能上不会有较大压力。前端可以再加一个集中式缓存(比如memcached),将读的次数非常多的新闻存在缓存中,进一步减少IO数。
    有点:灵活。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?