programing

키 값 데이터 저장소에 디렉터리 계층 저장

powerit 2023. 5. 18. 21:30
반응형

키 값 데이터 저장소에 디렉터리 계층 저장

Key-Value 데이터베이스(내 경우 MongoDB를 제외한 다른 데이터베이스)에 디렉터리 계층/트리를 저장하는 깨끗하고 효율적인 방법은 무엇입니까?

예를 들어 트리 구조

- Cars 
   + Audi 
   + BMW
      - M5
   + Ford
- Color
   + Red
      - Apple
      - Cherry
   + Purple
- Funny

지금 사용하는 메서드, 각 개체는 상위 개체에 연결됩니다.

{ 
  dir: "red"
  parent-dir: "color"
}

이렇게 하면 트리의 모든 부분을 매우 효율적이고 빠르게 삽입하고 재정렬할 수 있습니다(예: 빨간색과 모든 하위 항목을 Cars 디렉토리로 이동하려는 경우).

그러나 이 방법은 모든 하위 디렉터리와 하위 디렉터리의 하위 디렉터리를 재귀적으로 사용하려는 경우에는 적합하지 않습니다.구문 분석을 효율적으로 하기 위해 예를 들어 구조를 가질 수 있습니다.

{ 
  dir: "red"
  children: "audi, bmw, ford"
}

{ 
  dir: "bmw"
  children: "m5"
}

하지만 제가 트리를 수정하고 싶다면, 많은 물체들을 만지고 수정해야 합니다.

KV 저장소에 디렉터리 구조를 저장하는 다른 방법이 있습니까?

현재 사용하는 방법을 인접 목록 모델이라고 합니다.

계층적 데이터를 (관계형) 데이터베이스에 저장하는 또 다른 모델은 중첩 집합 모델입니다.SQL 데이터베이스에 구현된 것은 잘 알려져 있습니다.수정된 사전 주문 트리 트래버설 알고리즘에 대해서도 이 문서를 참조하십시오.

매우 간단한 방법입니다. 객체당 경로를 저장할 수 있습니다. 이러한 방법을 사용하면 NOSQL 데이터베이스의 트리를 쉽게 쿼리할 수 있습니다.

{ path: "Color", ... }
{ path: "Color.Red", ... }
{ path: "Color.Red.Apple", ... }
{ path: "Color.Red.Cherry", ... }

노드가 제거되거나 이름이 변경되면 일부 경로를 업데이트해야 합니다.그러나 일반적으로 이 방법은 유망해 보입니다.당신은 특별한 캐릭터를 구분자로 예약하면 됩니다.저장 공간 오버헤드는 무시해도 될 정도입니다.

편집: 이 방법을 구체화된 경로라고 합니다.

마지막으로 NOSQL 데이터베이스의 계층적 데이터에 대한 다양한 방법을 비교합니다.

저는 NOSQL에 대한 경험이 많지 않기 때문에 이것이 확실한 답은 아니지만, 다음과 같이 접근할 수 있습니다.

첫 번째 접근 방식을 사용할 것입니다. 여기에는 다음과 같은 방법이 방법이 있습니다.

{
  dir: 'dir_name',
  parent_dir: 'parent_dir_name'
}

그런 다음 디렉터리의 하위 항목을 빠르게 쿼리하도록 맵 축소를 설정합니다.MongoDB의 맵리듀스 기능은 아직 개발 부서에서만 사용할 수 있고 저는 아직 이 기능을 사용하지 않았지만 CouchDB(MongoDB에서 약간의 수정만 있으면)에서는 다음과 같은 작업을 수행할 수 있습니다.

map:
function(doc) {
  emit( doc.parent_dir, doc.dir );
}

reduce:
function(key, values) {
  return( values );
}

그러면 각 상위 디렉터리의 하위 디렉터리 목록이 표시됩니다.

저는 데이터 항목의 ID에 힙을 저장하는 것을 제안합니다.저는 이게 최선의 계획이라고 생각합니다.많은 정보가 필요한 경우 힙 요소가 다른 힙의 인덱스가 될 수 있습니다.

예를 들어

{ "id:xxx", "id:yyy", "sub-heap-id:zzz"....}

만약 이것이 명확하지 않다면 댓글을 달아주시면 제가 집에 가서 더 설명하겠습니다.

색인을 만드세요!

http://www.mongodb.org/display/DOCS/Indexes

언급URL : https://stackoverflow.com/questions/1619058/storing-directory-hierarchy-in-a-key-value-data-store

반응형