[REDIS] 초고속 데이터 저장소 찾고 교차 작업을 수행하는
REDIS초고속 데이터 저장소 찾고 교차 작업을 수행하는
나는 Resque를위한 백엔드로 잠시 동안 레디 스를 사용하고 지금은 대량의 데이터에 교차 작업을 수행 할 수있는 빠른 방법을 찾고 있어요 것을, 나는 레디 스에게 기회를 제공하기로 결정했다.
나는 다음과 같은 테스트를 실시했습니다 :
- X, Y 및 Z는 모두 약 포함 레디 스 세트이다. 1,000,000 부재 (3M + 멤버를 함유하는 시드 어레이로부터 취해진 임의의 정수).
- 내가 sintersectstore을 사용하고 있으므로 (데이터가 서버에서 클라이언트로 검색에 의한 과열을 피하려면), 교차 x 및 y 및 z하려는
sinterstore r x y z
- 결과 세트 (R)은 레디 스 약 0.5 초에 세트를 계산 만 약 절반 부재를 포함한다.
0.5 초는 나쁘지 않다,하지만 난 억 명 멤버 각각의보다 더 포함 할 수있다 세트에 같은 계산을 수행해야합니다.
나는 레디 스 같은 거대한 세트와 어떻게 반응하는지 테스트 해 보지 않았다 그러나 나는 많은에게 데이터를 처리하는 데 시간이 더 걸릴 것이라고 가정한다.
내가 지금 뭐하는 거지? 그렇게 할 수있는 빠른 방법이 있나요?
노트:
- 내가 여러 노동자가 액세스 할 것이다 분산 된 데이터 저장소를 찾고 있어요 때문에 기본 배열은 옵션이 아니다.
- 내가 RAM 16GB의와 3.4GHz로 맥 @ 8 개 코어에서 이러한 결과를 얻을 수, 디스크 저장은 레디 스 구성에 비활성화되었습니다.
해결법
-
==============================
1.나는 비트 맵 최선의 희망 용의자.
나는 비트 맵 최선의 희망 용의자.
내 경험에 의하면, 비트 맵을위한 완벽한 서버 인 레디 스; 당신은 (레디 스에서 사용할 수있는 5 명 개의 데이터 구조 중 하나를) 문자열 데이터 구조를 사용합니다
많은 혹은 모든 사용자가 수행해야하는 작업의 원자 작업으로, 즉시 사용할 수 레디 스에 있습니다
레디 스의 SETBIT 동작 O 시간 복잡도를 갖는 (1)
전형적인 구현에서, 당신은 다음, 비트 문자열 값을 오프셋 오프셋 대응 (또는 인덱스)에 각 비트를 설정하기 위해 배열 값을 해시 것이다; 그래서 같은 :
>>> r1.setbit('k1', 20, 1)
첫 번째 인자는 오프셋 (지표 값)이며, 세 번째는 비트 맵의 해당 인덱스의 값은 중요하다.
조금이 오프셋 (20), 호출에 설정되어있는 경우 찾을 수있는 비트 문자열의 키를 전달 getbit.
>>> r1.getbit('k1', 20)
다음 해당 비트 맵에, 당신은 물론, XOR을, 예를 들어, 일반적인 비트 연산을 수행하는 논리 AND, OR 수 있습니다.
from https://stackoverflow.com/questions/9471078/looking-for-an-ultrafast-data-store-to-perform-intersect-operations by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 Jedis 클라이언트 RedisTemplate에 하나의 호출로 여러 목록 값을 얻을 수 있습니다 (0) | 2020.01.24 |
---|---|
[REDIS] sidekiq가 작업을 처리하지 않고, 작업이 대기열에 갇혀 (0) | 2020.01.24 |
[REDIS] jQuery를 레디 스 캐시 레일 페이지 뷰를 추적하는 카운터 히트 (0) | 2020.01.24 |
[REDIS] 푸른에서 ASP.NET 코어와 레디 스에 저장 사용자 세션 (0) | 2020.01.24 |
[REDIS] 분할 레디 스에 의해 데이터베이스 (0) | 2020.01.24 |