2011-08-13 3 views
1

최적의 성능을 위해 자주 검색되는 관련 키 (multiGet 사용)를 단일 서버에서 그룹화하는 것이 가장 좋습니다. 따라서 클라이언트 기능에 사용되는 암시 적 메커니즘과 관련된 몇 가지 질문이 있습니다 이렇게하기 위해 만들어졌습니다.Memcached scaling : key "grouping"

libmemcache (php-memcached)를 사용하여 동일한 목적으로 사용한다고 가정 한 두 가지 다른 접근 방식을 보았습니다. 가장 확실한 접근 방법은 getByKey/setByKey를 사용하여 키를 서버에 매핑하고 두 번째 옵션은 OPT_PREFIX_KEY 옵션을 사용하는 것입니다 (phc 설명서에 memcached :: _ construct에 게시 된 간단한 예가 있습니다). "항목 키에 대한 '도메인'을 만드는 데 사용됩니다. 두 번째 접근법의 경고는 인스턴스별로 만 설정할 수 있다는 점입니다. 이는 좋은 일일 수도 있고 그렇지 않을 수도 있습니다.

내가 완전히 오해하지 않는 한,이 두 가지 접근법은 실제로 같은 목적을 수행하지 않습니다. 다른 접근법으로 접근 할 때 명확한 이점이 있습니까?

이 주제에 관해서는 다른 질문이 있습니다. 일관되게 해시 된 시나리오에서 키를 서버에 매핑하는 것은 어떤 영향을 미칩니 까? 노드가 실패하면 자유형 키가 문제없이 새로운 서버로 다시 매핑된다는 것을 전제로합니다.

고마워요!

답변

0

이러한 키가 실제로 거의 항상 검색되는 경우 키를 정렬 및 연결하고 사전으로 직렬화 된 값을 JSON 또는 유사한 형식으로 저장하는 등 단일 키/값 쌍으로 함께 캐시 할 수 있습니다. 귀하의 질문에 돌아

:

  • OPT_PREFIX_KEY 키에 의해 값을 그룹화와는 거의 무관, 그냥이 특정 클라이언트에서 사용하는 모든 키를 접두사, 그래서 "1" "foo1은"이되어 배포된다 "foo"에 의한 그룹핑없이이 새로운 값을 사용하는 일관된 해싱.
  • getByKey/setByKey는 libketama (서버 선택에 사용 된)와 memcached 서버에 다른 키를 전달할 수 있기 때문에 원하는 내용에 가장 가까운 것을 수행합니다. 동일한 첫 번째 키와 다른 두 번째 키를 지정하면 동일한 memcached 서버로 끝나지만 서로 덮어 쓰지는 않습니다.

조기 최적화는 모든 악의

의 루트입니다