복붙노트

[REDIS] 레디 스의 많은 많은 관계를 가지고하는 방법

REDIS

레디 스의 많은 많은 관계를 가지고하는 방법

관계형 데이터베이스에, 나는 사용자 테이블, 카테고리 테이블과 많은 관계로 많은 작업을 수행 사용자 카테고리 테이블이 있습니다. 레디 스에서이 구조의 더 나은 형태는 무엇입니까?

해결법

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

    1.레디 스으로 관계는 통상적으로 세트로 표현된다. 당신은 다 대다 관계를 표현하기 위해 객체 당 하나 개의 세트를 필요로하므로 세트는, 단방향 관계를 나타내는 데 사용할 수 있습니다.

    레디 스으로 관계는 통상적으로 세트로 표현된다. 당신은 다 대다 관계를 표현하기 위해 객체 당 하나 개의 세트를 필요로하므로 세트는, 단방향 관계를 나타내는 데 사용할 수 있습니다.

    레디 스 데이터 구조에 관계형 데이터베이스 모델을 비교하려고 꽤 쓸모가 없다. 레디 스로, 모든 비정규 방법으로 저장됩니다.

    예:

    # Here are my categories
    > hmset category:1 name cinema  ... more fields ...
    > hmset category:2 name music   ... more fields ...
    > hmset category:3 name sports  ... more fields ...
    > hmset category:4 name nature  ... more fields ...
    
    # Here are my users
    > hmset user:1 name Jack   ... more fields ...
    > hmset user:2 name John   ... more fields ...
    > hmset user:3 name Julia  ... more fields ...
    
    # Let's establish the many-to-many relationship
    # Jack likes cinema and sports
    # John likes music and nature
    # Julia likes cinema, music and nature
    
    # For each category, we keep a set of reference on the users
    > sadd category:1:users 1 3
    > sadd category:2:users 2 3
    > sadd category:3:users 1
    > sadd category:4:users 2 3
    
    # For each user, we keep a set of reference on the categories
    > sadd user:1:categories 1 3
    > sadd user:2:categories 2 4
    > sadd user:3:categories 1 2 4
    

    우리는이 데이터 구조가되면, 설정 대수를 사용하여 쿼리하기 쉽습니다 :

    # Categories of Julia
    > smembers user:3:categories
    1) "1"
    2) "2"
    3) "4"
    
    # Users interested by music
    > smembers category:2:users
    1) "2"
    2) "3"
    
    # Users interested by both music and cinema
    > sinter category:1:users category:2:users
    1) "3"
    
  2. ==============================

    2.이럴 레디 스 구조화 querys (SQL)하지만 빠른 accesible 데이터를, 당신이 할 수있는 것은 이것이다를 만들기위한되지 않습니다 : 키와 데이터가 예를 들어, 친구와 함께 목록으로 USER_ID와 "표"를 확인합니다. 그럼 당신은 당신이 필요로하는 무엇을 USER_ID 및 프로세스에 대한 쿼리. 그것은 정상화의 반대입니다. 데이터의 순서가 예를 들어, 상태 업데이트에 대한 importante 인 경우, 당신이 무엇 목록에 푸시와 팝의 데이터입니다. 예를 들어, 테이블의 "상태"키로 USER_ID 가지며 데이터리스트이다. 당신은 데이터를 lpush 다음 예를 들어 지난 20 개 요소를 쿼리합니다.

    이럴 레디 스 구조화 querys (SQL)하지만 빠른 accesible 데이터를, 당신이 할 수있는 것은 이것이다를 만들기위한되지 않습니다 : 키와 데이터가 예를 들어, 친구와 함께 목록으로 USER_ID와 "표"를 확인합니다. 그럼 당신은 당신이 필요로하는 무엇을 USER_ID 및 프로세스에 대한 쿼리. 그것은 정상화의 반대입니다. 데이터의 순서가 예를 들어, 상태 업데이트에 대한 importante 인 경우, 당신이 무엇 목록에 푸시와 팝의 데이터입니다. 예를 들어, 테이블의 "상태"키로 USER_ID 가지며 데이터리스트이다. 당신은 데이터를 lpush 다음 예를 들어 지난 20 개 요소를 쿼리합니다.

  3. from https://stackoverflow.com/questions/10907942/how-to-have-relations-many-to-many-in-redis by cc-by-sa and MIT license