2012-09-27 3 views
0

암탉 나는 사용자가 서로에게 메시지를 보낼 수있게하는 시스템을 구현하려고 생각했다. 각 수신기에 대한 메시지 복사본을 저장하는 대신 하나의 메시지를 저장하면 저장할 수있는 데이터의 양에 대해 생각했다. 수신기 목록으로은 appengine 데이터 저장소의 카운팅을 참조하는 것이 좋습니다.

실제로 3 개의 목록, 하나의 수신자 목록, 하나의 불린 목록, b [i], receiver [i]가 메시지를 읽었을 때, 삭제되지 않은 모든 사용자를 포함하는 세 번째 목록 메시지. 매일, 나는 cron 작업을 실행하여 빈 사용자 목록으로 메시지를 찾고 제거합니다.

이 모델에 문제가있을 수 있습니까?

+5

메시지가있는 모델은 왜 없는가? 모든 메시지에는 쿼리를 간단하게 (조인하지 않고) 유지하는 수신기 목록이 있습니다. 목록을 업데이트 할 수 있다면 cron 작업은 수신자가 메시지 상태를 변경하는 이유입니다. – voscausa

답변

2

첫 번째 스키마는 구식이며 제대로 작동하지 않는 이메일 아키텍처를 복제하려는 것과 같습니다.

확실히 두 번째 방법이 더 좋습니다.

문제? 코드에 버그가없는 동안 아무도 없습니다. 그러나 응답을 고려해야합니다. 인스턴스가 1M 크기 제한을 초과하지 않는 경우 네 번째 목록으로 충분할 수 있습니다.

그러나 실제로 답변에 대한 분리 된 모델은보다 일관되고 직관적입니다. 이 새 모델에는 readed_by, deleted_by 등의 목록도 있습니다.

크론 작업은 필요하지 않을 수 있습니다. message.deleted_by == message.receivers + message.from 인 경우 사용자가 메시지를 "deteleted"으로 표시 한 후 메시지를 삭제하면됩니다.

관련 문제