将所有对话存储在 table
Storing all conversations in a table
我正在尝试构建类似于留言板的东西,仅用于学习 PHP 和 MySql。我一直在看一些关于对话系统的教程,其中一个人将所有对话存储在同一个 table 中。所有的消息存储在一起。这是一个好主意吗?它不会随着网站的增长而变慢吗?我正在考虑将对话存储在文件中,然后使用 table 来跟踪这些文件。
(我看到已经有人问过几个类似的问题,但我找不到我真正需要的)
将每条消息存储在一个新的 table 中不会很好地扩展,您可以拥有的 table 的数量是有限的。每个 table 还需要 2 个文件句柄,这会消耗大量内存。如果您对一个主题的一个对话有很多消息,您可以将数据分解为每个主题 table,或者可能考虑具有一定数量 table 的一致哈希环。您还可以在散列上对消息进行分区,从而提供更多容量。
完成这项任务的正确方法确实是让你所有的对话都在同一个 "tables"(标准化集)中,但是在它们超过几天之后(几小时,几分钟取决于你的喜好或需要)它们被移入存档 tables(规范化集),这将确保性能永远不会太慢。在检索消息时,如果需要来自存档 table 的消息,则使用两个 table 的视图或联合(如果此场景使用规范化,则使用更多)。
你的问题有点含糊,但总的来说,我强烈建议你在可以证明你有问题时担心性能和可扩展性。
在所有其他条件相同的情况下,现代硬件上的现代数据库可以存储数亿条记录,而不会出现明显的性能问题。
而且,一般来说,减慢数据库速度的不是记录的大小,而是访问查询。因此,如果您正在构建 "a table to keep track of files",您很可能会遇到相同的访问问题。所以贵的部分很可能是"find all conversations in descending date order, with the number of participants and the date of the last entry"。抓住实际的对话线程应该很快。
我强烈建议使用非规范化的关系模型,直到你能证明你有性能或可扩展性问题;然后购买更大的服务器。然后考虑反规范化。一旦你做到了这一点,你可能就达到了 Facebook 的规模。
我正在尝试构建类似于留言板的东西,仅用于学习 PHP 和 MySql。我一直在看一些关于对话系统的教程,其中一个人将所有对话存储在同一个 table 中。所有的消息存储在一起。这是一个好主意吗?它不会随着网站的增长而变慢吗?我正在考虑将对话存储在文件中,然后使用 table 来跟踪这些文件。
(我看到已经有人问过几个类似的问题,但我找不到我真正需要的)
将每条消息存储在一个新的 table 中不会很好地扩展,您可以拥有的 table 的数量是有限的。每个 table 还需要 2 个文件句柄,这会消耗大量内存。如果您对一个主题的一个对话有很多消息,您可以将数据分解为每个主题 table,或者可能考虑具有一定数量 table 的一致哈希环。您还可以在散列上对消息进行分区,从而提供更多容量。
完成这项任务的正确方法确实是让你所有的对话都在同一个 "tables"(标准化集)中,但是在它们超过几天之后(几小时,几分钟取决于你的喜好或需要)它们被移入存档 tables(规范化集),这将确保性能永远不会太慢。在检索消息时,如果需要来自存档 table 的消息,则使用两个 table 的视图或联合(如果此场景使用规范化,则使用更多)。
你的问题有点含糊,但总的来说,我强烈建议你在可以证明你有问题时担心性能和可扩展性。
在所有其他条件相同的情况下,现代硬件上的现代数据库可以存储数亿条记录,而不会出现明显的性能问题。
而且,一般来说,减慢数据库速度的不是记录的大小,而是访问查询。因此,如果您正在构建 "a table to keep track of files",您很可能会遇到相同的访问问题。所以贵的部分很可能是"find all conversations in descending date order, with the number of participants and the date of the last entry"。抓住实际的对话线程应该很快。
我强烈建议使用非规范化的关系模型,直到你能证明你有性能或可扩展性问题;然后购买更大的服务器。然后考虑反规范化。一旦你做到了这一点,你可能就达到了 Facebook 的规模。