2008-09-22 2 views
4

В нашем веб-приложении результаты поиска отображаются в сортируемых таблицах. Пользователь может щелкнуть по любому столбцу и отсортировать результат. Проблема несколько раз, пользователь выполняет широкий поиск и получает много возвращенных данных. Чтобы упростить работу с сортировкой, вам, вероятно, нужны все результаты, которые занимают много времени. Или я могу получить несколько результатов за раз, но сортировка на самом деле не будет работать хорошо. Какова наилучшая практика отображения отсортированных таблиц, которые могут содержать много данных?Лучший подход для сортируемой таблицы с большим количеством данных


Спасибо за все советы. Я обязательно перейду через них.

Мы используем существующую структуру Javascript, которая имеет сортируемую таблицу; «Множество» результатов означает сотни. Проблема в том, что наши пользователи находятся на каком-то удаленном узле, и большая задержка - это время сети для отправки/получения данных из центра обработки данных. Сортировка данных со стороны базы данных и отправка только одной страницы результатов за раз приятно; но когда пользователь нажимает на какой-либо заголовок столбца, выполняется еще одно круговое движение, которое всегда добавляет 3-4 секунды.

Ну, я думаю, что может быть проблемой сетевой команды :)

+0

Не могли бы вы предоставить некоторые сведения о том, какой тип базы данных вы используете и какой веб-стол используете? – 2008-09-22 21:10:41

ответ

3

Использование сортировки подкачки на уровне базы данных - правильный ответ. Если ваш запрос возвращает 1000 строк, но вы только покажете пользователю 10 из них, нет необходимости отправлять другие 990 по сети.

Вот пример mysql. Скажем, вам нужно 10 строк, 21-30, от «народа» таблицы:

 
SELECT * FROM people LIMIT 21, 10 
3

Вы должны делать подкачки обратно на сервере базы данных. Например. на SQL 2005 и SQL 2008 существуют методы подкачки. Я бы предложил посмотреть варианты подкачки для любой системы, на которую вы смотрите.

0

Вы можете выполнить сортировку на сервере. AJAX устранит необходимость полного обновления, но все равно будет задержка. Стороны, базы данных, как правило, очень быстро сортируются.

0

В этих ситуациях я использую методы на стороне SQL Server, которые не только используют базу данных для сортировки, но также используют пользовательский пейджинг, чтобы ТОЛЬКО возвращать нужные записи.

Это немного боль, чтобы перенести на первый взгляд, но производительность удивительна после этого!

0

Насколько велик объем данных? Сотни строк? Тысячи?

Сортировка может быть выполнена с помощью JavaScript без проблем Mochikit Sortable Tables. Однако, если данные занимают много времени для сортировки (скорее всего, второй или два [или три!]), Вы можете захотеть дать пользователю визуальный сигнал о том, что что-то происходит, и страница не просто замерзала. Например, коснитесь экрана (a la Lightbox) и отобразите «сортировку» анимации или текста.

2

Какую базу данных вы используете как там какой-то хороший вариант подкачки в SQL 2005 и выше с помощью ROW_NUMBER, чтобы позволить вам сделать подкачку на сервер. Я нашел этот хороший на Christian Darie's blog

eg Эта процедура используется для размещения страниц в категории. Вы просто переходите в нужный номер и количество продуктов на странице и т. Д.

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 
Смежные вопросы