2013-03-14 2 views
10

내 응용 프로그램은 사람이 읽을 수있는 다양한 코드 형식을 가져 오기 위해 조회 작업을 통해 제공되는 문서의 값을 장식해야하는 경우가 있습니다.Marklogic 데이터베이스에 이름/값 쌍을 저장하는 가장 효율적인 방법은 무엇입니까

예를 들어 <product_code>PC001</product_code><product_code code='PC001'>Widgets</product_code>으로 반환되기를 원할 것입니다. 항상 product_code가 아닙니다. 비슷한 행동이 필요한 몇 가지 다른 유형의 코드가 있습니다. 그 중 일부는 몇 가지 예가 있고 그 중 몇 가지 예는 몇 천 개가 있습니다.

내가 알고 싶은 것은 그 중 가장 효율적인 방법을 저장하는 것입니다. 데이터베이스의 데이터? I는 두 가지 가능성을 생각할 수

1) 코드 유형 당 하나 개의 문서 요소 수와, 각각이 상기와 <product-code> 원소를 함유

<product-codes> 
    <product-code code = "PC001">Widgets</product-code> 
    <product-code code = "PC002">Wodgets</product-code> 
    <product-code code = "PC003">Wudgets</product-code> 
</product-codes> 

2) 코드 당 하나 개의 문서.

빨리 다른 것보다이 눈에 띄게 중 하나를인가 (물론, 두 옵션은 합리적인 인덱스를 포함 할 것)? 다른 옵션이 더 있습니까?

개념적으로 약간 깔끔하고 이해하기 쉽기 때문에 일반적으로 문서 당 하나의 '물건'을 유지하는 것이 좋습니다.하지만이 경우에는 매우 큰 숫자로 이어지는 것처럼 보입니다. 매우 작은 파일들. 그게 내가 걱정해야 할게 있니?

답변

8

독립적으로 검색해야하는 것은 자체 문서 또는 조각이어야합니다. 당신은 그냥 검색을하고있는 경우에는 다음 요소 속성 범위 지수는 반환 값에 매우 빠른해야한다 :

element-attribute-range-query(xs:QName('product-code'), xs:QName('code'), '=', 'PC001') 
=> 
Widgets 

조회가 모두 동일한 인덱스에서 발생하는 다양한 인덱스를 사용하여 상관없이 어떻게 덩어리 문서의. 따라서 실제 요소를 검색하기 위해 product-code에서 cts : search를 사용해야하는 경우가 아니면 문서를 청크하는 방법이 중요하지 않습니다.

6

또 다른 접근법은 이름 - 값 쌍을 나타내는 맵을 저장하는 것입니다.

let $m := map:map() 
let $_ := map:put($m, 'a', 'fubar') 
return document { $m } 

이것은 xdmp:document-insert를 사용하여 데이터베이스에 직접 저장 할 수있는 해시 맵의 XML 표현을 반환합니다. map:map을 생성자 함수로 사용하여 XML 맵을 기본 맵으로 되돌릴 수 있습니다. 네이티브지도는 xdmp:set-server-field을 사용하여 메모 할 수도 있습니다.

관련 문제