2011-08-04 2 views
1

이것은 이론적 인 질문 일 수 있지만 실용적인 답변을 찾고 있습니다.Redis의 정렬 된 집합은 눈금이 맞습니까?

계산 된 값을 기준으로 데이터베이스의 모델 순위를 저장하려면 Redis's Sorted Sets을 사용할 계획입니다. 현재 내 데이터 세트는 작습니다 (250 명의 회원). 정렬 된 세트가 5,000 명의 멤버 이상으로 확장 될지 궁금합니다. Redis는 1GB 최대 값을 요구하고 나의 값은 모델의 ID이므로 정렬 된 값의 확장성에 대해서는별로 신경 쓰지 않습니다.

ZRANGE은 O (log (N) + M)의 시간 복잡도를 갖는다. 세트에서 상위 5 위 항목을 가장 자주 얻으려고하면 N 세트 항목의 로그 (N)가 문제가 될 수 있습니다.

또한 O (N * K) + O (M * log (M))의 시간 복잡도를 갖는 ZINTERSTORE을 사용할 계획입니다. ZINTERSTORE를 자주 사용하고 ZRANGE를 사용하여 결과를 검색 할 계획입니다. 0 -1

제 질문은 두 가지로 생각됩니다.

  1. Redis는 저울을 5,000 명의 회원에게 문제없이 정렬하도록 정렬합니까? 10,000? 50,000?
  2. ZRANGE와 ZINTERSTORE (ZRANGE와 함께)가 큰 세트에 적용될 때 성능 문제를 나타내 기 시작합니까?

답변

4

정렬 된 세트의 수십만 개의 키에는 아무런 문제가 없었습니다. 물론 전체 세트를 얻는 데는 시간이 더 걸릴 것입니다.하지만 I/O 관점에서도 그렇습니다.

이러한 인스턴스 중 하나는 사용중인 여러 DB와 50k에서> 150k 개의 키가있는 여러 정렬 세트가있는 서버에있었습니다. 높은 기록은 일별 150,000 건이 넘는 실시간 웹 서버 로그 분석을 통해 많은 양의 zincrby 명령을 사용하기 때문에 일반적인 기록이었습니다. 그리고 나는 한 번에 1 주일을 저장할 것입니다.

내 경험에 비추어 볼 때, 나는 그것에 대해 말하고 싶습니다. 서버 하드웨어가 실제로 로우 엔드가 아니면 않는 한 괜찮을 것입니다.

0

Redis에서는 축소 제한이있는 정렬 된 집합입니다. 정렬 된 집합은 분할 할 수 없습니다. 결과적으로 정렬 된 세트의 크기가 파티션의 크기를 초과하는 경우 Redis를 수정하지 않고 수행 할 수있는 작업이 없습니다. 기사

인용구 :

파티셔닝 세분화 키, 그래서 매우 큰 소트 세트와 같은 하나의 큰 키를 사용하여 데이터 집합을 샤딩 할 수 없습니다. [1]

참조 :

[1] http://redis.io/topics/partitioning