시나리오 : 한 번에 여러 명의 사용자가 채팅 할 수 있도록 채팅방을 디자인하십시오. 모든 채팅 내용을 저장해야합니다. 사용자가 로그인 할 때마다 그는 모든 이전 채팅을 볼 수 있어야합니다. 적절한 순서 채팅 입수대화방을위한 데이터베이스 디자인. 모든 채팅 내용을 저장해야합니다.
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
);
, 나 I가 채팅을 기억하고있는 테이블의 일부 기본 키가 필요
여기에 채팅을 저장하는 데 사용할 수있는 테이블의 일 예이다. 그래서 위의 표를 사용하여 채팅을 저장하면 2147483647 개 이상의 채팅을 저장할 수 없습니다. 분명히, 나는 unsigned bigint와 같은 거대한 범위를 가진 어떤 데이터 형을 사용할 수 있지만, 여전히 약간의 제한이있을 것이다.
시나리오에 따르면 저장해야 할 채팅이 무한 할 수 있으므로 어떤 테이블을 만들어야합니까? 다른 기본 키를 만들어야합니까?
솔루션을 분류하는 데 도움을주십시오. 구글이나 페이스 북이 어떻게 모든 채팅을 저장할 수 있는지 궁금합니다.
bigint의 문제점은 무엇입니까? 최대 9223372036854775807 개의 고유 한 인스턴스 범위를 제공합니다. 하루에 10 억 개의 채팅이 있다면, 그 범위를 초과하기까지 90 억 년이 걸릴 것입니다. – selbie
하지만 커다란 테이블을 가지고 있으면 퍼포먼스 단점이라고 생각합니다. – Paddy
@selbie 누군가가 테이블이 너무 커지면 테이블의 데이터를 파일로 덤프하고 테이블을 비우고 그 데이터가 필요할 때 파일의 데이터를 테이블로로드해야한다고 말했습니다. 이것이 Google 또는 fb가 무한 데이터를 저장하는 방법입니다. 그러나 이것이 올바른 해결책인지 또는 올바른지 정확히 알지 못한다. – Paddy