큰 XML 파일에 대해 간단한 XQuery 파일을 실행하기 위해 일부 Xquery 코드 (SAXON 사용)로 작업하고 있습니다. (this.referenceDataPath에 위치)큰 XML 파일로 된 XQuery Java 성능
XML 파일은 300 만 "행"노드가 양식이 있습니다
<row>
<ISRC_NUMBER>1234567890</ISRC_NUMBER>
</row>
<row>
<ISRC_NUMBER>1234567891</ISRC_NUMBER>
</row>
<row>
<ISRC_NUMBER>1234567892</ISRC_NUMBER>
</row>
등 ...
XQuery에 문서 (this.xqueryPath에 위치를)이다
declare variable $isrc as xs:string external;
declare variable $refDocument external;
let $isrcNode:=$refDocument//row[ISRC_NUMBER=$isrc]
return count($isrcNode)
자바 코드는 다음과 같습니다
private XQItem referenceDataItem;
private XQPreparedExpression xPrepExec;
private XQConnection conn;
//set connection string and xquery file
this.conn = new SaxonXQDataSource().getConnection();
InputStream queryFromFile = new FileInputStream(this.xqueryPath);
//Set the prepared expression
InputStream is = new FileInputStream(this.referenceDataPath);
this.referenceDataItem = conn.createItemFromDocument(is, null, null);
this.xPrepExec = conn.prepareExpression(queryFromFile);
xPrepExec.bindItem(new QName("refDocument"), this.referenceDataItem);
//the code below is in a seperate method and called multiple times
public int getCount(String searchVal){
xPrepExec.bindString(new QName("isrc"), searchVal, conn.createAtomicType (XQItemType.XQBASETYPE_STRING));
XQSequence resultsFromFile = xPrepExec.executeQuery();
int count = Integer.parseInt(resultsFromFile.getSequenceAsString(new Properties()));
return count;
}
,
getCount 메소드는 XML 파일에서 많은 값의 존재를 확인하기 위해 여러 번 (예 : 1000000 회) 호출됩니다.
XQuery 쿼리의 현재 속도는 getCount를 호출 할 때마다 약 500 밀리 초이며 XML 문서가 메모리에 있고 쿼리가 준비된 것으로 간주되어 매우 느린 것처럼 보입니다.
XQuery를 사용하는 이유는 XML 파일이보다 복잡한 레이아웃을 갖는 향후 작업을위한 개념 증명입니다.
메모리가 문제가되지 않도록 i7에서 8GB RAM 코드를 실행하고 있습니다. 또한 프로그램의 할당 된 힙 크기를 늘렸습니다.
이 코드의 속도를 향상시킬 수있는 방법에 대한 제안 사항이 있으십니까?
감사합니다.
감사! Zorba 용 자바 API가 HTTP가 아닌 로컬 파일에서 XML 파일로 스트리밍 할 수 있습니까? – joechip
Zorba에는 Java API가 있지만 XQuery에서 직접 로컬 파일을 구문 분석 할 수 있습니다. 우리는 wikibooks 데이터 세트를 위해이 작업을 수행했습니다. http : //www.zorba-xquery를 참조하십시오.com/html/entry/2012/05/31/XML_Streaming – wcandillon
메모리에서 보유 할 수있는 단일 문서에 대해 많은 쿼리를 실행하는이 사용 사례에서 스트리밍이 이점이되어야하는 이유는 분명하지 않습니다. –