We are
testing basex to use with a huge database, and we have a performance problem.


At the
moment we have two small databases with thousands of documents to test:


·        
Authors,
2.000 documents, 2MBs aprox.

·        
Books
(3 per author) with 6.000 documents, 5MBs aprox.


We need
join and group results, and this takes a long time:


Query: <result>{for $Author in
(db:open('Authors')//businessEvent), $Book in (db:open('Books')//businessEvent)
for $income in distinct-values($Author//author/country) where
$Author//author/idauthor=$Book//book/idauthor group by $income return
<line><label>{ $income }</label><data>count($Book
)</data></line>}</result>


Compiling:

- rewriting where clause to predicate(s)

- pre-evaluating db:open("Authors")

- simplifying descendant-or-self step(s)

- pre-evaluating db:open("Books")

- simplifying descendant-or-self step(s)

- simplifying descendant-or-self step(s)

- swapping operands:
descendant::*:book/*:idauthor = $Author/descendant::author/idauthor

- simplifying descendant-or-self step(s)

- simplifying descendant-or-self step(s)


Result: element result { for $Author in
(document-node { "1" }, document-node { "2" },
...)/descendant::*:businessEvent for $Book in (document-node { "1-1"
}, document-node { "1-2" }, 
...)/descendant::*:businessEvent[descendant::*:book/*:idauthor
= $Author/descendant::author/idauthor] for $income in
fn:distinct-values($Author/descendant::author/country) group by $income :=
$income return element line { element label { $income }, element data {
"count($Book )" } } }


Timing:

 - Parsing:  1.01 ms

 -
Compiling:  3.99 ms

 -
Evaluating:  100725.38 ms

 -
Printing:  0.37 ms

 - Total
Time:  100730.77 ms


We have no
idea why it’s taking so long time to show the results.


If we don’t
group results it takes a long time too.


Regards,

Nuria                                     
_______________________________________________
BaseX-Talk mailing list
[email protected]
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

Reply via email to