Mysql 聊天数据库体系结构:为每个聊天室历史创建一个表是否正确?

Mysql 聊天数据库体系结构:为每个聊天室历史创建一个表是否正确?,mysql,database,chat,database-administration,Mysql,Database,Chat,Database Administration,我用socket.io、Redis和MySQL开发聊天引擎 Redis用于发布/订阅,并为每个聊天室存储最后100条消息。 Mysql是每个聊天室历史记录的存储库 用户可以创建超过20万个聊天室 为每个聊天室创建一个InnoDB表以保持历史记录以实现快速访问和最佳性能是否正确?当然,表应该分布在几个碎片上。创建表的成本非常高,速度也很慢。在MySQL上,这会导致在磁盘上创建文件,并阻止空间优化 动态创建表不是通常的做法。我怀疑MySQL能否在一个数据库中处理20万个表 您最好在消息表中添加roo

我用socket.io、Redis和MySQL开发聊天引擎

Redis用于发布/订阅,并为每个聊天室存储最后100条消息。 Mysql是每个聊天室历史记录的存储库

用户可以创建超过20万个聊天室


为每个聊天室创建一个InnoDB表以保持历史记录以实现快速访问和最佳性能是否正确?当然,表应该分布在几个碎片上。

创建表的成本非常高,速度也很慢。在MySQL上,这会导致在磁盘上创建文件,并阻止空间优化

动态创建表不是通常的做法。我怀疑MySQL能否在一个数据库中处理20万个表


您最好在
消息
表中添加
roomId
列。

动态创建表不是通常的做法。你最好在你的
message
表中添加一个
roomId
列。在每次聊天中创建文件是一个非常糟糕的主意。您永远不应该做这样的事情。@N.B.Dmitry说每个聊天室有一个表,而不是文件。@Destroy表将由daemon创建,它可以从每个聊天室中提取100/1000条消息,然后将其写入db。这是个坏主意吗?我考虑你的答案,但如果我们有15k聊天,每个聊天中包含1000条消息,那么表中就有15000行。@Mxx-你的评论有什么意义?我很难理解这一点,即使在表达自己时有明显的错误,我的意思也是显而易见的。从任何角度来看,为每个聊天创建相同的表(文件)都是一个错误(如果启用了“每个表文件”选项,innodb就会这样做,因此这是一个错误,与实际问题无关)。表将由daemon创建,daemon可以从每个聊天中提取100/1000条消息,然后将其写入db。这是个坏主意吗?我考虑了你们的答案,但如果我们有15k聊天记录,每个记录中包含1000条信息,那么我们的表中将有15000行。