1

嗨,我正在使用 Netty 和 MySQL 制作服务器。

我的服务器的主要任务是记录用户信息和聊天。

我对数据库很陌生,我一直在为聊天编写架构。

我需要记录客户端发送的每个聊天的聊天室号码、发件人 ID、收件人 ID、内容和时间戳。我认为每个聊天室将发送大约 50 个聊天。每天至少会创建 100 个聊天室。

我正在考虑为每个创建的聊天室制作一张桌子。但是,这将每月创建大约 3000 个表。如果我把所有聊天室都记录在一张桌子上,桌子会很长。我猜想从该表中检索记录会占用大量资源。

这部分是我卡住的地方。录制聊天时的正常做法是什么?

4

1 回答 1

2

每个聊天室都有一个数据库行,其中包含消息、用户和房间之间的外键关系应该没问题。

有一张rooms桌子:

id, name, created

一张users表:

id, username, password, created

一张messages表:

id, room_id, user_id, message, time

然后使用一些非常简单的 JOIN 来检索您想要的数据。例如,要检索聊天室中的最新消息:

SELECT u.username, m.message, m.time FROM messages
LEFT JOIN rooms r ON m.room_id = r.id
LEFT JOIN users u ON m.user_id = u.id
WHERE r.name = 'chatroomName'
AND m.time > lastPolledTime

替换lastPolledTime为您上次检查消息的时间,以删除重复项。

于 2013-08-27T09:43:57.703 回答