2014-03-03 4 views
7

내가 저장하는 계층 데이터 세트를 가지고는, 계층 구조는 예를 들어, 사이트/건물/바닥, 데이터 같다redis를 사용하여 계층 적 데이터를 저장하는 방법은 무엇입니까?

{ 
    site:'New York', 
    buildings: [ 
       { 
       name:'building a', 
       floors: [ 
         'Ground':[{room:room1},{room:room2}], 
         'First':[{room:room1},{room:room2}] 
         ] 
       } 
      ] 
}, 
{ 
    site:'London', 
    buildings: [ 
       { 
       name:'building a', 
       floors: [ 
         'Ground':[{room:room1},{room:room2}], 
         'First':[{room:room1},{room:room2}] 
         ] 
       } 
      ] 
} 

나는 세트로이 방에 데이터를 저장하려면,하지만 난 쿼리 수도 있습니다 사이트 이름 또는 (사이트 이름 + 건물 이름) 또는 (사이트 이름 + 건물 이름 + 층)을 선택하여 방의 하위 집합

답변

6

고유 데이터 구조로 데이터를 저장하지 않습니다. 하나의 키로 식별되는 여러 개의 데이터 구조를 만들어야합니다.

규칙 이름을 사용하여 키 이름을 지정하십시오. 예 : site:<CITY>:buildings은 지정된 사이트의 건물 ID 목록을 포함하는 세트입니다.

그런 다음 각 건물 설명을 저장할 해시를 정의합니다. 이러한 해시의 핵심은 다음과 같을 수 있습니다. building:<ID>

해시에 이름과 층이 2 개 있습니다. Floors 값은 플로어 식별자 목록을 포함하는 집합의 고유 한 ID입니다.

그런 다음 각 층마다 마지막 세트를 만들어 방 이름을 저장하십시오. 세트의 이름은 floor:<ID>과 유사 할 수 있습니다.

팁 :

  • 사용 레디 스의 INCR 명령은 고유 ID를 생성합니다.
  • 너무 많은 키를 저장하려는 경우 너무 긴 키는 사용하지 마십시오 (긴 키는 더 많은 메모리가 필요합니다)
관련 문제