When the solution matters

Registrieren Einstieg Dokumentation Code Archiv Mail-Archiv Support Programme

Optimal Suchen

 

Wie suche ich in mehreren Millionen Datensätzen optimal?

Frage: Wie gestalte ich in 4D eine optimale Suchen in mehreren Millionen Datensätzen?
Ich hätte (natürlich) gerne möglichst kurze Antwortzeiten.

Ich arbeite derzeit mit einer verknüpften Suche nach folgendem Schema:

QUERY([Personen];[Personen]Name=Var_Name;*)
QUERY([Personen];&;[Personen]str=Var_Strasse;*)
QUERY([Personen];&;[Personen]Ort=Var_Ort;*)
QUERY([Personen];&;[Personen]tel1=Var_Tel)

Antwort: Verschachtelte Suchen bringen Sie immer ans Ziel. Bei Suchen in einem Millionen-Datenbestand sind aber drastisch kürzere Antwortzeiten zu realisieren. Die Optimierungen sind vor allem für den Client/Server Betrieb wichtig:

1.) Die Datenfelder ,die durchsucht werden sollen, müssen indiziert sein, um möglichst schnell suchen zu können!

2.) Der 4D Index sollte auf maximale Suchperformance eingestellt sein. Dieses erneuerte Indexverfahren steht Ihnen in 4D seit 4D Version 6.5 zur Verfügung. Weitere Optimierungen in Version 6.7 steigern auch hier die Geschwindigkeit! (s. auch Handbuch 4th Dimension Designmodus)

3.) Es gilt: Eine Suche ist um so schneller, je geringer die Trefferzahl. Für Suchzeiten unter 1 Sekunde muss die maximale Trefferrate sehr klein sein, sagen wir unter 1000. Gemeint ist nicht die endgültige Zahl der Treffer, sondern das Ergebnis jeder einzelnen Suche. Zum Beispiel oben: Zuerst wird nach Name gesucht. Werden dabei 20.000 gefunden, kann das schon länger als 1 Sekunde dauern. Hierbei nimmt das Bereitstellen der gefundenen Datensätze die meiste Zeit in Anspruch. Erst wenn das erste Suchergebnis aufgebaut wurde, wird nach der Straße gesucht. Das Ergebnis wird als Schnittmenge ermittelt.

4.) Ausserdem sollten Sie den Such-Code optimieren. Wenn nur Name ausgefüllt ist, warum dann nach dem Rest suchen? Wenn dann die Straße erfasst wurde und schon nach Name gesucht wurde, kann man auch das optimieren. (Stichwort: aktuelle Auswahl!) Wenn die Telefonnummer schon erfasst wurde, warum dann überhaupt nach Name oder Straße suchen? Telefonnummern sind ziemlich eindeutig, dieses Feld muss zuerst gesucht werden (wenn ausgefüllt), weil die damit gefundene Menge sehr klein ist. Somit steht sie sehr schnell zur Verfügung.

5.) Mit dem Befehl SET QUERY LIMIT können Sie eine Suche auch nach einer bestimmten Anzahl gefundener Datensätze stoppen, wenn sicher ist, dass der Benutzer nicht das Gesamtergebnis benötigt. Beispiel: Suche vom Typ "Wort beginnt mit "A" in einem Wörterbuch.

6.) Manche Abfragen, z.B. komplexe Auswertungen, können mit SET QUERY DESTINATION auch als fertiges Suchergebnis abgespeichert werden, denn oft haben Suchergebnisse eine gewisse Lebensdauer (z.B. Kunden mit bestimmten Umsätzen). Solche Sets lassen sich zeitversetzt bilden bzw. im Hintergrund aktualieren. Der Benutzer erhält auf Anforderung sofort das fertige Ergebnis - es wartet quasi schon! (mehr Infos zum Thema Sets/Mengen in 4D)

7.) Eine weitere Optimierung der Suchgeschwindigkeit kann durch die Einführung eines zusammengesetzten Index erreicht werden. Typische Abfragen in Datenbanken bestehen aus den Datenfeldern: LKZ, PLZ und Name! Um bei einer derartigen Suche eine schnelle Antwortzeit zu erhalten, kann es sinnvoll sein, ein zusätzliches Datenfeld mit suchoptimiertem Index mitzuführen, in der Form "D85375Müller". Dieser "Trick" ermöglicht Ihnen eine eindeutige Antwort mit nur einer Suche nach " D85375@" statt zwei getrennte Suchen für Land und PLZ durchzuführen. Die Vorteile:

In der Praxis kann das dazu führen, dass ein Index auf den eigentlichen Feldern gar nicht mehr nötig ist. Die automatische Pflege dieses Hilfsdatenfeldes ist ein typisches Einsatzgebiet für Trigger.

8.) FAZIT: In der Praxis lässt sich die Suchgeschwindigkeit Ihrer 4D Anwendung durch diese Optimierungen noch weiter erhöhen! Die Anwender einer Lösung sind nicht (oder nur sehr selten) daran interessiert, wie der Entwickler " es so schön schnell gemacht hat". Sie werden vielleicht Lob ernten! (aber sicher immer die Kritik, wenn die Anwendung zu langsam ist...)

 

Meine Anregung zu dieser Seite:

Bemerkungen, Vorschläge, Fehler
Name
eMail

 

International | Firmenprofil | Kontakt | Site Map | © 4D 1995 - 2007 | Schriftgröße ändern: [A] [A] [A] | Diese Seite drucken - * Externer Link