0

私は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 秒かかります。

私が見つけることができた関連リンクのみが無実です。

http://sourceforge.net/mailarchive/forum.php?thread_name=s2s508bb1471004190430h8b42ee99o3f1835a9bc873d58%40mail.gmail.com&forum_name=exist-development

http://exist.2174344.n4.nabble.com/Slow-xquery-quot-update-insert-quot-performance-tt4657541.html#none

4

1 に答える 1