Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

Большой набор данных в гриде   Найти похожие ветки 

 
alsov ©   (2007-09-10 11:35) [0]

Приветствую, Мастера

Хотелось бы слышать ваше мнение по следующему вопросу.
Есть грид выводящий некий большой набор данных > 50000 записей. Есть возможность установить фильтр, а также осуществлять поиск по нему.
Проблема в том что грид грузиться достаточно долго (даже при использовании fetch). Первая пачка данных достаточно быстро отображается, но когда начинаешь скролить - висюки.

Плюс к этому пользователю не обязательно нужно видеть весь набор данных.

У меня есть несколько вариантов решения:
1. При открытии формы просить пользователя установить фильтр и если не установлен фильтр сообщение о том что будет долго работать.
2. По умолчанию устанавливать фильтр на то чтоб отображал скажем первые 500 записей.
3.Убрать скрол, выводить порциями например по 50 записей и сделать кнопки кнопки "<< Предыдущие 50" - "Следующие 50 >>"

Какой на ваш взгляд метод предпочтительней или есть еще варианты решения?

Использую Delphi+ODAC+Oracle+EhLib.

Заранее спасибо за отзывы.


 
clickmaker ©   (2007-09-10 11:40) [1]

1 или 3
в 2 фильтр, который ты сочтешь нужным по умолчанию, может не устроить пользователя. Ему, например, надо 10 первых и 20 последних


 
Ega23 ©   (2007-09-10 11:49) [2]

Ставить фильтры, причём много фильтров. фактически - по всем столбцам, что в гриде присутствуют.

Моя практика показывает, что пользователю редко больше 100 записей за раз нужны. Бывает, но редко. по крайней мере в тех системах, с которыми я сталкивался.


 
sniknik ©   (2007-09-10 11:52) [3]

> Использую Delphi+ODAC+Oracle+EhLib.
использовать Delphi+ADO+MSSQL+DBGrid тогда выборка из 50 тыс покажется мелочью. (проверил на базе Northwind с многократно задублированными данными из Customers - полный запрос на 186368 зап. всего 2,5сек на пентиуме в 3 GHg с 1 гиг оперативки (секунду полюбоваться на "часики" ничего страшного))

хотя конечно, правильно предоставлять пользователю только то что ему нужно а не "скопом".


 
Sergey13 ©   (2007-09-10 11:52) [4]

> [0] alsov ©   (10.09.07 11:35)
> есть еще варианты решения?

Заранее спросить юзера "Че те надо?" и выдавать запросом ТОЛЬКО то что попросит. Причем по возможности запретить юзеру отвечать в стиле "А фсе давай".


 
sniknik ©   (2007-09-10 11:55) [5]

> Причем по возможности запретить юзеру отвечать в стиле "А фсе давай".
не, а вот запретов не надо. это раздражает, когда программа считает себя умнее чем тот кто пользуется...


 
Ega23 ©   (2007-09-10 11:55) [6]


> (проверил на базе Northwind с многократно задублированными
> данными из Customers - полный запрос на 186368 зап. всего
> 2,5сек на пентиуме в 3 GHg с 1 гиг оперативки (секунду полюбоваться
> на "часики" ничего страшного)


Так он же пишет, что висюки на прорисовке грида (хотя сомнительно это как-то).


 
Anatoly Podgoretsky ©   (2007-09-10 12:00) [7]

> Ega23  (10.09.2007 11:55:06)  [6]

На все отвечать, мол сам виноват, тебя же придупреждали насчет головы. И повесить не часики а анимацию, что бы четко видел.


 
sniknik ©   (2007-09-10 12:01) [8]

> Так он же пишет, что висюки на прорисовке грида (хотя сомнительно это как-то).
ну все как всегда, свои "ляпы" и незнание списывают на проблемы системы/используемого... а сам к примеру даже контролы не отключает при запросе... или там обработчиков понаставил рекурсивных, и т.д.


 
Игорь Шевченко ©   (2007-09-10 12:04) [9]

2


 
alsov ©   (2007-09-10 12:07) [10]


>
> Так он же пишет, что висюки на прорисовке грида (хотя сомнительно
> это как-то).

не на прорисовки грида а на фетче.
то есть ам запрос долго данные отдает и прорисовка тут не при чем.


 
alsov ©   (2007-09-10 12:10) [11]

вобщем понятно
большинство за вызов окна фильтра перед запросом


 
Anatoly Podgoretsky ©   (2007-09-10 12:10) [12]


> Игорь Шевченко ©   (10.09.07 12:04) [9]

Ну есть же и ниже оценки.


 
Ega23 ©   (2007-09-10 12:11) [13]


> большинство за вызов окна фильтра перед запросом


Нет, не перед, а там-же. Внизу панель кладёшь - и 3-4 позиции сортировки с чек-боксами. Уже ускорит на порядок-2.


 
sniknik ©   (2007-09-10 12:17) [14]

> большинство за вызов окна фильтра перед запросом
не совсем, про фильтр можно говорить потом, когда приведеш вывод даже большого количества (50 тыс), к приемлемому времени (должно быть меньше сек.)

да, правильно давать решать юзеру, чего и сколько ему надо, но тестить нужно именно на больших количествах и если у тебя такой мизер "тормозит" значит чего то в коде не то (или в генокоде если это тебе пофигу).


 
isasa ©   (2007-09-10 12:17) [15]

Попробовать с серверным курсором ?


 
sniknik ©   (2007-09-10 12:19) [16]

> Попробовать с серверным курсором ?
фетч это как раз признак серверного курсора... при локальном весь рекордсет передаётся сразу (может в используемых компонентах это и не так но сомневаюсь)


 
isasa ©   (2007-09-10 12:20) [17]

alsov ©   (10.09.07 11:35)  
Первая пачка данных достаточно быстро отображается, но когда начинаешь скролить - висюки.


Т.е. здесь, скорее, наоборот, с клиентским курсором?


 
isasa ©   (2007-09-10 12:22) [18]

sniknik ©   (10.09.07 12:19) [16]
:)
Понял уже. С утра не проснулся.
Ну так открывать асинхронно, а пользователю, что-бы не скучно было, зайчиков там нарисовать, пока датасет на клиенте заполняется. Хотя, здесь тормоза могут дыть именно на гриде, а не на датасете.


 
Desdechado ©   (2007-09-10 12:24) [19]

Если никак не удается формализовать предварительные ограничения (обычно при типичной свалке мусора в таблице), то вариант "следующие 50" вполне подходит. Иначе - только после задания ограничений читать.
Постфильтр использовать можно, но он не решает основной проблемы - длительности фетча.

> sniknik ©   (10.09.07 11:52) [3]
> использовать Delphi+ADO+MSSQL+DBGrid тогда выборка из 50 тыс покажется мелочью.
Дело не в скорости выборки, а в скорости доставки данных на клиента.


 
sniknik ©   (2007-09-10 12:34) [20]

> Дело не в скорости выборки, а в скорости доставки данных на клиента.
???
в связке участвует DBGrid и время замерялось от посылки запроса до отображения данных в нем на клиенте, причём с клиентским курсором когда передаются всё. т.е. 2,5 сек  включают все этапы без разделений на выполнение-передача-отображение.
(если сделать асинхронно то отображение будет раньше чем докачается все, но я примерно воспроизвёл описанную в [0] ситуацию с фетчем, т.е. если сравнивать то для одинаковых условий)


 
homm ©   (2007-09-10 12:35) [21]

Удалено модератором


 
homm ©   (2007-09-10 12:46) [22]

> [5] sniknik ©   (10.09.07 11:55)

Видимо программа реально умнее тебя, раз думаешь что тебе реально понадобятся когда-либо 5000 строк для просмотра.


 
Desdechado ©   (2007-09-10 13:09) [23]

sniknik ©   (10.09.07 12:34) [20]
Я не увидел ни у тебя, ни у автора описания тракта доставки данных. Есть большие подозрения, что каналы разные, а это может сильно сказываться на времени фетча.


 
sniknik ©   (2007-09-10 13:20) [24]

homm ©   (10.09.07 12:46) [22]
вообще то я писал немного не так, я писал что не надо запретов для пользователя. особенно надуманных запретов, пусть даже для глупых с твоей точки зрения действий.

и кстати, ты наверное не в курсе, просмотр это не единственное что можно делать с данными.

Desdechado ©   (10.09.07 13:09) [23]
> Я не увидел ни у тебя
все на одной машине, в Server Network Utility первым стоит TCP/IP вторым Named Pipes, а что у она там себе выбирает х.з.
если разносить на разные (не в этот раз но проверялось) то время становится меньше, видать изза того что вместе сервер и клиент больше "напрягают" машину, а сеть в 100Мбит не является "слабым звеном".

> Есть большие подозрения
у меня гораздо большие подозрения, что ... см. [8].


 
Desdechado ©   (2007-09-10 13:23) [25]

> у меня гораздо большие подозрения, что ... см. [8].
Это само собой.
Просто sniknik ©   (10.09.07 11:52) [3] я понял, как то, что ты проводил тест только на MSSQL. Для адекватности надо бы проводить и другой, обсуждаемый.


 
homm ©   (2007-09-10 13:26) [26]

> [24] sniknik ©   (10.09.07 13:20)
> вообще то я писал немного не так
Ага? [5] прочти, что ты закоментил.

и кстати, ты наверное не в курсе, просмотр это не единственное
> что можно делать с данными.
Простомотр и ввод новых данных, это единственное что должен делать пользователь. Для чего либо из этого нужно 5000 записей в одном гирде?


 
Anatoly Podgoretsky ©   (2007-09-10 13:28) [27]

Не знаю как насчет других, но у меня для MS SQL влияние тракта ошеломляющее, когда они на одной машине, но скорость возрастает на два порядка, а по 1гб сети, скорость такая как в Интернете, только раза в два быстрее. Чтение ведется с NNTP сервера, база MS SQL 2000/2005 - памяти от 512 до 2 гб, проверка на разных машинах.



Страницы: 1 вся ветка

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.019 c
1-1185554019
Ice-T
2007-07-27 20:33
2007.10.07
Беда OPenDialog а


15-1187942734
Vitaliy_____
2007-08-24 12:05
2007.10.07
Принадлежность точки контуру


4-1175760398
kalexi
2007-04-05 12:06
2007.10.07
Создание приложений на чистом API - TPanel


2-1189184453
Dr. Andrew
2007-09-07 21:00
2007.10.07
как извлечь корень n-ной степени в Делфи!


2-1189091338
Igor_
2007-09-06 19:08
2007.10.07
Шрифт в польской Windows XP