Hi Christian,

we are facing on reports generation using xQuery/xPath. in this case we are getting data from 54000 xml files. it is taking more than 23 hours for generating report.

My hardware :

Linex and ram 25 Gb

And Please check given below my query:

Multilevel activity Summary report (service number  level drill down report):1- day

declare function local:getLabelName($serNo as xs:string) {   let $doc := collection('LabelCollection_1573625140685') for $label in $doc//row[@ser_no = $serNo] order by $label/@upDate descending return $label   };declare function local:getHHMMSSFromNumber($num as xs:integer) {  let $ss := xs:integer($num mod 60)  let $mm1 := xs:integer($num div 60)  let $mm := xs:integer($mm1 mod 60)  let $hh := xs:integer($mm1 div 60)  let $hhFinal := if(string-length(xs:string($hh)) >= 2) then $hh else (concat('0', $hh))  let $mmFinal := if(string-length(xs:string($mm)) >= 2) then $mm else (concat('0', $mm))  let $ssFinal := if(string-length(xs:string($ss)) >= 2) then $ss else (concat('0', $ss))  return concat($hhFinal,':',$mmFinal,':',$ssFinal) }; declare function local:getMinutesFromDutation($duration as xs:string) {   let $duration := tokenize($duration, ":")   let $hh := $duration[1]   let $mm := $duration[2]   let $ss := $duration[3]   return number(data($hh)) * 60 + number(data($mm)) + floor(number(data($ss)) div 60) }; declare function local:getViewPontChargesData() {           let $Rows := (collection("867509_Voice_OCTOBER-19_Unbilled_1")/SUBCUSTBRK[AccNo[@NO = (6945045)]][Site[@NAME='']][DOB >='2019-10-01' and DOB <='2019-10-31'])        let $serviceNumbers := string-join(distinct-values(data($Rows/CONN/@NO)),',')          let $eachServiceNumber := tokenize($serviceNumbers, ",")         for $service at $index in $eachServiceNumber          let $serviceNumber := $service      let $serviceData := $Rows[CONN[@NO = $serviceNumber]]/DETAIL/TRANSACTION/SUB_SECTION          let $nCalls := xs:decimal(sum(data($serviceData/@Calls)))          let $totalAmt := round-half-to-even(sum(data($serviceData/@Amt)), 3)          let $BNCount := count(data(distinct-values($serviceData/../../../CONN/@NO)))    let $durSum := sum(data($serviceData/@Duration))      let $totDur := local:getHHMMSSFromNumber(xs:integer($durSum))          let $tMs := local:getMinutesFromDutation($totDur)          let $totalDurSec := $durSum         return  <ROW><SNB>{ $serviceNumber }</SNB><SNL>{ distinct-values(local:getLabelName($serviceNumber)[position()=1]) }</SNL><CLS>{ $nCalls }</CLS><DUR>{ $totDur }</DUR><DUS>{$totalDurSec}</DUS><MIN>{ $tMs }</MIN><AM>{                              if($tMs > 0 and $nCalls > 0) then                      (let $avgMin := round-half-to-even($tMs div $nCalls, 2)                       return $avgMin)                              else (0.00)                            }</AM><AMT>{ $totalAmt }</AMT><PC>{                               if($totalAmt > 0 and $nCalls > 0) then                                 (let $avgPeRCall := round-half-to-even($totalAmt div $nCalls, 2)                                  return $avgPeRCall)                               else (0.00)                             }</PC><PM>{                                if($totalAmt > 0 and $tMs > 0) then                                  (let $avgPerMin := round-half-to-even($totalAmt div $tMs, 3)                                   return $avgPerMin)                                else (0.00)                              }</PM><PN>{                                if($totalAmt > 0 and $BNCount > 0) then                                  (let $avgPerNum := round-half-to-even($totalAmt div $BNCount, 3)                                   return $avgPerNum)                                else (0.000)                              }</PN></ROW>       }; let $viewPointCData := local:getViewPontChargesData() let $TotCalls := xs:decimal(sum(data($viewPointCData/CLS))) let $TotAmt := sum(data($viewPointCData/AMT)) let $totalDur := local:getHHMMSSFromNumber(xs:integer(sum($viewPointCData/DUS))) let $totalMins := local:getMinutesFromDutation($totalDur) let $TAPAmt := sum(data($viewPointCData/PN)) let $TotNoofAccs := count(data($viewPointCData/SNB)) return   (     if(count($viewPointCData) > 0) then       (for $eachRow in $viewPointCData        let $eachAmount := $eachRow/AMT        return          <R>{     $eachRow/node(),     <PER>{      if($eachAmount > 0 and $TotAmt > 0) then        (let $perAll := round-half-to-even(($eachAmount div $TotAmt) * 100, 2)         return $perAll)      else (0.00)    }</PER>   }</R>,        <R><SNB>Total/Average</SNB><CLS>{ $TotCalls }</CLS><DUR>{ $totalDur }</DUR><MIN>{  format-number($totalMins,'0.000') }</MIN><AM>{                   if($totalMins > 0 and $TotCalls > 0) then                     (let $avgMinutes := round-half-to-even($totalMins div $TotCalls, 2)                      return  format-number($avgMinutes,'0.000'))                   else (0.000)                 }</AM><AMT>{  format-number($TotAmt,'0.000') }</AMT><PC>{                  if($TotAmt > 0 and $TotCalls > 0) then                    (let $avgCallAmt := round-half-to-even($TotAmt div $TotCalls, 2)                     return  format-number($avgCallAmt,'0.000'))                  else (0.000)                          }</PC><PM>{                             if($TotAmt > 0 and $totalMins > 0) then                     (let $avgPerMin := round-half-to-even($TotAmt div $totalMins, 3)                      return  format-number($avgPerMin,'0.000'))                             else (0.000)                           }</PM><PN>{                             if($TAPAmt > 0 and $TotNoofAccs > 0) then                     (let $avgNumAmt := round-half-to-even($TAPAmt div $TotNoofAccs, 3)                      return  format-number($avgNumAmt,'0.000'))                             else (0.000)                           }</PN><PER>100</PER></R>)     else ()   )


Please suggest way forward.

Regards,
YSL

On Tue, Dec 17, 2019 at 12:29 PM Christian Grün <christian.gruen@gmail.com> wrote:
Hi Stefan,

We could consider an extension of the current solution.

> So only for GET - not POST.
> Our current Webservices rely heavily on POST (+Response) though :(

Have you checked the remaining default options? What other custom
settings may you need to rely on?

Cheers,
Christian



> -----Ursprüngliche Nachricht-----
> Von: Stefan Koch [mailto:koch@buit-solutions.com]
> Gesendet: Mittwoch, 20. November 2019 14:45
> An: basex-talk@mailman.uni-konstanz.de
> Betreff: Re: [basex-talk] HTTPServer + gzip compression
>
>
> Hi,
>
> great to hear! So it's coming in 9.3
>
> We have been running base.war via tomcat with gzip instead - but it wasn't optimal for our solution.
>
>
> Thx for fixing
>
> Stefan
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: Christian Grün [mailto:christian.gruen@gmail.com]
> Gesendet: Mittwoch, 20. November 2019 13:26
> An: Omar Siam <Omar.Siam@oeaw.ac.at>
> Cc: BaseX <basex-talk@mailman.uni-konstanz.de>
> Betreff: Re: [basex-talk] HTTPServer + gzip compression
>
>
> Thanks for the confirmation!
>
>
>
> Omar Siam <Omar.Siam@oeaw.ac.at> schrieb am Mi., 20. Nov. 2019, 12:41:
>>
>> Yes, it works! 1000 entries of XML in a JSON wrapper from my data are
>> now transfered as 193 KB instead of 1.6 MB. Not bad. Unfortunately on
>> localhost that doesn't make much of a difference in overall timing as
>> measured in Chrome's development tools. For real internet connections I
>> think this is quite an improvement.
>>
>> Best regards
>>
>> Omar Siam
>>
>> Am 19.11.2019 um 01:28 schrieb Christian Grün:
>> > The snapshot has been updated.
>> > Is it working now?
>> >
>> >
>> >
>> > On Mon, Nov 18, 2019 at 6:41 PM Omar Siam <Omar.Siam@oeaw.ac.at> wrote:
>> >> I just wanted to try gzip http compression and downloaded the current build BaseX93-20191116. The option is not there anymore. What happened?
>> >>
>> >> Best regards
>> >>
>> >> Omar Siam