나는 django 1.10.1, postgres 9.5 및 redis를 사용합니다. 나는 사용자 표를 저장하고처럼 보이는 테이블이 있습니다데이터베이스 투표 테이블로의 이동 횟수를 최소화하려고 시도했습니다.
==========================
object | user | created_on
==========================
곳 object
및 user
가 자신의 테이블의 id
열에 외래 키는 각각됩니다.
문제는 많은 경우 한 페이지에 여러 개체를 나열해야한다는 것입니다. 사용자가 로그인하거나 인증 된 경우 모든 객체에 대해 투표 여부를 확인해야합니다 (결과에 따라 표시, vote
또는 unvote
버튼 표시). 그래서 내 템플릿에서 페이지의 모든 객체에 대해 이러한 함수를 호출해야합니다. 내가 한 페이지에서 객체의 수만을 가질 수 있기 때문에
def is_obj_voted(obj_id, usr_id):
return ObjVotes.objects.filter(object_id=obj_id, user_id=usr_id).exists()
는, 나는 각 쿼리에 대해 하나의 행에 액세스하기 때문에 혼자 데이터베이스 액세스를 1 초 이상 걸릴 수 있다는 django-debug-toolbar
를 사용하여 발견하고는 직렬에서 발생 페이지의 모든 개체에 대해 더 악화시키기 위해 다른 페이지의 해당 테이블에서 유사한 검색어를 사용합니다 (예 : user
또는 object
만 사용하는 필터).
달성하고자하는 것은 올바른 일이라고 생각하는 것은 데이터베이스에 한 번만 액세스하여 일부 사용자가 필터링 한 모든 객체를 가져 오는 방법을 찾는 것입니다 (사용자가 로그인하거나 그런 데이터베이스 액세스를 필요로하는 첫 페이지 히트시), 페이지 요구에 따라 원하는대로 추가로 필터링하십시오. 내가 redis를 사용하고 django-cacheops
앱을 사용 했으므로 그 일을 도와 줄 수 있습니까? 귀하의 경우에는 내가 더 잘 개체 ID의 배열을 얻고 사용자의 ID로 모든 표 및이 배열, 뭔가 같은 쿼리와 함께 가고 싶어에서
어떻게 object_ids를 얻었습니까? 코드의 해당 부분으로 업데이트하십시오. redis와 django-cache는 어디에 위치합니까? – e4c5