大字符串:文本文件还是SQL DB?

时间:2010-06-16 21:32:46

标签: php sql database

我正在使用PHP编写论坛系统。

我目前正在SQL数据库中存储线程ID,标题,作者,视图和其他属性,然后将线程主体(HTML和BBcode)存储在以线程ID命名的文件夹内的文本文件中。

在实践中,获取数据库值非常简单,然后从文本文件中抓取线程主体,但我想知道这是否是“正确的方法”?我个人没有遇到任何问题,但如果事实证明这是非常低效的,我应该将线体HTML和BBcode存储在数据库中,然后我会改变。

然而,对我来说,在数据库中存储这样一个(非常可能)巨大的多行文本串以及许多不同的字符似乎是错误的 - 我被教导说数据库更多用于短期'值'而不是网站内容。

我只想对此作出明确的答复,因为无论我在哪里做得恰到好处,都会困扰我多年。

有谁知道论坛系统如何存储线程?

感谢您的答案,所以最好将线程内容存储在数据库中,我应该使用哪种字段类型? 回复怎么样?另一个表有线程ID和注释ID,然后是注释体? 我是这个数据库的新手,所以感谢你的帮助。

5 个答案:

答案 0 :(得分:4)

Confluence(商业维基)将整个页面内容存储在一个列中。

在数据库中存储大文本的原因是:

  1. (希望)文本与之关联的值和记录之间没有脱节
  2. 有一些技术,如全文搜索(FTS),可以查找大量文本中的特定字符串
  3. 简化备份&恢复过程

答案 1 :(得分:0)

将线程存储在数据库中是最佳做法,因为这样可以更轻松地进行缩放和搜索。

如果您想继续使用文件来存储内容,我建议您使用GridFS的内容。基本上只是整理文件并将它们存储在NOSQL中。

答案 2 :(得分:0)

我知道DotNetNuke和AspDotNetStorefront使用数据库来存储这些数据。这些不是论坛,而是内容管理系统和具有内容管理功能的购物车。

我还尝试了几个论坛(例如YAF),所有这些论坛都使用了数据库。就个人而言,我坚持使用数据库中的HTML,任何图像/内容文件都应存储在磁盘上,并引用它们在HTML中的位置。

也许是存储在数据库中的最强参数:使用LIKE子句搜索文本字段比在文本文件中搜索强文件要容易得多。

另外,有免费的论坛软件cout那里,我可以问你为什么要从头开始写一个新的?我意识到可能有很好的理由,但万一这是你还没有想到的事情......

<强>加

我的大多数参考文献都是.NET代码。这是一个用PHP编写的开源论坛:http://www.phorum.org/

答案 3 :(得分:0)

这个问题已被接受,但是你应该查看phpbb3(http://www.phpbb.com/)。非常强大的PHP论坛。可以为您节省一些开发时间:D

答案 4 :(得分:0)

我同意其他答案,将所有数据存储在数据库中,简化了扩展,备份/恢复,允许您查询数据等。

如果您关注性能,可以为页面内容实现缓存。我知道PHPBB通过在带有过期时间戳的文本文件中使用序列化数组来实现此目的。也可以使用memcached或其他方式完成。

将数据存储在数据库中可以提供最大的灵活性和便利性,可以通过缓存数据来处理与向最终用户提供数据相关的大多数问题。