복붙노트

[REDIS] 레디 스 및 쿼리 값

REDIS

레디 스 및 쿼리 값

레디 스 내가 사용하는 것이 기존의 SQL 데이터베이스를 다른 개념이며, 나는 ... 나는 주위를 찾고 있었어요하지만 내 질문에 대한 답을 찾을 수가 없어 바로 내 프로젝트에 대한 경우 알아 내려고 노력하고있어.

나는 각각의 그것과 연관된 고유 ID (예 : 자신의 이름과 같은) 여러 값을 저장하는 데 필요 사용자의 집합을 가지고있다. 나는 단순히 해시로 사람들을 저장할 수있는 것 같다 :

user:fef982dcfe1a7bcba4849b4c281bba95
"username" "andrewm" "name" "Andrew"

나는 또한, 각각은 발신자와 수신자 등의 몇 가지 특성을 갖는 저장하려는 메시지의 무리가 :

message:1a7bcba4849b4c281bfef98a952dcfeb
"sender" "fef982dcfe1a7bcba4849b4c281bba95" "recipient" "82dcfe1a7bcba4849b4c281bba95fef9" "message" "Hi!"

내 질문은 내가 (A 자신의 해시로 지정) 특정 사용자에 의해 전송되는 모든 메시지를 검색 가겠어요 방법입니다. 내가 대신 전통적인 관계형 데이터베이스를 사용하거나 (I 전에 사용했습니다) MongoDB를 같은 심지어되는 NoSQL 데이터베이스해야 하는가? 그렇다면, 누군가는 고성능 저장을위한 제안 사항이 있습니까? 정말, 단지 키 값 조회 - 나는 진정한 검색 (즉, MySQL의 LIKE 쿼리를) 수행되지 않습니다.

해결법

  1. ==============================

    1.레디 스 이러한 데이터를 모델링 확실히 가능하지만, 당신은 데이터 구조 및 액세스 경로의 관점에서 생각해야합니다. 레디 스로 액세스 경로는 (RDBMS / MongoDB의에서 인덱스 등) 암시 적으로 관리되지 않습니다.

    레디 스 이러한 데이터를 모델링 확실히 가능하지만, 당신은 데이터 구조 및 액세스 경로의 관점에서 생각해야합니다. 레디 스로 액세스 경로는 (RDBMS / MongoDB의에서 인덱스 등) 암시 적으로 관리되지 않습니다.

    제공된 예를 들어, 당신은 할 수 있습니다 :

    user:<user hash> -> hash of user properties
    user:<user hash>:sent -> set of <msg hash>
    user:<user hash>:received -> set of <msg hash>
    message:<msg hash> -> hash of message properties
    

    추가 / 메시지를 삭제하면 *을 유지하는 의미 : 전송 및 * : 추가 / 메시지 개체 자체를 삭제 상단에서 보낸 사람과받는 사람에 해당 세트를 받았다.

    특정 사용자를 위해 보내거나받은 메시지를 검색하면 같은 시간에 메시지의 속성을 검색하려는 경우 단지 명령, 또는 SORT를 SMEMBERS입니다 :

    # Get a list of message hash codes only in one roundtrip
    smembers user:<user hash>:received
    
    # Get a list of message contents in one roundtrip
    sort user:<user hash>:received by nosort get message:*->sender get message:*->message
    

    종류의 사용에 대한 근거은 다음을 참조하십시오

    주 1 : 레디 스에 그들이 더 효율적인 방법으로 저장되므로, 키가 아닌 UUID 또는 (특히 세트에서) 해시 코드로 정수를 사용하는 것이 좋습니다.

    2 참고 : 메시지를 주문해야하는 경우, 다음 목록 대신 세트로 사용되어야합니다. 결과는 단지 오래된 메시지는 제거 할 수 있으며, 단지 newset 메시지는 효율적인 방법으로 추가 할 수 있습니다. 당신은 아마 모든 메시지에 대해 전역 목록을 추가하는 것입니다.

  2. from https://stackoverflow.com/questions/11279113/redis-and-querying-values by cc-by-sa and MIT license