2017-11-27 33 views
0

에 인덱스 (ZSET) 사이에 연결되어 내가 5 인덱스가 상상 (그것은 ZSET의) :카운트 얼마나 많은 요소가 나는 자신의 타임 스탬프와 관련된 키 이름을 저장 레디 스에있는 많은 인덱스가 레디 스

  • 애플 -> 1, 2, 3
  • 레드 -> 1, 2
  • 녹색 -> 3
  • 큰 -> 3, 2
  • 작은 -> 1
,

레드 애플이 얼마나 큰지 알고 싶습니다. (필요한 경우 약간의 에러 마진을 받아 들일 수 있습니다.) 첫 번째 방법은 애플과 레드 인덱스를 교차시켜 1과 2를 크게 검색하는 것입니다. 그러나 이것은 큰 인덱스에 대해 배고픈 리소스입니다. 만약 내가 다른 많은 인덱스에 대해 알고 싶다면 나는 1000 개의 키를 포함하는 100 개의 인덱스가 있다고 상상한다. 속도의 측면에서 불가능하다.

두 번째 접근법은 각 인덱스에 대해 인덱스의 "체인" 키, 나는 내 핵심 특성에 접근 할 수 있기 때문에 빨간 작은 사과라는 것을 알 수 있습니다. Apple에이 정보를 추가하면 Apple에이 정보가 저장됩니다. Chain = {small -> 1, red -> 1} 열쇠, 나는 기존의 키를 증가 시키거나 새로운 것을 만들지 만, 얼마나 많은 빨간 사과가 큰지 알고 싶으면 체인이 교차하지 않는 능력이 없기 때문에 더 이상 내 체인이 작동하지 않는다. 사과와 적색을 교차시킨 다음 교차점을 만듭니다. 그러나 첫 번째 접근 방식에 비해 속도면에서 최악입니다.

세 번째 접근 방식은 결과의 근사치 인 것처럼 보입니다. 얼마나 많은 빨간 사과가 큰지를 대략적으로 알 수 있습니까? 합리적인 오차 범위? Redis는 HyperLogLog를이 용도로 사용할 수 있습니까? 다른 방법은 내가 다른 데이터 구조를 저장하거나 기존 하나를 변경했다하더라도 말해 보면

그리고 마지막으로, 나는 적절한 대답은 데이터에 대한 자세한 정보가 필요

답변

1

모든 제안에 열려있어 - zsets의 수와 색인을 생성하는 키의 수.

아마도 RAM과 CPU의 관점에서 볼 때 색인은 각 z 세트당 비트 맵이 될 것입니다. 키당 비트를 사용하여 소속을 나타내며 BITOP을 호출하여 모두 AND (교차)를 수행합니다.

또는이 검색 유형을 가능하게하는 Redis 모듈로 구축 된 "빠른 검색"검색 엔진 http://redisearch.io을 볼 수도 있습니다.