2010-12-15 7 views
0

Vielen Dank für Ihre Zeit und Aufmerksamkeit.ASP.NET super schnelle Datensuche für Autovervollständigung, bitte führen Sie mich

Ich habe ajxtookit Autocomplete und requriment ist es super schnell zu machen. Momentan sind Daten in der Datenbank und bei jeder Anfrage wird sie geholt und kommt aus der Datenbank. Diese Daten sind Kontakte und Adressen und oft werden neue Datensätze in den Tabellen hinzugefügt. Es gibt 3 Lösungen, die in den Sinn kommen. Bitte führen Sie mich, was Sie vorschlagen und was Sie fühlen, ist das Beste.

  1. Lassen Sie die Daten in der Datenbank, nur tun Indizierung und wenn möglich einige Verbindung Polling, so dass Verbindungsaufbau Zeit gespeichert werden kann.

  2. Daten im Anwendungsserver zwischenspeichern. Verwenden Sie Linq, um abzufragen.

  3. Suche nach sortierten Daten in einer Datei.

Bitte führen Sie und helfen Sie mir.

Dank

Antwort

3

Wenn Ihre Daten oft nicht sehr ändern, würde ich mit server-side caching gehen.

+0

Frédéric Hamidi, Daten werden nicht wie jede Minute werden zu ändern, aber es wird zu ändern werden. Bitte führen Sie es an. Welche Datenstruktur sollte ich zum Speichern von Daten verwenden? Wie sollte Cache aktualisiert werden? und einen Ratschlag, um linq schnell zu den Daten abzufragen? – haansi

+0

@haansi, Sie sollten sich keine Sorgen über die zu verwendende Datenstruktur machen. Ihr 'AutoCompleteExtender' sollte einen Web-Service (oder eine Seitenmethode) aufrufen, um die Daten zu erhalten, und die Ausgabe dieses Web-Service wird von ASP.NET zwischengespeichert, so dass sie nicht jedes Mal die Datenbank trifft. Wenn Sie das Caching so konfigurieren, dass es nach etwa 5 Minuten abläuft, sollten Sie immer über relativ aktuelle Daten mit einer höheren Leistung verfügen. –

1

Hier ein paar Tipps:

  • Verwenden Sie eine gespeicherte Prozedur für die Datenbank Arbeit - optimieren sowie vernünftigerweise möglich ist (Indizes, Hinweise, Ansichten, etc.). Mithilfe einer gespeicherten Prozedur kann der Ausführungsplan im DB-Modul "zwischengespeichert" werden, so dass er nicht jedes Mal neu berechnet werden muss. Verwenden Sie nicht LINQ oder ADO.NET - dies sind Overheads für Providerübersetzungen, die Sie sich in diesem speziellen Szenario nicht leisten können - gehen Sie direkt zu nativem SQL. Die Verwendung einer Stored Procedure bedeutet, dass Sie natives SQL von Anfang an schreiben, im Gegensatz zu LINQ-SQL/LINQ-Entities, bei denen der Ausdrucksbaum in natives SQL übersetzt werden muss. Sie können sich diesen Overhead nicht leisten (müssen Sie nicht). Natürlich, abhängig von Ihrem ORM (wenn Sie einen haben), gibt es Schritte, um dies zu kontern, wie kompilierte Abfragen in Entity Framework.

  • Cache Option # 1 - "Letzte Abfragen". Wir haben eine "SearchQuery" -Cache-Tabelle. Wir verfolgen die Suchanfragen, und was "übereinstimmende" Datensätze sind, wird dagegen gehalten. (So ​​"New York" könnte "NY", "New York", "New York", "NYC" alle damit verbunden haben). Auf diese Weise müssen wir nicht immer den passenden Datensatz für die Autocomplete-Benutzerabfrage "herausfinden" (egal, ob SQL Server FTS, T-SQL LIKE oder LINQ/String-Operationen)). Dies kann Ihnen viel Zeit sparen. Sie können "die letzten 100 Suchen" im Speicher zwischenspeichern, um eine zusätzliche Geschwindigkeit hinzuzufügen.

  • Cache Option # 2 - "Daten". Cache das Ergebnis des Datenbankaufrufs auf dem Webserver. Der Cache-Schlüssel sollte mit den Parametern der gespeicherten Prozedur übereinstimmen.

  • Cacheoption # 3 - "Ausgabe (JSON/XML)". Ich nehme an, dass Sie ASP.NET Web Forms und nicht MVC verwenden. Sie haben also einen ASMX/WCF Web Service, der auf Ihre Auto-Complete-Anrufe reagiert. Sie können die Ausgabe dieses Webmethodenaufrufs unter zusätzlich zwischenspeichern, um die tatsächlichen Daten zwischenzuspeichern.Seien Sie jedoch vorsichtig, dass das kombinierte Caching von Ausgabe/Daten "veraltete" Daten verursachen kann, wenn die Abläufe nicht effektiv behandelt werden.

HTH

+1

-1 RTFM. Lass uns anfangen - gespeicherte Prozeduren geben dir nichts seit 15 Jahren oder so. ALLE Ausführungspläne werden zwischengespeichert. Es ist klar in jeder SQL Server-Dokumentation seit SQL Server 2000 angegeben. – TomTom

+0

@TomTom - Ich weiß, dass alle Abfragepläne zwischengespeichert werden, wenn Sie meine Antwort richtig lesen, bezog ich mich auf etwas wie LINQ-SQL vs eine Stored Procedure verwenden. LINQ-SQL muss die LINQ-Ausdrucksbaumstruktur mit nativem SQL kompilieren, dieser Übersetzungsprozess ist umständlich. Wenn Sie eine gespeicherte Prozedur verwenden, wird dieser Übersetzungsprozess übersprungen. Und was meinst du mit "gespeicherte Prozeduren geben dir nichts seit 15 Jahren oder so."? – RPM1984

+4

@ TomTom: Ihre Kommentare machen keinen Sinn. – Hogan

Verwandte Themen