方案: 为各种用户设计一个聊天室,一次聊天。所有的聊天都需要保存。每当用户登录时,他应该能够看到之前的所有聊天记录。
以下是可用于存储聊天记录的表的一个示例:
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
);
为了按正确的顺序检索聊天,我需要在表中存储聊天记录的主键。所以,如果我使用上面的表来存储聊天,那么我就不能存储超过2147483647个聊天记录。显然,我可以使用一些像unsigned bigint这样具有巨大范围的数据类型,但它仍然会有一些限制。
但是,由于场景说要保存的聊天内容可以是无限的,那么我应该制作什么样的表?我应该制作一些其他主键吗?
请帮我整理解决方案。我想知道Google或Facebook如何设法保存每次聊天。
答案 0 :(得分:0)
如果您没有使用MySQL,那么用户ID的主键和时间戳可能会正常工作。但MySQL的时间戳只能解析为一秒钟。 (请参阅下文,了解影响此答案的最新变化。)有几种方法可以解决这个问题。
如果您打算编写一个显示按时间戳排序的行的查询,那么所有应用程序代码都需要是服务器端代码。
<强>后来强>
当前版本的MySQL支持fractional seconds in timestamps。