WildcardQuery-Erzeugung in neueren Lucene-Versionen langsamer

15/03/2016 - 18:00 von Christoph Schneegans | Report spam
Hallo allerseits!

Gegeben sei folgender Code:

@Test
public void performance()
throws Exception
{
for (int i = 0; i < 100_000; i++)
{
new org.apache.lucene.search.WildcardQuery(
new org.apache.lucene.index.Term("foo", "foo*"));
}
}

Ich stelle hier erhebliche Unterschiede in der Laufzeit fest:

• Mit Lucene 3.4.0 làuft dieser Code in 0,026 s durch.
• Mit Lucene 4.10.4 benötigt er schon 0,549 s.
• Und mit Lucene 5.5.0 benötigt er gar 2,601 s.

Ich habe bei meinen Tests auch nicht den Eindruck, daß Lucene 4.x und
5.x die investierte Zeit spàter, also bei der /Ausführung/ der Query,
wieder reinholen.

Die WildcardQuery wurde ja in 4.x als AutomatonQuery re-implementiert.
http://de.slideshare.net/otisg/fini...-in-lucene spricht
nun (auf Slide 9) von "improved performance", ganz im Gegensatz zu
meinen Erfahrungen.

Übersehe ich irgendwas Offensichtliches?

<http://schneegans.de/computer/safer/> · SAFER mit Windows
 

Lesen sie die antworten

#1 Marcel Mueller
15/03/2016 - 22:09 | Warnen spam
On 15.03.16 18.00, Christoph Schneegans wrote:
Gegeben sei folgender Code:

@Test
public void performance()
throws Exception
{
for (int i = 0; i < 100_000; i++)
{
new org.apache.lucene.search.WildcardQuery(
new org.apache.lucene.index.Term("foo", "foo*"));
}
}

Ich stelle hier erhebliche Unterschiede in der Laufzeit fest:

• Mit Lucene 3.4.0 làuft dieser Code in 0,026 s durch.
• Mit Lucene 4.10.4 benötigt er schon 0,549 s.
• Und mit Lucene 5.5.0 benötigt er gar 2,601 s.



Die haben halt die Nutzung der Systemressourcen optimiert. Die neuen
Versionen nutzen die Systemressourcen wesentlich effektiver aus als die
alten. ;-)

Ich habe bei meinen Tests auch nicht den Eindruck, daß Lucene 4.x und
5.x die investierte Zeit spàter, also bei der /Ausführung/ der Query,
wieder reinholen.



Das wird halt auch davon abhàngen, über welche Datenmenge er nachher
drüber rutschen muss.

Einen Overhead von 26µs für eine Volltext-Suchanfrage finde ich jetzt
nicht in irgendeiner Weise so beeindruckend, als dass sich darüber
irgendeine Diskussion lohnt.


Übersehe ich irgendwas Offensichtliches?



Was ist den das eigentliche Problem? Geht es den Kunden zu langsam? Hat
der Server nicht mehr genug CPU-Kerne, um die Anfragen zu bearbeiten?
Irgendetwas anderes?

Und hast Du mal getestet, ob nicht das Initialisieren der (größer
gewordenen) Bibliothek das ist, was langsamer geworden ist? Also mal
eine Anfrage vorher im Setup machen, was nicht zur Zeit dazu zàhlt.


Marcel

Ähnliche fragen