西西河

主题:存储西河发帖、跟帖的方式 -- 华夏英雄

共:💬16 🌺3 新:
全看树展主题 · 分页首页 上页
/ 2
下页 末页
家园 存储西河发帖、跟帖的方式

最近想建一个个人网站,有类似西河这样的发贴、跟贴功能,也有博客那样的功能。想请教一下,通常情况下如何存储这些帖子呢?是否只能用数据库?多谢!

家园 当然不是只能用数据库

也可以比如直接用file system。但是数据库查询起来比较方便,象index,lock之类的都已经搞好了,何乐而不为。

要储存象西西河论坛这样树状论坛的数据,其实就要多一个数据:父帖id,也就是被回复帖子的id。这样显示某个主题时,只要将此主题所有帖子查出,然后根据每个帖子的父帖id,就可以很容易重构整个主题的回帖树了。

家园 谢谢你的回复。

我也认为可以通过加一个父帖id来管理。但是,如何从一个父帖找到一个子帖呢?子帖们又如何排序呢?

以前学“二叉tree”的数据结构时,可以通过“左儿子”和“右儿子”来排序,但现在是多个儿子的情况似乎不太可能。

另外一个问题,如果数据很多的情况,数据库和file system,那个的效率更高,更容易实现呢?

家园 用WordPress吧。
家园 以时间排序

跟帖的时间一定晚于父帖,所以当你从数据库中查询某主题的所有帖子时,令结果以时间早晚排列。然后从头到尾扫描所有结果,如果发现某帖有父帖,就将其插入父帖后。在以时间排列的情况下,父帖一定先于子帖被扫描,所以不存在扫描到子帖时还没扫描到父帖的情况,整个过程只要扫描一遍即可,扫描时可以顺便算出需要缩进的层次,每个子帖的缩进层次是父帖的层次加1。

至于“数据很多的情况”,一般无需考虑,普通论坛再怎么多,也不会多到哪里去,最多把附件从数据库分离开来,直接存在file system里。

家园 要考虑的问题很多阿,建议是数据库加文件系统

把帖子内容保存在文件系统中,把帖子内容文件路径保存到数据库中。

另外,你需要考虑一下,是否提供帖子内容的搜索。单纯的数据库全文搜索效率很低,比较好的方法是使用luence之类的搜索引擎。

如果,另外如果考虑到论坛的水平扩展,那么还需要考虑文件系统被多个web服务器共享,,,,

家园 确实需要添加内容搜索的功能

但第一次听说luence。如果我使用第三方的hosting server和java servlet等技术,不知道还能否luence。刚看了一下luence,感觉是java based的,应该可以在第三方的hosting server (Linux + Java)中使用。不知道感觉是否正确。

你说到“需要考虑文件系统被多个web服务器共享”,我觉得这本质上是个权限的设定问题。不知道你是否也是这个意思,还是说有一些文件格式不能被某些web服务器识别,或者不能够被某些browsers支持?

烦指教!

家园 这个是好主意

你所说的file system具体是什么呢?是否就是windows 或者linux这些文件系统?

另外,我看到有些回帖内容中可以加上“笑脸”等icon,也可以添加附件。我觉得附件可以放在文件系统中,但那些icon怎么处理啊?难道把.img/.jpeg文件放在文件系统中,再把它们的文件名链接到帖子的内容中?

家园 我说的file system就是你所说的文件系统

对于笑脸等的处理,一般也是按照你所说的处理,有时以比如[:em63]这样的字符串代替,表示比如第63个表情符号,在产生html时把这样的字符串代换为<img src=....>。

论坛程序还是有一些复杂的,象我这样说是没办法说清楚的,里面有些你也许一时想不到的关键地方,比如说如何防止SQL injection黑客手段等等的东西。你最好去具体读某个比较成熟的论坛程序的源码,这样就能体会到各个细节部分。其实一般谁自己要架一个论坛也不会自己去写,都是找个成熟的论坛程序直接用了,西西河是很特别的。

家园 谢谢回复。能否推荐些open source的、成熟的论坛
家园 你对luence的理解是对的。

luence是个java开源项目,可以内嵌到其他java应用中使用。

至于"文件系统被多个web服务器共享",不是权限问题。举个例子,你有两台web服务器,用户的http访问在两台web服务器间分担。系统中有个用户上传头像的功能,某个用户上传头像的时候,访问web1,头像文件就保存在web1的某个目录中;这样,如果下次用户访问被分配到了web2机器上,因为这个头像文件在web1上,那么web2访问不到这个用户的头像,就出问题了。

解决这种问题的最简单的方法是使用mount在不同web机器上共享目录。

另外作论坛,不建议用java,php有个很成熟的论坛框架discuz,你可以考虑一下。http://www.comsenz.com/products/discuz

家园 你好像要弄一个拿Java写的论坛?

非常遗憾的是,目前流行的论坛程序绝大部分是PHP的,比如vBulletin(这个不是开源的,但是源码到处都下载得到),PHPWind,Discuz!等等。即便你还是希望自己写一个Java的,也应该看看别人写的至少一个程序,最好是流行的,有许多人在用的,这样才能知道会遇到什么实际问题,该怎么样解决。

家园 非常感谢!
家园 感谢!
  • -- 系统屏蔽 --。
全看树展主题 · 分页首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河