Comparing the techniques - XPath with XQuery or XSLT and ripgrep:
- Solution 1 (M.H.):
//comment[contains(.,'searchpattern')]
- Solution 2 (M.S.):
//comment[contains(text(),'searchpattern')]
- Solution 3 (M.K.):
//text()[parent:comment][contains(.,'searchpattern')]
Platform:
MacBook, i5, macOS v10.15.4, 16GB RAM
XML Database:
Size: 2.46GB
Number of comment element nodes (have a single text node where the pattern will be searched) = 5914102
Number of other element nodes (not comment) = 11829597
XQuery v3.1, BaseX v9.3.2
> time java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX -bsolution=1 -bdatabase=DB50C1000000P -bpattern=Foo4711 run.xqy
Solution 1: Pattern found
java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX run.xq 28,96s user 2,82s system 188% cpu 16,826 total
> time java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX -bsolution=1 -bdatabase=DB50C1000000P -bpattern=Foo4711a run.xqy
Solution 1: Pattern not found
java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX run.xq 42,62s user 4,05s system 140% cpu 33,233 total
> time java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX -bsolution=2 -bdatabase=DB50C1000000P -bpattern=Foo4711 run.xqy
Solution 2: Pattern found
java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX run.xq 29,25s user 2,70s system 196% cpu 16,271 total
> time java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX -bsolution=2 -bdatabase=DB50C1000000P -bpattern=Foo4711a run.xqy
Solution 2: Pattern not found
java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX run.xq 47,45s user 4,84s system 143% cpu 36,341 total
> time java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX -bsolution=3 -bdatabase=DB50C1000000P -bpattern=Foo4711 run.xqy
Solution 3: Pattern found
java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX run.xq 30,09s user 2,70s system 195% cpu 16,773 total
> time java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX -bsolution=3 -bdatabase=DB50C1000000P -bpattern=Foo4711a run.xqy
Solution 3: Pattern not found
java -Xmx10g -cp /Users/ms/Projekte/basex/BaseX.jar org.basex.BaseX run.xq 45,42s user 4,32s system 148% cpu 33,413 total
XSLT v3.0, SaxonEE v9-9-1-7J
> time java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xml -xsl:run.xsl -o:out.xml database=DB50C1000000P.xml pattern=Foo4711 solution=1
Solution 1: Pattern found
java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xm 27,43s user 5,88s system 134% cpu 24,719 total
> time java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xml -xsl:run.xsl -o:out.xml database=DB50C1000000P.xml pattern=Foo4711a solution=1
Solution 1: Pattern not found
java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xm 30,28s user 9,06s system 131% cpu 29,964 total
> time java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xml -xsl:run.xsl -o:out.xml database=DB50C1000000P.xml pattern=Foo4711 solution=2
Solution 2: Pattern found
java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xm 27,55s user 4,44s system 158% cpu 20,202 total
> time java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xml -xsl:run.xsl -o:out.xml database=DB50C1000000P.xml pattern=Foo4711a solution=2
Solution 2: Pattern not found
java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xm 34,47s user 5,24s system 177% cpu 22,324 total
> time java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xml -xsl:run.xsl -o:out.xml database=DB50C1000000P.xml pattern=Foo4711 solution=3
Solution 3: Pattern found
java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xm 16,13s user 0,62s system 130% cpu 12,816 total
> time java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xml -xsl:run.xsl -o:out.xml database=DB50C1000000P.xml pattern=Foo4711a solution=3
Solution 3: Pattern not found
java -Xmx10g -jar /Users/ms/Projekte/SaxonEE9-9-1-7J/saxon9ee.jar -s:empty.xm 47,26s user 1,56s system 110% cpu 44,247 total
Result
Good Case: There is a at least one comment with the search pattern
Fastest (16,13s):
Solution 3 (M.K.) on XSLT v3.0, SaxonEE v9-9-1-7J
Slowest (30,09s):
Solution 3 (M.K.) on XQuery v3.1, BaseX v9.3.2
Bad Case: There is no comment with the search pattern
Fastest (30,28s):
Solution 1 (M.H.) on XQuery v3.1, BaseX v9.3.2
Slowest (47,26s):
Solution 3 (M.K.) on XQuery v3.1, BaseX v9.3.2
Scripts and XML Database
https://gitlab.com/ms152718212/xslxqyfindpattern
Solutions with non XML technologies
ripgrep (rg)
> time rg -C 5 'Foo4711' DB50C1000000P.xml | rg -c -U '<comment>(?s:[^<]*)Foo4711(?s:[^<]*)</comment>'
4
rg -C 5 'Foo4711' DB50C1000000P.xml 0,27s user 0,72s system 90% cpu 1,094 total
rg -c -U '<comment>(?s:[^<]*)Foo4711(?s:[^<]*)</comment>' 0,01s user 0,01s system 1% cpu 1,092 total
> time rg -C 5 'Foo4711a' DB50C1000000P.xml | rg -c -U '<comment>(?s:[^<]*)Foo4711a(?s:[^<]*)</comment>'
rg -C 5 'Foo4711a' DB50C1000000P.xml 0,24s user 0,66s system 93% cpu 0,957 total
rg -c -U '<comment>(?s:[^<]*)Foo4711a(?s:[^<]*)</comment>' 0,01s user 0,01s system 1% cpu 0,957 total