mysql 통신 데이터베이스에 채팅 메시지를 저장하는 가장 좋은 방법은 무엇입니까?




레디 스 통신 (3)

채팅 앱을 만들고 있는데 채팅 대화에서 보낸 모든 메시지의 전체 기록을 원합니다. 지금은 각 메시지를 '메시지'라는 테이블에 단일 행으로 저장하고 있습니다. 나는 'Hi'와 같은 작은 메시지라도 자체 데이터베이스 레코드를 갖기 때문에이 테이블이 커질 수 있음을 알고 있습니다.

누구든지 확장 성이 뛰어난 MySQL 솔루션을 추천 할 수 있습니까? 개별 메시지를 검색 가능하거나 편집 가능하거나 삭제 가능하도록 요구하지 않습니다. 전체 대화가 하나의 거대한 분야에 저장 될 수 있습니까?

당신의 아이디어를 듣고 싶습니다!


이 대화의 모든 메시지가 포함 된 x 대화를위한 데이터베이스를 만들 수 있습니다. 이렇게하면 x가 초과 할 때마다 새 데이터베이스 (또는 서버)를 추가 할 수 있습니다. X는 인프라에 따라 지원되는 숫자입니다 (하드웨어에 따라 ...).

문제는 여전히 동일 데이터베이스에 큰 대화를 할 수 있다는 것입니다. 예를 들어 데이터베이스 A와 데이터베이스 B가 각각 저장합니다 (예 : 1000 개의 대화). 서버 B보다 서버 A에서 훨씬 더 큰 "대화"가 가능할 수 있습니다 (사용자가 작성한 컨텐츠이기 때문에). 조회가 포함 된 "마스터"데이터베이스를 추가 할 수 있습니다. 데이터베이스 / 서버에서 단일 대화를 찾을 수 있습니다 (또는 해시 / 모듈 또는 기타에서 데이터베이스를 할당하는 스키마가 있음).

어쩌면 당신은 같은 문제를 다루는 실세계 아키텍처를 발견 할 수 있습니다. (당신이 처음이 아닐 수도 있습니다.) 그리고 이미 해결되었습니다.


단일 파일에 대한 동시 기록의 필요성을 피할 수 있다면 채팅 메시지를 저장할 데이터베이스가 필요하지 않은 것처럼 들립니다.

대화를 텍스트 파일에 추가하기 만하면됩니다 (사용자 당 \ 1 대화). 디렉토리 / 파일 구조를 가지고있다.

다음은 파일 구조를 단순화 한 것입니다.

chat-1-bob.txt
        201101011029, hi
        201101011030, fine thanks.

chat-1-jen.txt
        201101011030, how are you?
        201101011035, have you spoken to bill recently?

chat-2-bob.txt
        201101021200, hi
        201101021222, about 12:22
chat-2-bill.txt
        201101021201, Hey Bob,
        201101021203, what time do you call this?

그런 다음 사용자 ID, 대화 ID (guid?) 및 파일 이름에 대한 참조 만 저장하면됩니다.

보다 단순한 확장 가능한 솔루션을 얻는 것이 어려울 것입니다.

LOAD_FILE 을 사용하여 너무 많은 데이터를 가져올 수 있습니다. http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

대화를 다시 작성해야한다면 파일을 병합하고 정렬 할 수 있도록 보낸 채팅 메시지와 함께 값 (날짜 시간)을 입력해야합니다. 그러나이 시점에서는 아마도 좋은 생각 일 것입니다 데이터베이스 사용을 고려하십시오.


전체 역사를 데이터베이스에 저장하는 데는 아무런 문제가 없습니다. 이러한 종류의 작업을 위해 준비되었습니다.

실제로 스택 오버플로에서 채팅 예제 스키마에 대한 링크를 찾을 수 있습니다 : example

여전히 크기에 대해 걱정이된다면 메시지를 그룹화하는 데 최적화를 적용 할 수 있습니다 (예 : 1 분 정도의 시간이 지나면 버퍼를 추가하는 등). 그렇게하면 단 한 줄의 메시지 만 남기는 것을 피할 수 있습니다.





chat