Vollständige Version anzeigen : Preisvergleich mit ZF
Hallo zusammen,
wollte Euch mein neuestes Projekt vorstellen:
Valoony Preisvergleich (http://www.valoony.de)
Es handelt sich dabei um einen Preisvergleich, bei dem alle Daten automatisch verarbeitet werden. Z.Zt. gibt es ca. 2 Mio. Produkte. Vielleicht ist es interessant, dass die Performance vom ZF selbst bei großen Abfragen und hohem Traffic sehr schnell sein kann.
Falls Fragen sind, einfach fragen...
KingCrunch
26.10.2009, 15:40
Also gefühlt lässt sich die Seite bei einigen Suchanfragen schon bisschen Zeit ... So geschätzt ab 2 bis 3 Worte als Suchbegriffe. Andererseits scheint er Modelbezeichner gerne zu ignorieren: Suche nach "Asus sfhjkds42543" ergab das Gleiche, wie ... neija, alle sonstigen Kombinationen aus real existierenden und erfundenden Modelnummern :D
Edit:
Ja, eindeutig Länge der Suchanfrage :D Bei 20 Wörtern (ok, unrealistisch, aber egal ;)) kann man nebenbei Kaffee kochen :rolleyes:
ice-breaker
26.10.2009, 18:14
So geschätzt ab 2 bis 3 Worte als Suchbegriffe.
jup.
Ob da Zend_Search_Lucene läuft :D
ja ja ich weiß :o
Die Suche ist noch nicht optimiert; da läuft auch noch kein Zend Lucene; z.Zt. arbeiten wir mit MySql Fulltext Search mit OR und Wildcards. D.h. wenn man Canon Ixu eingibt, sucht der nach "Canon* OR Ixu*". Ab 2 Bis 3 Suchbegriffe wirds dann langsam. Wird aber noch optimiert... Zend Lucene hatte ich noch keine Zeit, mich reinzuarbeiten, werde ich aber nun mal angehen...
Hab noch was vergessen. Es handelt sich auch um eine boolesche Suche; Suchabfragen in Anführungszeichen suchen dann natürlich genau nach dem String (@KingCrunch wg. den Modellbezeichnern); Also "Cano" ergibt was anderes als Cano ohne Anführungszeichen.
Darüber hinaus arbeiten wir noch mit Mysql Query Cache;
KingCrunch
26.10.2009, 21:09
Dann würd ich ja schonmal "AND" statt "OR" verwenden: Einmal spart das massig Performance, andererseits ist das in der Regel auch das, was gewollt ist. Wenn ich nach "Asus T91" suche, will ich ja nicht entweder oder, sondern ich will DEN Asus T91.
Edit:
Zusätzlich dazu bringt einen das hier mit den Anführungszeichen nicht viel, weil ich zumindest nicht weiß, ob ihr das als "Asus T91", "Asus eeePC T91", "Asus eee PC T91", ... speichert.
Edit2:
Vorallen weil ich jetzt auch noch festgestellt habe, dass ihr beide Schreibweisen ("eeePC" und "eee PC") verwendet :rolleyes:
ice-breaker
26.10.2009, 21:44
da läuft auch noch kein Zend Lucene
ist auch langsamer als Fulltext Indizes ;)
Dann würd ich ja schonmal "AND" statt "OR" verwenden: Einmal spart das massig Performance, andererseits ist das in der Regel auch das, was gewollt ist. Wenn ich nach "Asus T91" suche, will ich ja nicht entweder oder, sondern ich will DEN Asus T91.
hmm, google macht aber doch auch oder.
Ich denke mal man kann nicht ienfach sagen, dass es ein oder ist, aber Suchergebnisse mit einem And sollte eine höhere Gewichtung haben.
KingCrunch
26.10.2009, 22:12
hmm, google macht aber doch auch oder.jein, im Groben und Ganzen ist das schon ODER-verknüpft, wird aber noch gewichtet, unter Anderem danach, ob mehrere/alle Begriffe in einem Treffer gefunden wurden. Google ist allerdings ein schlechtes Beispiel, weil das noch nen ganzen Zacken komplizierter ist ;)
Ich denke mal man kann nicht ienfach sagen, dass es ein oder ist, aber Suchergebnisse mit einem And sollte eine höhere Gewichtung haben.Ich meinte auch nur, dass ein "UND" hier irgendwie eher den Ergebnissen entspricht, die ein Benutzer erwartet.
PatrickG
26.10.2009, 22:12
Ich glaub Google macht standartmäßig auch ein AND..
Wenn du z.B. auf http://www.google.de/search?q=asus+t91 gehst, und dann auf "Erweiterte Suche" gehst, steht die suche bei "Ergebnisse finden" unter "mit allen Wörtern", wenn man die suche dort bei "mit irgendeinem der Wörter" einträgt macht er einfach ein OR zwischen die Wörter.
Gruß
KingCrunch
26.10.2009, 22:14
Ich glaub Google macht standartmäßig auch ein AND..
Wenn du z.B. auf http://www.google.de/search?q=asus+t91 gehst, und dann auf "Erweiterte Suche" gehst, steht die suche bei "Ergebnisse finden" unter "mit allen Wörtern", wenn man die suche dort bei "mit irgendeinem der Wörter" einträgt macht er einfach ein OR zwischen die Wörter.
Gruß"Mit allen Wörtern" heißt hier bloss, dass er alle Wörter (unter anderem zur Gewichtung) verwendet, nicht aber zwangsläufig, dass alle Wörter auftreten müssen, was ein UND impliziert. Wie gesagt ist hier Google ein schreckliches Beispiel :rolleyes:
ice-breaker
26.10.2009, 22:17
K, wir meinten mal wieder das Gleiche, haben es aber anders ausgedrückt :D
Ich wollte eigentlich noch folgendes machen:
Wenn bei einer Suche "Asus T91" mit AND und Ohne Wildcard kein Ergebnis kommt, dann sollte die Suche mit OR durchgeführt werden. Das Ergebnis aus der 2. Suchabfrage würde zwar etwas länger dauern, aber dafür kommt das Ergebnis aus der 1. Suche schneller und genauer.
@ice-breaker: Ist Lucene wirklich langsamer als Fulltext?
DennisBecker
27.10.2009, 09:27
Ich wollte eigentlich noch folgendes machen:
Wenn bei einer Suche "Asus T91" mit AND und Ohne Wildcard kein Ergebnis kommt, dann sollte die Suche mit OR durchgeführt werden. Das Ergebnis aus der 2. Suchabfrage würde zwar etwas länger dauern, aber dafür kommt das Ergebnis aus der 1. Suche schneller und genauer.
Also Sinniger wäre, wenn "Asus T91" kein Ergebnis liefert, nach "Asus" AND "T91" zu suchen und falls das auch nichts bringt, nach "Asus" OR "T91" zu suchen.
Zend_Search_Lucene könnte problematisch werden, da ab einer gewissen Anzahl X an Einträgen die Geschwindigkeit leidet. Was ist denn dem Lucene "Dienst" Apache Solr? Damit könnte man wenigstens auch noch zukünftig vernünftig skalieren.
KingCrunch
27.10.2009, 09:29
Optimal wäre es, alle Vergleiche zu machen und dann absteigend zu sortieren :rolleyes: Sowas wie "Suche per OR, zähle alle Treffer in den jeweiligen Ergebnissen und sortiere danach"
Welche Maßnahmen habt ihr ergriffen, um die Webseite angenehm schnell darzustellen?
Bytecache?
Caching mit einem memcached oder so?
weitere Tricks, um das ZF zu beschleunigen?
So erstmal zur Suche; ich habe das Ganze nun optimiert und beschleunigt und es sollten auch "gute" Ergebnisse kommen, z.B. Suche nach "ASUS Barebone Vintage3 P5P43" dauert nun nur noch ca. 1sek; ich verwende nun das interne Ranking (score) von Mysql Fulltext und beschränke die Ausgabe auf 800 Produkte. der Flaschenhals lag gar nicht an der Suchabfrage auf den String selbst (die dauert nur 0.0xsek), sondern anschließend auf der Abfrage "such mir alle Produkte nach dem Suchstring gruppiert nach Kategorien und zähle die Produkte pro Kategorie"; die habe ich nun begrenzt. Wenn ich die Gruppierung weglassen würde, wäre das Ergebnis sehr schnell (ca. 0.xsek) da. Das Einzige, was ich nicht mehr abfrage sind Wildcards, also Asus* etc. Aber es kommen auch so gute Treffer. Mysql sucht übrigens automatisch nach AND bzw. OR, d.h. es wird automatisch beim Scoring berücksichtigt.
@MKI: Zur Zeit setze ich als Cache Backend Apc ein, damit habe ich gute Erfahrung; allerdings cache ich bislang nicht, außer
- Zend Loader PluginLoader Cache über Zend_Loader_PluginLoader::setIncludeFileCache('pat h/to/your/file.php');- MetadatenCache über
Zend_Db_Table_Abstract::setDefaultMetadataCache($c ache);Das war es auch schon an Caches.
Darüber hinaus habe ich noch folgendes gemacht:
- fast alle require_once Funktionen aus der Zend Library entfernt.
- meine View Helper alle in eine Klasse geschrieben, die Zend_View erweitert
hmmm, das wars auch schon, glaube ich...
Edit: die navigation wird auch gechached...
KingCrunch
27.10.2009, 13:46
- meine View Helper alle in eine Klasse geschrieben, die Zend_View erweitertDa wundere ich mich schon etwas. Was erhoffst du dir davon?
http://framework.zend.com/manual/en/performance.view.html
unter
E.5.1.2. Extend Zend_View to provide often used helper methods
KingCrunch
27.10.2009, 13:57
Ah, das Kapitel hab ich bisher immer nur so beiläufig überflogen :rolleyes:
Warum und wie man dabei etwas spart, war mir schon klar, ich frag mich bloss, ob sich das rechnet, weil als Kompromiss gibt man ein Teil des Designs auf.
Ah, das Kapitel hab ich bisher immer nur so beiläufig überflogen, (...) ich frag mich bloss, ob sich das rechnet, weil als Kompromiss gibt man ein Teil des Designs auf.
Man muss ja nicht immer umbedingt was von den Patterns halten. :P
ice-breaker
27.10.2009, 20:54
Man muss ja nicht immer umbedingt was von den Patterns halten. :P
Blasphemie! Das ist Blasphemie!
Hängt den Ketzer!
:D
Ich denke auch man sollte erstmal testen was es bringt, sofern pro View nicht hunderte View-Helper-Methoden aufgerufen werden, kann ich mir nur schwer vorstellen, dass es was bringt.
Blasphemie! Das ist Blasphemie!
Hängt den Ketzer!Hehehe :d:d:d:d:d:d:d:d
Ich denke auch man sollte erstmal testen was es bringt, sofern pro View nicht hunderte View-Helper-Methoden aufgerufen werden, kann ich mir nur schwer vorstellen, dass es was bringt.Denke ich auch. Hatte gerade zufällig getestet wielange es dauert 1000000 mal einen View zu klonen ^^ was ja der partialHelper macht. Nun es dauerte 3,2 Sekunden, bei 100 zeigte er mir an. 0.0003.
Ok ich schweife ab.
KingCrunch
28.10.2009, 09:35
Neija, das einige ViewHelper ausreißen ist ja nun unabhängig vom Konzept selbst (siehe auch Action-ViewHelper).
Sind den auch andere Dateiendungen als Import zugängig?
zb http://www.meinshop.de/export.php ?
KingCrunch
08.01.2010, 14:45
kA, wovon redest du? In den letzten 2 Monaten hat meiner Erinnerung etwas gelitten.
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.