2012-03-09 5 views
1

나는 의사 소셜 앱을 사용 중입니다.
우리는 3 개 테이블이 :타임 라인 처리 (MySQL)

Users: _id_, username, password, email 
Movies: _id_, title, synopsis 
Followers: __(#user_id1, #user_id2)__, timestamp 
U_Movies: __(#user_id, #movie_id)__, rating, timestamp 

우리는 최근의 활동, 우리의 응용 프로그램, 간단한 타임 라인에 타임 라인을 추가합니다. 사용자 정의 타임 라인 (메시지 없음), 활동 만 원하지 않습니다.

이 타임 라인을 "만드는"가장 좋은 방법은 무엇입니까?
INSERT INTO followersU_Movies이있을 때 INSERT INTO timeline을 수행하는 모든 활동을 기록한 "타임 라인"테이블을 만들거나 MySQL과 JOIN ON 추종자 활동을 얻는 것이 좋을까요? 많은 항목과 사용자가 많은 경우 무거움) 및 다른 조언이 필요합니까?

도움 주셔서 감사합니다.

답변

1

나는 비슷한 일을 최근에했습니다. 가장 먼저 생각한 것이 가장 좋습니다 (트리거 또는 다른 삽입물을 사용하여 새 테이블에 데이터 추가)

테이블에서 수행하지 않고 업데이트하거나 삭제한다고 가정하면 규모가 상당히 커야합니다. 날짜 범위에 따라 MySQL의 테이블을 분할 할 수도 있습니다. 이것은 몇 년 후에 성능을 유지할 것입니다. (이 첫 번째 버전은 4 년 동안 140million 행을 가지고 있으며 여전히 빠릅니다)

편집 - 변경 사항 감지.

TRIGGER 경로 - Before update을 사용하면 열을 비교 한 다음 타임 라인에 삽입하여 이전 변경 사항을 제공 할 수 있습니다.

CREATE TRIGGER upd_check BEFORE UPDATE ON account 
    FOR EACH ROW 
    BEGIN 
    IF NEW.rating != OLD.rating THEN 
     INSERT INTO timeline .. 
    END IF; 
END; 
+0

트리거 (I 발견되는) 최고 (및/또는 2 개 삽입) 될 것으로 보인다 좋은 생각 일 것 같다,하지만 것은 내가 변화를 추적해야한다는 것입니다. 예를 들어 우리는 "등급"뿐만 아니라 "리뷰"도 가지고 있지 않습니다. 누군가 데이터를 변경하고자 할 때 클라이언트가 "rating = INT & review = TEXT"를 보내면 DB를 업데이트 할 것입니다. 동일한 데이터. 어떤 collumn이 업데이트되었는지 알 수있는 방법이 있습니까? 그런 다음 타임 라인에 유형, 새로운 등급/리뷰를 삽입합니다 ... 도움을 주셔서 감사합니다. – Max13

1

변경할 때 세 번째 테이블에 삽입 할 트리거를 만들 수 있습니다.

mysql docs online에서 TRIGGERS를 참조하십시오.

+0

덕분에, – Max13