私はexist-dbの初心者です。Java を使用して xml ドキュメントを作成しています。JAXB を介してデータを処理し、insert update を介してexist-db リソースに挿入します。現在、約 500 のノードでテストしていますが、数十のノードが実行されると、挿入ごとに最大 10 秒かかり始めます。私の XML には、次の一般的な構造があります。
<realestatedata>
<agents>
<author id="1">
<name>Author_A</name>
</author>
<author id="2">
<name>Author_B</name>
</author>
<portal id="1">
<name>Portal_A</name>
</portal>
</agents>
<artifacts>
<document id="1">
<latitude>51.37392</latitude>
<longitude>-0.00866</longitude>
<bathroom_number>1</bathroom_number>
<bedroom_number>3</bedroom_number>
<price>365000</price>
</document>
<theme id="1">
<name>Garden</name>
</theme>
<place id="1">
<name>BR4</name>
<location>
<lat>51.37392</lat>
<lon>-0.00866</lon>
</location>
</place>
</artifacts>
</realestatedata>
要素が正しい順序で配置されるようにするために、挿入更新に次のコードを使用しているため、そのタイプの新しいレコードが最初のレコードになるか、ID に基づいて同様の要素の最後に追加されます。
public void saveAuthor(Author author) {
XQueryService xQueryService = null;
CompiledExpression compiled = null;
int currentId = authorIdSequence.get();
StringWriter authorXml = new StringWriter();
try {
xQueryService = Utils.getXQeuryService();
if (getAuthorByName(author.getName()) == null) {
author.setId(String.valueOf(authorIdSequence.incrementAndGet()));
marshaller.marshal(author, authorXml);
if(currentId == 0){
compiled = xQueryService
.compile("update insert " + authorXml.toString()
+ " into //agents");
}
else{
compiled = xQueryService
.compile("update insert " + authorXml.toString()
+ " following //author[@id = '"+String.valueOf(currentId)+"']");
}
xQueryService.execute(compiled);
}
} catch (XMLDBException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
ドキュメント、場所などの他の要素に対して同じメソッドが実行されます。いくつかの更新の後、非常に遅くなります。1 つのレコードを挿入するのに最大 10 秒かかります。
私が見つけることができた関連リンクのみが無実です。