2014-09-29 1 views
1

내 xquery는 40,000 개 이상의 파일을 검색하여 특정 요청이 있는지 여부를 확인합니다.X-Hive XQuery 최적화

예 :

declare option xhive:ignore-indexes 'resource-type-index'; 
    <cards>{ 

     for $doc in document('/repository/content')[starts-with(xhive:metadata(., 'docato-uri'),'/cards') and xhive:metadata(., 'docato-type') = 'XML_RESOURCE_TYPE' and (exists(xhive:metadata(.,'change-request')))] 
     return 
     for $innerVersionId in xhive:version-ids($doc) 
     let $innerCurrVersion := xhive:version($doc, $innerVersionId) 
     let $verid := xhive:metadata($innerCurrVersion , 'docato-version-id') 
     let $req := xhive:metadata($innerCurrVersion,'change-request') 
     return 
      if (contains(xs:string($req), '1023548')) then 
       <card> 
        <comment date="{xhive:metadata($innerCurrVersion, 'docato-checkin-date')}" 
          chgreq="{xhive:metadata($innerCurrVersion ,'change-request')}" 
          wcnum ="{xhive:metadata($innerCurrVersion, 'Workcard Number')}" 
          versionId="{xhive:metadata($innerCurrVersion , 'docato-version-id')}" 
          comment="{xhive:metadata($innerCurrVersion , 'docato-comment')}"/> 
       </card> 
      else() 
    }</cards> 

방법이 방법은 더 이상 시간이 소요되기 때문에 나는이 최적화합니까?

내가 그 X-하이브, 지금 XDB를 확인할 수 있습니다
+0

X-Hive는 EMC에 의해 꽤 오래 전에 인수되었습니다. 성능을 원하면 개발이 중단 된 구식의 지원되지 않는 제품을 사용하고 싶지 않을 수도 있습니다. – dirkk

+1

X-Hive는 실제로 EMC의 EMC Documentum 제품군 중 XDB로 잘 알려져 있습니다. 아마도 새로운 버전을 사용자가 사용할 수 있습니까? – adamretter

+0

감사합니다. @adamretter,이 사실을 분명히해야합니다. 나는 그것을 인식하고 있지만, 이름 바꾸기 때문에 다소 오래 된 버전이 여기에 사용된다고 생각됩니다. 그러나 이는 추측 일 뿐이므로 OP가 어떤 버전이 사용 중인지 명확하게 밝히는 것이 좋을 것이라고 생각합니다. – dirkk

답변

1

은 여전히 ​​매우 살아 나는 그것에 개발자입니다있는 그대로) 귀하의 질문에 관해서는

, 불행히도 많은 당신이 할 수있다. 사용중인 xDB 버전은 최신 버전의 문서를 효율적으로 쿼리 할 수 ​​있도록 지원합니다. 모든 버전을 검색하려고 할 때 엔진은 선택의 여지가 없으며 철저한 검색으로 되돌아갑니다.

xDB 10.4에서 우리는 문서의 모든 버전을 쿼리하고 색인을 생성하여 날짜 범위 내에서 효율적으로 검색 할 수있는 새로운 버전 데이터 형식을 도입했습니다. 불행히도 데이터 마이 그 레이션이 필요하므로 많은 경우 사용하지 않습니다. 너는이 순간에.

사용중인 xDB 버전에서 수행 할 수있는 유일한 작업은 검색중인 '카드'의 양을 제한하는 것입니다 (지금은 모든 카드를 검색하는 것 같습니다). 변경 요청은 최신 버전의 문서로 전달되므로 기존 색인을 사용하여 버전별로 스캔해야하는 문서의 양을 크게 제한 할 수 있습니다. 이 작업을 수행하는 한 가지 방법은 '1023548 1239123 3924923 등'공백으로 구분 된 목록과 함께 '변경 요청'메타 데이터 필드를 포함하는 것입니다. 그러면 전체 텍스트 메타 데이터 색인 (xhive : fts (xhive : metadata (. 변경 요청 '),'1023548 '))를 사용하여 일치하는 문서의 초기 세트를 가져온 다음 해당 문서에만있는 쿼리를 수행하십시오.

전혀 우아하지는 않지만 지금이 순간에 내가 생각할 수있는 최고.

+0

제안 해 주셔서 감사합니다. – Abi