2009-08-10 2 views
0

검색 기능을 갖춘 일종의 전자 상점을 설정해야합니다. 모든 검색 요청에 대한 검색을 더 효율적으로 만드는 Memcache db 모델

나는 다음과 같은 구조를 조회 할 수있어 :

제품 :
-name

--tag
-ingredients을
--ingredient
--- 태그 -tags
---- 태그
--- 옵션
---- 옵션
----- 옵션 세부 사항
-variants
--variant
--- 태그
---- 태그
--- 옵션
---- 옵션 측정
---- 값
--- 가격

이제 쿼리 수를 상상해보십시오. 데이터베이스가 정규화되었습니다 (제 2 수준이라고 생각합니다). 여기에있는 한 가지 확실한 해결책은 매우 오랜 시간 동안 (제품 세트, 재료 세트, 속성 세트, 태그 세트 등) 가져온 각 모델 결과 세트를 저장하는 것입니다 (제품 및 그 속성은 자주 업데이트되지 않고 admin에 의해서만) 그곳에서 질의를하십시오.

그래서 어떻게 생각하십니까? db 쿼리 수를 줄이는 더 좋은 방법이 있습니까?

제가 생각한 또 다른 옵션은 스핑크스를 사용하는 것입니다. 그러나 전체 텍스트 검색이 필요하지 않으며 태그와 비슷한 필드와 정확하게 일치해야합니다.

미리 감사드립니다.

답변

1

내 Google App Engine 앱에서는 데이터 쿼리에 많은 시간이 걸릴 수 있으므로 일반적으로 데이터 저장소에서 Memcache로 이동하고 거기에서 작업합니다. 필자의 경우 MemCache는 데이터를 반환하고 찾고자하는 것을 얻을 때까지 여러 쿼리를 거쳐 갈 수있는 데이터에 액세스하는 것보다 CPU에 대한 부하가 적습니다.

memcache가 예상보다 오래 자주 플러시하지 않도록 memcache에 긴 시간 제한을 설정하는 것이 좋습니다. 최대 타임 아웃은 최대 1 개월이지만 일반적으로 며칠 동안 설정하면 충분하다고 생각합니다. 당신은 DB를 다시 공격 할 수 있도록

제품에 대한 데이터가 업데이트 된 경우 당신은 항상 memcache에 플러시하는 코드를 추가 할 수 있지만이 시간이되면

+1

+1 - 내가 추가 거라고 유일한은 그가 적절히 긴 캐시 타임 아웃을 설정하려고합니다. Django + memcached rocks, 특히 캐시를 제어하는 ​​세분성의 다양성. –

+0

더 이상 동의하지 않을 수 있습니다. 내가 주어진 줄 알았는데 시간 제한을 두지 않았다. 내 대답을 업데이트했다. – AutomatedTester

+0

최대 값은 '영원히'(의미가'memcache'가 다시 시작될 때까지)로, 만료 값을 '0'으로 설정하면된다. – Nate