Frage

Auf unserer Web-Anwendung, werden die Suchergebnisse in sortierbare Tabellen angezeigt. Der Benutzer kann auf einem beliebigen Spalte klicken und das Ergebnis sortieren. Das Problem ist, einige Male, der Benutzer hat eine breite Suche und bekommt eine Menge Daten zurückgegeben. Um die sortierbare Teil der Arbeit zu machen, müssen Sie wahrscheinlich alle Ergebnisse, das eine lange Zeit in Anspruch nimmt. Oder ich kann zu einem Zeitpunkt nur wenige Ergebnisse abzurufen, aber dann sortiert wird nicht wirklich gut funktionieren. Was ist die beste Praxis sortierbare Tabellen angezeigt werden, die viele Daten enthalten könnten?


Vielen Dank für all die beraten. Ich werde sicherlich über diese gehen.

Wir verwenden einen vorhandenen Javascript-Framework, das die sortierbare Tabelle hat; „Lose“ der Ergebnisse bedeutet Hunderte. Das Problem ist, dass unsere Benutzer an einem entfernten Standort sind und viel Verzögerung ist die Netzwerk-Zeitdaten aus dem Rechenzentrum zu senden / empfangen. Sortieren der Daten in der Datenbank Seite und nur eine Seite wert der Ergebnisse zu einer Zeit senden ist schön; aber wenn der Benutzer eine Spaltenkopf klickt, wird eine weitere Rundfahrt gemacht, die immer 3-4 Sekunden hinzufügen.

Nun, ich denke, das könnte das Netzwerk-Team Problem sein:)

War es hilfreich?

Lösung

Mit auf Datenbankebene Sortier Paging ist die richtige Antwort. Wenn die Abfrage 1000 Zeilen zurückgibt, aber Sie werden nur den Benutzer 10 von ihnen zu zeigen, gibt es keine Notwendigkeit für die anderen 990 über das Netzwerk gesendet werden.

Hier ist ein Beispiel mysql. Sagen Sie brauchen 10 Zeilen, 21-30, aus der 'Volk' Tabelle:

SELECT * FROM people LIMIT 21, 10 

Andere Tipps

Sie sollten Paging auf dem Datenbank-Server tun zurück. Z.B. auf SQL 2005 und SQL 2008 gibt es Techniken Paging. Ich würde vorschlagen, auf Paging-Optionen suchen welches System Sie suchen auf.

Welche Datenbank verwenden Sie wie es einige gute Paging-Option in SQL 2005 und aufwärts mit ROW_NUMBER Sie ermöglichen Paging auf dem Server zu tun. Ich fand dieses gut auf Christian Darie Blog

zB dieses Verfahren, das auf Seite Produkte in einer Kategorie verwendet wird. Sie passieren nur in der Seitennummer Sie und die Anzahl der Produkte auf der Seite usw. möchten

CREATE PROCEDURE GetProductsInCategory
(@CategoryID INT,
@DescriptionLength INT,
@PageNumber INT,
@ProductsPerPage INT,
@HowManyProducts INT OUTPUT)
AS

-- declare a new TABLE variable
DECLARE @Products TABLE
(RowNumber INT,
 ProductID INT,
 Name VARCHAR(50),
 Description VARCHAR(5000),
 Price MONEY,
 Image1FileName VARCHAR(50),
 Image2FileName VARCHAR(50),
 OnDepartmentPromotion BIT,
 OnCatalogPromotion BIT)

-- populate the table variable with the complete list of products
INSERT INTO @Products
SELECT ROW_NUMBER() OVER (ORDER BY Product.ProductID),
       Product.ProductID, Name, 
       SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description,
       Price, Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM Product INNER JOIN ProductCategory
  ON Product.ProductID = ProductCategory.ProductID
WHERE ProductCategory.CategoryID = @CategoryID

-- return the total number of products using an OUTPUT variable
SELECT @HowManyProducts = COUNT(ProductID) FROM @Products

-- extract the requested page of products
SELECT ProductID, Name, Description, Price, Image1FileName,
       Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM @Products
WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage
  AND RowNumber <= @PageNumber * @ProductsPerPage

Sie können die Sortierung auf dem Server tun. AJAX würde die Notwendigkeit einer vollständigen Aktualisierung beseitigen, aber es würde immer noch eine Verzögerung. Seiten, Datenbanken eines im Allgemeinen sehr schnell bei Sortierung.

Für diese Situationen, die ich Techniken auf der SQL-Server-Seite verwenden, das nicht nur die Datenbank für die Sortierung nutzen, sondern auch benutzerdefinierten Paging verwenden, um nur die spezifischen Datensätze zurück benötigt.

Es ist ein bisschen wie ein Schmerz zunächst implemement, aber die Leistung ist erstaunlich danach!

Wie groß ist „eine Menge“ von Daten? Hunderte von Zeilen? Tausende?

Die Sortierung kann über JavaScript erfolgen schmerzlos mit Mochikit Sortable Tabellen . Wenn jedoch die Daten, die eine lange Zeit dauern, sortieren (wahrscheinlich eine oder zwei Sekunden [oder drei!]), Dann mögen Sie vielleicht dem Benutzer einig visuellen Hinweis geben, dass soming geschieht, und die Seite nicht nur einfrieren. Zum Beispiel tönt den Bildschirm (a la Lightbox) und zeigt eine "Sortierung" Animation oder Text.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top