Mailinglisten-Archive |
Hallo ! Gegeben sind mehrere gleichartige Tabellen (identische Struktur, nur durch den Namen unterschieden). Nun soll in diesen Tabellen gesucht werden, wobei die Anzahl der Tabellen nicht immer gleich ist, d.h. diese wird vom Benutzer gewaehlt. Da die Tabellen mitunter gross werden koennen, werden auch entsprechend viele Eintraege gefunden, der Benutzer soll letztlich in den Ergebnissen blaettern koennen. Und zu allem Ueberfluss muss das ganze auch noch halbwegs performant ablaufen. Ich hab' mir ein paar Gedanken gemacht, wobei mir folgende moegliche (und unmoegliche) Loesungen eingefallen sind: - naheliegend, aber gruselig: Einfach mehrere SELECT-Anweisungen abfeuern, d.h. pro Tabelle eine, die Ergebnisse anschliessend client-seitig zusammenbringen, um das Blaettern in den Ergebnissen zu ermoeglichen. -> Faellt als Loesung weg. Waere client-seitig ein grosser Aufwand, auch bzgl. des verbrauchten Speicherplatzes, da keine Beschraenkung per LIMIT moeglich ist, sondern zuerst immer alle Ergebnisse gelesen werden muessten. Ist nur sinnvoll bei einer einzigen Tabelle, koennte hierfuer als Spezialfall benutzt werden. - Nutzung von temporaeren Tabellen, Ueberfuehrung der Ergebnisse einzelner Suchanweisungen in die temporaere Tabelle, anschliessendes Auslesen per SELECT aus der temp. Tabelle. -> Schon besser, wobei die Anwendbarkeit von der Dauer der Erstellung der temporaeren Tabelle sowie der Suche in jener abhaengt. LIMIT ist nutzbar, insgesamt wenig Aufwand auf der Client-Seite. Damit ist auch bereits der Nachteil beschrieben - der Aufwand auf Datenbank-Seite ist recht hoch, pro Suche muessen evtl. mehrere temporaere Tabellen angelegt werden, da diese ja nach Ablauf der PHP-Anwendung wieder zerstoert werden, jedes Blaettern ist damit genauso kostenintensiv wie die erste Suche. Ich habe dies mal ausprobiert mit nur wenigen Tabellen und wenigen Eintraegen - die Ergebnisse haben mich nicht ueberzeugt. - Verwaltung eigener temporaerer Tabellen bzw. Caching. Dabei wuerde bei Bedarf eine Tabelle angelegt, die aus den fuer die Suche relevanten Daten der anderen Tabellen besteht. "Bei Bedarf" waere dabei noch festzulegen, koennte beispielsweise in regel- maessigen Zeitabstaenden oder auch falls eine Suche gestartet wird und die Tabelle aelter als x Minuten ist, angelegt werden. Die Suche erfolgt dann nur in dieser zusammengefuehrten Tabelle. -> Hiervon verspreche ich mir eine schnelle Suche, LIMIT ist nutzbar. Der Nachteil waere wiederum hoeherer Aufwand auf Client-Seite, notwendig ist eine Verwaltung der temporaeren Tabelle. Ebenfalls wird die Suche, bei der die Tabelle erst erzeugt werden muss, vermutlich recht langsam, alle darauffolgenden jedoch wieder schneller. Ist evtl. verschmerzbar. - Paralleles Schreiben der Daten in die Nutz- sowie eine Suchtabelle... -> Habe ich eigentlich nicht in Betracht gezogen, ist IMHO keine schoene Loesung, client-seitig aufwendig und mit Modifikationen des bestehenden Codes verbunden, gleiche Vorteile wie bei der letzten Loesung. Wozu wuerdet Ihr tendieren? Gibt es weitere, respektive bessere Loesungen? Beste Gruesse, Ralf -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive