우리는 인기있는 사이트가 있다고 가정합니다. 우리는 사용자들 사이에서 메일과 같은 메시징을 구현해야합니다.메일과 같은 메시징을위한 확장 가능한 MySQL 데이터베이스
사용자 (USER_ID)
메시지 (MESSAGE_ID, SENDER_ID (참조 USER_ID), receiver_id (참조 USER_ID), 제목, 본문) : 일반적인 솔루션은이 개 테이블을 사용하는 것입니다.
이 방법이 개 크게 제한
- 모든 사용자의 모든 메시지가 이어지는 하나 개의 테이블에 저장 고부하 및 전반적인 데이터베이스 성능을 감소입니다되어있다.
- 누군가가 여러 사용자에게 동시에 메시지를 보내야하는 경우 메시지는 (recipients_count) 번 복사됩니다.
사용자 (USER_ID)
Sent_messages (sent_id, SENDER_ID (참조 USER_ID), 제목, 본문)
Received_messages :
다른 솔루션은 3 개 테이블을 사용 (sent_id, receiver_id (사용자 ID 참조), 제목, 본문)
received_messages의 제목과 본문이 sent_messages의 해당 필드에서 복사됩니다.
이 방법은 실제로 전송 삭제할 수있는 또 다른
- 로 연결/수신기/발신자에서 그들을 제거하지 않고 메시지를 받았다.
- 메시지는 약 2 배의 공간이 필요합니다.
- 각 테이블에는 약 2 배 적은 양이로드됩니다. 고려 디자인의
- 어느 하나가 높은 부하 및 확장 성을 위해 더 나은 :
그래서 여기에 질문을 간다? (나는 두 번째 것 같아)
- 높은 부하를 처리 할 수있는 또 다른 데이터베이스 디자인이 있습니까? 이게 뭐야? 한계는 무엇입니까?
고마워요!
P. 이 확장 성 문제에 도달하기 전에 사이트가 매우 성공적이어야한다는 것을 이해하지만 필요한 경우 어떻게해야하는지 알고 싶습니다. 현재 내가 다니엘 Vassallo에 의해 제안 된 디자인을 사용하게 될 첫 번째 버전에 대한
UPDATE
.그러나 앞으로 모든 것이 정상이면 디자인은 두 번째 디자인으로 변경 될 것입니다. 그것에 대해 내 걱정을 완화시키기위한 Evert에게 감사드립니다.
감사!나는이 디자인도 고려했다. 실제로이 질문을 게시 한 후 나는 처음 디자인을 으로 바 꾸었습니다. 사용자 (user_id) 메시지 (message_id, sender_id, receiver_id, message_content_id) Message_content (message_content_id, subject, body) 이 두 가지 디자인은 모두 첫 번째 (공간 및 테이블 성능에서). 질문 문은 다음과 같이되어야합니다. 모든 메시지를 한 테이블에 저장하거나 두 메시지를 모두 복사하는 것이 더 좋을까요? 성능에 미치는 영향은 얼마나 중요합니까? –