聊天室的数据库设计.需要保存每个聊天

Pad*_*ddy 5 mysql database-design

场景: 为各种用户设计聊天室,以便一次聊天.所有的聊天都需要保存.每当用户登录时,他应该能够看到之前的所有聊天记录.

以下是可用于存储聊天的表的一个示例:

CREATE TABLE chat 
(
  chat_id int NOT NULL auto_increment,
  posted_on datetime NOT NULL,
  userid int NOT NULL,
  message text NOT NULL,
  PRIMARY KEY (chat_id),
  FOREIGN KEY(userid) references users(userid) on update cascade on delete cascade
);
Run Code Online (Sandbox Code Playgroud)

为了以正确的顺序检索聊天,我需要在表中存储聊天的一些主键.所以,如果我使用上面的表来存储聊天,那么我就不能存储超过2147483647个聊天记录.显然,我可以使用一些像unsigned bigint这样具有巨大范围的数据类型,但它仍然会有一些限制.

但是,由于情景说要保存的聊天内容可以是无限的,那么我应该制作什么样的表格呢?我应该制作一些其他主键吗?

请帮我整理解决方案.我想知道谷歌或Facebook如何设法保存每个聊天.

Mik*_*ll' 0

如果您没有使用 MySQL,则用户 ID 的主键和时间戳可能可以正常工作。但MySQL的时间戳只能解析为一秒。(请参阅下文了解影响此答案的最新更改。)有几种方法可以解决这个问题。

  • 让应用程序代码通过等待一秒钟然后重新提交来处理主键违规。
  • 让应用程序代码提供更高精度的时间戳,并将其存储为可排序的 CHAR(n),例如“2011-01-01 03:45:46.987”。
  • 切换到支持微秒时间戳的 dbms。

如果您打算编写一个查询来显示按时间戳排序的行,那么所有应用程序代码都需要是服务器端代码。

之后

当前版本的 MySQL 支持时间戳中的小数秒