[REDIS] 레디 스 멀티 - 매개 변수 일치 찾기
REDIS레디 스 멀티 - 매개 변수 일치 찾기
다음과 같이 나는, 일부 데이터 세트에 대한 일치 파인더 시스템을 만들어야합니다 :
개체의 집합이있다, 문자열로 식별 각 OBJECTID.
각 객체는 정확히 N 속성 파이가 있습니다. 각 속성 값은 문자열이다.
(실제 N = 8) N = 3 데이터베이스 예.
ObjectID: P1 P2 P3 -------------------------------- APPLE: RED ROUND FRUIT ORANGE: ORANGE ROUND FRUIT CARROT: RED LONG VEGETABLE
이 시스템은 개체 속성에 주어진 쿼리를 일치하며 Object의 집합을 반환해야합니다. 사용자가 사용자의 모든 속성 값을 지정해야합니다. 사용자가 사용자의 일부 또는 모든 속성은 "와일드 카드"*를 지정할 수 있습니다에 대한 대안으로, 모든 속성 값이 기준과 일치하는 것을 의미한다.
예 쿼리 :
P1 P2 P3 => Result ------------------------------------ * ROUND FRUIT => APPLE, ORANGE RED LONG VEGETABLE => CARROT RED * * => CARROT, APPLE
이 모든 하찮게 SQL로 이루어집니다.
질문 : 레디 스에 그렇게 할 수있는 깔끔한 방법이?
내가 자기 교육 목적으로, 특히 레디 스 기반의 솔루션에 관심이 있습니다; 다른 DB를이 특정 질문에 대한 논외입니다.
업데이트 : 각 파이와 응용 프로그램 쪽 필터링에 대한 명시 적 OBJECTID의 목록과 사소한 솔루션은 나에게 깔끔한 충분히 보이지 않습니다 :-)
해결법
-
==============================
1.당신이 여기서 뭘하려고하는 것은 역 색인이다.
당신이 여기서 뭘하려고하는 것은 역 색인이다.
각 열에 대해, 그것은 "설정"에 매핑합니다. 그런 다음 결과를 얻을 수있는 세트를 교차 할 수 있습니다.
그래서 애플은 : RED ROUND 과일은 다음 삽입에 매핑 것이다 :
SADD p1:RED APPLE SADD p2:ROUND APPLE SADD p3:FRUIT APPLE
그럼, 내가 * ROUND 과일에 대한 조회 할 말을하자, 내가 할 것입니다 :
SINTER p2:ROUND p3:FRUIT
ROUND 세트와 P3 : 과일 세트이 명령하여 P2에있는 항목의 교차하고있다. 이것은 무엇 P1 ROUND와 과일, 배려하지 않은 모든 항목을 반환합니다.
몇 가지 다른 예 :
SMEMBERS p1:GREEN SINTER p1:RED p2:ROUND p3:FRUIT SUNION p1:RED p1:GREEN
내 상기 응답은 교차 연산은 O (N * M) 때문에 약간의 계산 능력을 사용하는 것이다. 여기에 더 많은 메모리를 많이 그 일을하는 방법이 있지만, 효과적으로 인덱스를 precomputes 때문에 빠른 검색해야합니다.
속성의 각 조합의 경우, 저장 세트가 키를합니다
그래서 애플은 : RED ROUND 과일은 다음 삽입에 매핑 것이다 :
SADD RED:ROUND:FRUIT APPLE SADD :ROUND:FRUIT APPLE SADD RED::FRUIT APPLE SADD RED:ROUND: APPLE SADD RED:: APPLE SADD :ROUND: APPLE SADD ::FRUIT APPLE SADD ::: APPLE
그런 다음, 쿼리, 당신은 단순히 각각의 키에 액세스 할 수 있습니다. 예를 들어, * ROUND 과일은 단순히 것
SMEMBERS :ROUND:FRUIT
당신이 많은 차원을 때 분명히, 이것은 메모리의 측면에서 전혀 확장 성이 좋지 않지만, 매우 결과를 검색하기 위해 이따위됩니다.
from https://stackoverflow.com/questions/7939365/multi-parameter-match-finder-with-redis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 스파크에 레디 스 : 작업이 직렬화하지 (0) | 2020.01.07 |
---|---|
[REDIS] Node.js를 루핑 비동기 처리를위한 가장 좋은 패턴 (0) | 2020.01.07 |
[REDIS] 스크립트 전역 변수를 작성하려고 (0) | 2020.01.06 |
[REDIS] Node.js를하고 socket.io와 레디 스의 인증 오류 (0) | 2020.01.06 |
[REDIS] 소트 세트에 DIFF를 얻는 방법 (0) | 2020.01.06 |