2011-07-05 5 views
1

사용자 당 게시물의 읽음/읽지 않음 상태를 처리해야합니다. 지금 씁니다. 쉼표로 구분 된 user_ids를 저장하기 위해 비정규 화 된 열을 사용하고 있습니다. 텍스트 열이므로 선택 쿼리의 성능이 저하됩니다.mysql의 메일과 같은 사용자의 읽기/읽지 않음 게시물 처리

이제 사용자 A - 1, 사용자 B - 2, 사용자 C - 4 및 사용자 D - 8 (비트 단위)라고하는 모든 사용자에 대해 상수를 할당하고 해당 조합을 정수 열에 저장합니다. 따라서 사용자 A, C가 정수 열의 값을 읽을 때 (1 + 4) 5가됩니다. 기준에 bitwise 연산자를 사용하여 읽음/읽지 않음 게시물을 쿼리합니다. 문제는 아니오입니다. 조합으로 저장할 수있는 사용자의 수는 제한되어 있습니다. 추가 확장해야 할 경우 다른 사용자를 저장할 다른 BIGINT 열을 추가 할 수 있습니다.

해당 정보를 저장하는 가장 좋은 방법은 무엇입니까? 다음은 내가해야 할 행동입니다.

  1. 새 답글이 게시되면 모든 값을 읽지 않으려면 값을 0으로 업데이트해야합니다.
  2. 사용자가 소식을 읽을 때 열의 상태를 업데이트합니다.
  3. 사용자의 모든 읽지 않은 게시물을 선택하십시오.

편집 : 제 3 행동을 간접적으로 처리하려고합니다. 선택한 열 목록에 해당 정수 열을 추가하고 mysql 조건으로 추가하는 대신 응용 프로그램 코드에서 사용자의 읽기 상태를 찾습니다. 어떤 방법 이건 해결책이 아닙니다. 나는 여전히 좋은 것을 필요로한다.

CREATE TABLE views(
    user_id bigint not null, 
    post_id bigint not null, 
    primary key(user_id,post_id 
) 

을 한 후 바로 사용자의 ID와 기록 및 포스트 ID가 존재하는지 확인하십시오

답변

0

내가이 방법 다만 것,이 같은 테이블을 만듭니다. 또한 이것을 사용하여 조회수를 계산할 수 있습니다.

+0

나는 이것을 이미 시도했지만, 내 경우에는 잘 변형되지 않았다. 100 명의 사용자와 50 만 개의 게시물 몇 가지 기준에 따라 게시물 집합을 검색합니다. – John

+0

멋진 것도 아니고 새싹이 저장 공간을 필요로하지 않기 때문에 날짜를 비교하여 마지막 로그인 이후의 새로운 소식을 표시 할 수 있습니다. – bigblind

+0

감사합니다 프레데릭, 읽기/읽지 않음 상태가 중요한 역할을하므로 휘발성이 될 수 없습니다. – John

관련 문제