7

Ich arbeite an einem großen Projekt, wo ich effiziente Möglichkeit für einen Benutzer präsentieren Daten in ein Formular eingeben müssen.Autocomplete-Optimierung für große Datensätze

Drei der Felder dieses Formulars erfordern einen Wert aus einer Teilmenge einer allgemeinen Datenquelle (SQL-Tabelle). Ich habe mit JQuery und JQuery UI eine Autocomplete erstellt, die auf einen generischen HttpHandler verweist.

Intern verwendet der Handler Linq-to-sql, um die Daten abzurufen, die für diese Tabelle erforderlich sind. Die Tabelle enthält etwa 10 verschiedene Spalten, und der linq-Ausdruck verwendet SqlMethods.Like(), um den einzelnen Suchbegriff in jedem dieser 10 Felder zu finden.

Das Problem ist, dass diese Tabelle einige 20K Zeilen enthält. Die automatische Vervollständigung funktioniert fehlerfrei, akzeptiert die schiere Menge an Daten, die dleays in der Nähe von etwa 6 Sekunden (beim Debuggen auf meinem lokalen Rechner) erscheinen, bevor es auftaucht.

Die JqueryUI-Autocomplete hat 0 Verzögerung, Abfragen auf die 3-Taste, und das Ergebnis der Post wird in einem Facebook-Stil mehrzeiligen auswählbaren Optionen gemacht. (Ich musste das Autocomplete-Plugin fast umschreiben ...).

Also das Problem ist Daten vs. Geschwindigkeit. Irgendwelche Gedanken, wie man das beschleunigen kann? Die einzigen zwei Gedanken, die ich hatte, waren die Daten zwischenzuspeichern (How/Where?); oder verwenden Sie gerade SQL-Datenleser für den Datenzugriff?

Alle Ideen würden sehr geschätzt werden! Danke,

<bleepzter/> 

Antwort

6

ich nur Rückkehr der ersten X Anzahl der Zeilen mit der .Take(10) Linq Methode aussehen würde. Das sollte zu einem sensbilen SQL-Aufruf führen, der Ihre Datenbank weniger belastet. Wenn der Benutzer eingibt, findet er immer weniger Übereinstimmungen, so dass er nur die Daten sehen kann, die er benötigt.

Ich denke normalerweise 10 Punkte ist genug für den Benutzer zu verstehen, was vor sich geht und immer noch zu den Daten, die sie schnell benötigen (siehe die amazon.com Suchleiste für ein Beispiel).

Offensichtlich, wenn Sie die Daten in einer sinnvollen Weise sortieren können, dann werden die 10 Ergebnisse viel wahrscheinlicher sein, um dem Benutzer zu geben, was sie schnell suchen.

+0

Danke, danke, danke! Es hat funktioniert wie ein Zauber! – bleepzter

+0

Hervorragender Ansatz zur automatischen Vervollständigung Ich sah wie diese Lösung aus Dank –

1

Die besten N Ergebnisse zurückgeben ist sicherlich eine gute Idee. Wir haben festgestellt (Abfrage einer möglichen Liste von 270K), dass die Rückkehr der Top 30 eine bessere Wette für den Benutzer ist, der findet, wonach sie suchen, aber das hängt vollständig von den Daten ab, die Sie abfragen.

Auch sollten Sie wirklich die Verzögerung auf etwas sinnvolles wie 100-300 ms fallen lassen. Wenn Sie die Verzögerung auf NULL setzen, sobald Sie den 3-Zeichen-Trigger drücken, effektiv JEDER. SINGLE. SCHLÜSSEL. SCHLAGANFALL. wird als neue Abfrage an Ihren Server gesendet. Dies könnte leicht den unbeabsichtigten und unerwünschten Effekt haben, die Reaktion sogar MEHR zu verlangsamen.

Verwandte Themen