场景: 为各种用户设计一个聊天室一次聊天。所有聊天都需要保存。每当用户登录时,他应该能够看到所有以前的聊天记录。聊天室的数据库设计。需要保存每个聊天
下面是表的一个例子,可用于存储聊天:
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如何设法保存每个聊天。
bigint有什么问题?这给你的范围高达9223372036854775807独特的情况。如果你每天有10亿次聊天,那么在你超过这个范围之前需要90亿年的时间。 – selbie
但我认为有一张大桌子是一个perforance缺点。 – Paddy
@selbie有人告诉我,当表变得太大时,只需将表中的数据转储到文件中,并清空表,并在需要该数据时,只需将文件中的数据加载到表中即可。这就是Google或fb如何保存无限数据。但是我不知道这是否是正确的soln,或者如果它是正确的,那么究竟该如何实现它。 – Paddy