Лучший подход для сортируемой таблицы с большим количеством данных - PullRequest
4 голосов
/ 23 сентября 2008

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


Спасибо за все советы. Я непременно расскажу об этом.

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

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

Ответы [ 6 ]

3 голосов
/ 23 сентября 2008

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

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

SELECT * FROM people LIMIT 21, 10 
3 голосов
/ 23 сентября 2008

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

2 голосов
/ 23 сентября 2008

Какую базу данных вы используете, так как в SQL 2005 есть хороший вариант подкачки и выше, использующий ROW_NUMBER, чтобы позволить вам выполнять подкачку на сервере. Я нашел это хорошее в блоге Кристиана Дари

Например, эта процедура используется для вывода товаров в категории. Вы просто указываете желаемый номер страницы и количество продуктов на странице и т. Д.

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
0 голосов
/ 23 сентября 2008

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

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

0 голосов
/ 23 сентября 2008

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

Поначалу это немного сложно реализовать, но потом производительность просто потрясающая!

0 голосов
/ 23 сентября 2008

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

...