将聊天消息存储在数据库中的最佳方法?

我正在构build一个聊天应用程序,我想要完整地logging聊天对话中发送的所有消息。 此刻,我将每条消息存储在一个称为“消息”的表中的单行。 我知道这个表格可能会变得很大,即使是像Hi这样的小信息也会有自己的数据库logging。

任何人都可以推荐一个更可扩展的MySQL解决scheme 我不要求单个消息是可search的,可编辑的或可删除的。 整个对话可以存储在一个巨大的领域?

很想听听你的想法!

将整个历史logging保存在数据库中没有任何问题,他们为这种任务做好准备。

其实你可以在Stack Overflowfind一个聊天示例模式的链接: 例子

如果你仍然担心大小,你可以应用一些优化来分组消息,如添加一个缓冲区到你的应用程序,你只是推一段时间后(如1分钟左右); 这样你就可以避免只有1行消息

如果你可以避免同时写入一个文件的需要,这听起来像你不需要一个数据库来存储聊天消息。

只需将对stream追加到文本文件(每个用户\对话1个文件)。

您将只需要存储用户标识,对话标识和对文件名称的引用。

我想你会发现很难得到一个更简单的可扩展的解决scheme。

您可以使用LOAD_FILE来获取数据: http : LOAD_FILE

如果您有重build对话的要求,则需要在发送的聊天消息(在文件中)旁边添加一个值,以便合并和sorting文件。

您可以为x个会话创build一个数据库,其中包含这些会话的所有消息。 这将允许您每次超过x时添加一个新的数据库(或服务器)。 X是您的基础设施支持的号码对话(取决于您的硬件,…)。

问题仍然是,在同一个数据库上可能会有大量的对话(包含大量的消息)。 例如,您有数据库A和数据库B,每个存储1000个对话。 我有可能在服务器A上比在服务器B上有更多的“大”对话(因为这是用户创build的内容)。 你可以添加一个“master”数据库,该数据库包含一个查询,在这个数据库/服务器上可以find单个对话(或者你有一个从hash / modulo分配数据库的模式)。

也许你可以find处理相同问题的真实世界架构(你可能不是第一个),而且已经解决了。