2009-07-08 14 views
0

Meine Website verfügt über Stadt, Bundesstaat und Postleitzahl Autocomplete-Funktion.So verbessern Sie asp.net AJAX Autocomplete-Leistung

Wenn der Benutzer 3 Zeichen einer Stadt in das Textfeld eingibt, werden die 20 Städte angezeigt, die mit diesen Zeichen beginnen. Ab jetzt, Autocomplete-Methode in unserer Anwendung Abfragen SQL 2005-Datenbank, die rund 900.000 Datensätze im Zusammenhang mit Stadt, Staat und PLZ hat.

Aber die Antwortzeit zum Anzeigen der Städte-Liste scheint sehr, sehr langsam zu sein.

Daher ist es für Leistungsoptimierung, eine gute Idee, die Standortdaten in Lucene-Index oder in Active Directory zu speichern und dann die Daten von dort zu ziehen?

Welcher wird schneller ... Lucene oder Active Directory? Und was sind die Vor- und Nachteile von jedem? Irgendwelche Vorschläge bitte?

Vielen Dank!

Antwort

2

Eine nukleare Option (wie das Ändern von Backing-Datenspeichern) sollte wahrscheinlich nicht die erste Option sein. Stattdessen müssen Sie untersuchen, warum die Abfrage so langsam ausgeführt wird. Ich würde mit der Abfrageleistung in SQL Profiler und dem Ausführungsplan in Sql Management Studio beginnen und sehen, ob mir irgendetwas Dummes wie ein Index fehlt. Nachdem Sie diesen Winkel abgedeckt haben, überprüfen Sie die Web-Schicht und stellen Sie sicher, dass Sie nicht übermäßig viele Daten senden oder auf andere Weise einen Schlüssel in die Arbeit werfen. Sobald Sie festgestellt haben, dass Sie sich im db oder am Kabel nicht selbst töten, ist es an der Zeit, über ein Reengineering nachzudenken.

Nebenbei bemerkt, würde mein Geld auf Sql Server die Daten Ende dieser Aufgabe besser als eine dieser Optionen behandeln. Lucene ist besser für Volltextsuchen geeignet und AD ist bestenfalls eine schlechte Datenbank.

+0

hallo ... Danke Form Ihre Kommentare ... Könnten Sie bitte erläutern, warum Active Directory eine schlechte Datenbank ist? –

+0

Weil Active Directory hierarchische Daten speichern soll und nicht wirklich darauf ausgerichtet ist, einen Datensatz aus Tausenden von Datensätzen in kürzester Zeit zu finden. – SolutionYogi

0

Ich würde die Daten in einer separaten Tabelle zwischenspeichern. Abhängig davon, wie frisch Sie diese Daten benötigen, können Sie sie so oft wie nötig neu erstellen.

--Create the table 
SELECT DISTINCT city, state, zip INTO myCacheTable FROM theRealTable 

--Rebuild the table anytime 
TRUNCATE TABLE myCacheTable 
INSERT INTO myCacheTable (city, state, zip) SELECT DISTINCT city, state, zip FROM theRealTable 

Ihre AJAX Anrufe können myCacheTable stattdessen zugreifen, die weit weniger Zeilen als 900k haben.

0

Hinzufügen zu dem, was Wyatt gesagt hat, müssen Sie zuerst herausfinden, welcher Bereich langsam ist? Ist die SQL-Abfrage langsam ODER die Netzwerkverbindung langsam zwischen dem Browser und dem Server? Oder ist da noch etwas anderes?

Und ich stimme völlig mit Wyatt überein, dass SQL Server viel besser für diese Aufgabe als Lucene und Active Directory geeignet ist.

Verwandte Themen