我正在尝试构建类似留言板的东西,仅用于学习PHP和MySql。我一直在看一些关于会话系统的教程,其中一个人正在将所有会话存储在同一个表中。所有消息一起存储。这是一个好主意吗?网站增长会不会变慢?我正在考虑将对话存储在文件中,然后有一个表来跟踪这些文件。
(我看到有几个类似的问题已被问到,但我找不到我需要的东西)
答案 0 :(得分:1)
执行此任务的正确方法确实是将所有对话都放在相同的表格中。 (标准化集)但是在它们超过几天(小时,分钟,取决于您的偏好或需求)之后,它们将被移动到存档表(规范化集)中,这将确保性能永远不会太慢。在检索消息时,如果需要存档表中的消息,则使用两个表的视图或并集(如果此方案使用规范化,则为更多)。
答案 1 :(得分:0)
将每条消息存储在新表中将无法很好地扩展,您可以拥有的表数量有限制。每个表还需要2个文件句柄,这会占用大量内存。如果一个主题的一个对话有很多消息,则可能会将数据分解为每个主题的表,或者可能会考虑具有一定数量表的一致哈希环。您也可以在哈希上对消息进行分区,为您提供更多容量。
答案 2 :(得分:0)
您的问题有点模糊,但总的来说,我强烈建议您在证明自己遇到问题时担心性能和可扩展性。
在所有其他条件相同的情况下,现代硬件上的现代数据库可以存储数亿条记录,而不会出现明显的性能问题。
而且,一般而言,减慢数据库速度的事情不是记录的大小,而是访问查询。因此,如果您正在构建一个用于跟踪文件的表,那么您可能会遇到相同的访问问题。因此,昂贵的部分可能会按照降序日期顺序查找所有会话,参与者人数和最后一个条目的日期"。抓住实际的会话线程应该非常快。
我强烈建议使用非规范化的关系模型,直到您可以证明您有性能或可伸缩性问题;然后买一个更大的服务器。然后考虑非规范化。一旦你完成了这项工作,你的面积可能与Facebook相当。