2012-10-21 3 views
0

은 사용자가 10 게시물 DB에서 가져와 표시되는 사이트를 들어갈 때 나는 두 테이블사용자의 즐겨 찾기와 Memcached가

posts 
- post_id 
- image 

favorites 
- fav_id 
- post_id 
- user_id 

이 있다고 할 수 있습니다. 지금 내가하고있는 일은이 테이블을 함께 결합하고 결과를 반복하는 것입니다. 사용자가 뭔가를 즐겨 사용했는지 여부를 확인할 수 있습니다. 이 같은

뭔가 :

SELECT p.*, f.fav_id 
FROM posts p 
LEFT JOIN favorites f 
ON p.post_id = f.post_id AND user_id = $user_id 
LIMIT 10 

이 제외 괜찮는 지금은 memcached를과 결과를 캐시하려면 다음 캐싱이 작동하지 않기 때문에 쿼리는 각 사용자마다 다를 수 없습니다. 모든 사용자가 동일한 캐시 항목의 게시물을로드하도록합니다.

내 첫 번째 생각은 로그인 할 때 모든 사용자 즐겨 찾기를 가져 와서 캐시에 저장하고 사이트의 게시물을 탐색 할 때 사용할 수 있다는 것입니다. 내 친구는 사용자가 즐겨 찾기를 많이 사용하고 동시에 많은 사용자가 로그인했을 때 이것이 무거울 수 있다고 제안했습니다.

나는 어떻게 접근해야할지 모르겠다. 너희들은 어떻게 생각하니? 이 서버의 부하에 대해 잘되어야하므로

감사

답변

0

쿼리 자체는 특별히 집중하지 않습니다.

당신이 언급 한 것에 대해서는 명확하지 않습니다. 적어도 나에게는.

사용자의 즐겨 찾기에 대한 캐시를 만들려면 다른 데이터 (특히 user_id)를 사용하고 있으므로 항상 다른 쿼리가 필요합니다. 당신이 원하는 것이 있다면, 그것을 호출하자. 사용자 당 하나의 캐시가 실행 가능할 것이다. 그렇다면, 업데이트하지 않는 한, 사용자가 즐겨 찾기 목록에 새로운 것이 있는지 확인해야한다는 문제가있다. 사용자가 새 항목을 즐겨 찾기로 선택할 때 해당 특정 캐시.

나는 세션을 시작할 때 각 사용자의 즐겨 찾기를 확인하고 세션이 끝날 때까지 계속 유지하기 위해 쿼리를 사용합니다. 사용자가 새로운 것을 추가하면 그 목록을 다음과 같이 업데이트 할 것입니다. 세션.

업데이트
사용자 의견을 고려하여 사용자가 즐겨 찾기 목록에 항목을 추가하면 캐시를 다시 작성하므로 사용자가 중단 시간을 줄일 수 있습니다.

또한 사용자가 로그인 할 때 간단한 쿼리를 사용하여 결과를 얻을 수 있습니다. 간단한 쿼리는 빠르게 실행되어 결과를 곧 제공합니다.

일단 세션에로드 된 즐겨 찾기가 있으면 사용자가 너무 많거나 세션에 너무 많은 정보가 저장되어 있거나 너무 많은 데이터 흐름이 있고 모든 데이터를 쿼리하지 않는 한 성능과 관련하여 문제가 없어야합니다. 시각.

+0

지금 사용하고있는 실제 쿼리는 더 복잡하며 몇 가지 다른 테이블을 조인합니다. 나는이 문제에 관해서는 깨끗하게하고 싶었지만 그것을 언급해야만했다. 즐겨 찾기 캐시 항목을 해당 사용자의 고유 키와 함께 삭제한다고 생각했습니다. 그래서 내가 즐겨 찾기에 항목을 추가하면 캐시를 삭제하고 다음 번에 페이지를로드 한 다음 새 항목을 다시 작성합니다. 포함된다. – Ivar