|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Помогите пожалуйста мало опыта работы с БД Не знаю как лучше отобразить большой список клиентов. 1-100 тыс записей. Скачивать его весь на клиент нехорошо. Сейчас я использую virtual listview, скачиваю на клиента только ID всех записей, сами записи подгружаю по мере прокрутки listview. Но в такой схеме нельзя сделать сортировку таблицы по разным полям на клиенте, придётся за сортировкой обращаться к серверу. Но тогда если пользователь добавляет новую запись в таблицу придётся обращаться к серверу за полным обновлением. В текущей реализации список обновляется автоматически как только в базе происходят какие-то изменения. С сортировкой думаю это будет сложно для сервера - после каждого изменения обрабатывать одновременные запросы на обновления от всех клиентов. Придётся обновления сделать ручными по желанию пользователя. Понимаю конечно, что весь этот список никому не нужен, реальная польза только от поиска по нему. Но что-то изначально ведь нужно отобразить. Пользователи требуют чтобы был список, был с сортировкой. А может не так страшно скачать на клиента 100 тыс записей и там их отсортировать? Как обычно разрешается такая ситуация? Спасибо за любые комментарии! Используются Firebird 1.5 + WinApi + Firebird API ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2008, 19:53 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
thest А может не так страшно скачать на клиента 100 тыс записей и там их отсортировать? Это очень страшно. Хотя часто встречал решения что качается вся таблица. Это мрак. Я выбираю ровно, сколько нужно отобразить на экране. При этом задается сортировка по любым полям, но обязательно добавляю последнее поле для упррядочивания PK. А дальше поиск по первым введенным буквам, листяния PGUP/PGDN ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2008, 20:51 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
thest пишет: > Помогите пожалуйста мало опыта работы с БД > Не знаю как лучше отобразить большой список клиентов. 1-100 тыс записей. Кому это надо смотреть несколько тыщ записей ? Кто их смотреть будет ? > Понимаю конечно, что весь этот список никому не нужен, реальная польза > только от поиска по нему. Но что-то изначально ведь нужно отобразить. Ты оказывается не безнадежен. Отобразить надо форму поиска, пусть пользователь вводит критерии поиска и получает 10-100 записей. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2008, 23:52 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
apapacy thest А может не так страшно скачать на клиента 100 тыс записей и там их отсортировать? Это очень страшно. Хотя часто встречал решения что качается вся таблица. Это мрак. Я выбираю ровно, сколько нужно отобразить на экране. При этом задается сортировка по любым полям, но обязательно добавляю последнее поле для упррядочивания PK. А дальше поиск по первым введенным буквам, листяния PGUP/PGDN А список id всех записей вы не скачиваете? Тогда нельзя прокрутить список в произвольное место, только листать страницами? И правильно ли я понимаю что обновление списка будет достаточно дорогой операцией так как потребует от сервера пересортировки? Делается ли в системах такого масштаба автоматическое обновление через триггеры, или это всегда слишком большая нагрузка на сервер? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 08:58 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
MasterZiv thest пишет: > Помогите пожалуйста мало опыта работы с БД > Не знаю как лучше отобразить большой список клиентов. 1-100 тыс записей. Кому это надо смотреть несколько тыщ записей ? Кто их смотреть будет ? > Понимаю конечно, что весь этот список никому не нужен, реальная польза > только от поиска по нему. Но что-то изначально ведь нужно отобразить. Ты оказывается не безнадежен. Отобразить надо форму поиска, пусть пользователь вводит критерии поиска и получает 10-100 записей. Posted via ActualForum NNTP Server 1.4 Согласен, пользы от этого списка никакой, его бы не было если бы я писал для себя. Но среднестатистический пользователь этого не понимает. Он не привык пользоваться поиском. Он привык к списку контактов в Outlook - открываешь огромный список и перематываешь его весь пока не найдёшь что нужно. Если что-то не так он начинает стонать что пользоваться программой невозможно. Нет задачи научить пользователя работать правильно, нужно чтобы уже с первого раза ему было удобно и приятно. Спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 09:08 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Как вариант можно сделать не просто поиск, а фильтры, например по первым буквам и/или по другим параметрам какие там у вас есть. И пользователю удобно и такую тучу записей загружать не придётся.. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 10:41 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
thest А список id всех записей вы не скачиваете? Тогда нельзя прокрутить список в произвольное место, только листать страницами? И правильно ли я понимаю что обновление списка будет достаточно дорогой операцией так как потребует от сервера пересортировки? Делается ли в системах такого масштаба автоматическое обновление через триггеры, или это всегда слишком большая нагрузка на сервер? ИД не поможет если сортировка меняетя. Я использую Postgre у которого есть возможность выбирать записи с OFFSET а не только TOP, как у некоторых (не будем показывать пальцем). Сказать конкретно будет ли дорогой или недорогой операцией выборка сложно - зависит от подробностей. Наиболее часто я выбираю по первым введенным буквам некторого поля. На самом деле это поле не всегда уникальное, но и не содержит сотни повторяющихся значений - два-три не больше. Я выбираю ровно 7 (например) записей по первым введенным буквам, и поскольку на это поле есть индекс - выборка происходит быстро. В случае листания - я тоже выбираю ровно 7 (например) - записей вперед/назад от имеющейся последней/первой записи. Остается реализация перетягивания бегунка скроллинга. Я его не реализовывал - нет необходимости, но его можно реализовать, имея на клиенте count(*). Предположим, что COUNT=100 000. Тогда если бегунок находится на 61% вы выбираете select limit 1000000*0.61, 7. На самом деле при больших количествах такой скроллинг не имеет смысла (ИМХО) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 11:39 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
ЛёхаSPbКак вариант можно сделать не просто поиск, а фильтры, например по первым буквам и/или по другим параметрам какие там у вас есть. И пользователю удобно и такую тучу записей загружать не придётся.. Значит пользователь будет постоянно видеть пустой список, пока не введёт строку в фильтр. Он этого не поймёт. Он привык к Outlook. Кстати как работает Outlook на больших списках контактов. Он их загружает полностью с Exchange или нет кто-то знает? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 23:20 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
apapacy thest А список id всех записей вы не скачиваете? Тогда нельзя прокрутить список в произвольное место, только листать страницами? И правильно ли я понимаю что обновление списка будет достаточно дорогой операцией так как потребует от сервера пересортировки? Делается ли в системах такого масштаба автоматическое обновление через триггеры, или это всегда слишком большая нагрузка на сервер? ИД не поможет если сортировка меняетя. Я использую Postgre у которого есть возможность выбирать записи с OFFSET а не только TOP, как у некоторых (не будем показывать пальцем). Сказать конкретно будет ли дорогой или недорогой операцией выборка сложно - зависит от подробностей. Наиболее часто я выбираю по первым введенным буквам некторого поля. На самом деле это поле не всегда уникальное, но и не содержит сотни повторяющихся значений - два-три не больше. Я выбираю ровно 7 (например) записей по первым введенным буквам, и поскольку на это поле есть индекс - выборка происходит быстро. В случае листания - я тоже выбираю ровно 7 (например) - записей вперед/назад от имеющейся последней/первой записи. Остается реализация перетягивания бегунка скроллинга. Я его не реализовывал - нет необходимости, но его можно реализовать, имея на клиенте count(*). Предположим, что COUNT=100 000. Тогда если бегунок находится на 61% вы выбираете select limit 1000000*0.61, 7. На самом деле при больших количествах такой скроллинг не имеет смысла (ИМХО) А в вашей реализации значит бегунка нет совсем? Навигация только с клавиатуры PgUp/PgDown? И как на это реагируют пользователи? Это же очень неудобно/непривычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 23:24 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Попасть бегунком в нужную запись при количестве 100 000 записей - аналогично найти иголку в стоге сена. Реагируют нормально. даже очень хорошо, т.к. поработал над интуитивом. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2008, 23:34 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Если курсор не допускает чтения назад: 1. Читаем порциями по n записей 2. Все прочитанное записываем в буфер в ОП 3. На экран показываем записи из буфера в соотв. с размером экрана ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2008, 09:55 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
раз у Вас такие умные пользователи, дайте им возможность устанавливать размер страницы (10, 50, 100, 1000, до фига записей), и пусть сами парятся со скушанной оперативной памятью но главное - юзер САМ поставит что ему надо. его уважают - он не жалуется а по дефолту 10 или 50 (в размер экрана, как я понимаю, в правильном GUI нельзя отсчитать) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2008, 17:08 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Примерно такую же функциональность встречал в Delphi. Список вычитывается двумя SQL запросами. 1) от текущей записи в направлении головы списка (т.е. order by desc), и 2) от текущей записи в направлении хвоста списка. 3) список в локальной памяти клиента формируется не сразу, а по мере того, как записи отображаются на экране. 4) записи из БД извлекаются относительно большими блоками, что позволяет сократить число обращений к серверу. Что касается вставки в список, то в Oracle Forms вставка в список осуществляется в текущую позицию списка, даже если эта вставка нарушает порядок сортировки записей, зато это быстро, особенно, когда речь идёт о всавке многих записей. Если пользователь хочет получить упорядоченный список, он просто повторяет выборку новой версии списка из БД. К сожалениию Oracle Forms просто выполняет запрос на блоке, поэтому установить курсор на ту же запись достаточно проблематично. Что касается поиска, то вашим пользователям видимо нечего делать, если они предполитают листать гигантские списки, вместо того, чтобы выполнять работу. Сделать поиск по списку более быстрым можно по разному. Лично мне удобно сразу увидеть несколько образцов искомых записей, чтобы понять про что форма, что и по каким ключам в ней можно искать. Сортировка на клиенте тоже не лучший выход, ведь для этого нужно вытащить из БД весь массив записей. На стороне БД некоторые сортировки вообще можно не делать, например при наличии подходящего индекса, да и методов сортировки в арсенале СУБД как правило гораздо больше, чем может позволить себе клиент. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 05:02 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Dogenраз у Вас такие умные пользователи, дайте им возможность устанавливать размер страницы (10, 50, 100, 1000, до фига записей), и пусть сами парятся со скушанной оперативной памятью но главное - юзер САМ поставит что ему надо. его уважают - он не жалуется а по дефолту 10 или 50 (в размер экрана, как я понимаю, в правильном GUI нельзя отсчитать) Спасибо, ценный совет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 09:02 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
mcureenab Что касается вставки в список, то в Oracle Forms вставка в список осуществляется в текущую позицию списка, даже если эта вставка нарушает порядок сортировки записей, зато это быстро, особенно, когда речь идёт о всавке многих записей. Если пользователь хочет получить упорядоченный список, он просто повторяет выборку новой версии списка из БД. К сожалениию Oracle Forms просто выполняет запрос на блоке, поэтому установить курсор на ту же запись достаточно проблематично. Да. Либо можно их просто в конец добавлять. По необходимости нажмут кнопку Обновить. mcureenab Что касается поиска, то вашим пользователям видимо нечего делать, если они предполитают листать гигантские списки, вместо того, чтобы выполнять работу. Сделать поиск по списку более быстрым можно по разному. Лично мне удобно сразу увидеть несколько образцов искомых записей, чтобы понять про что форма, что и по каким ключам в ней можно искать. Да, как раз для этого наверное и нужно отобразить список неотфильтрованный - чтобы пользователь сориентировался что это вообще за список. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 09:05 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
thest Да, как раз для этого наверное и нужно отобразить список неотфильтрованный - чтобы пользователь сориентировался что это вообще за список. в общем-то Вы правы. Почему-то считается, что нажимая на кнопку в системе пользователь знает всегда ее содержимое... нет конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 11:41 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Очень согласен с искрой. Есть масса систем, которые выдадут на гора данные только если пользователь ПРАВИЛЬНО задаст множество нетривиальных условий. Т.е. только квалифицированный пользователь уже имеющий опыт работы с системой имеет шанс получить что-либо на экран. Обязаительно надо сразц высвечивать либо какую-то более-менее стандартную выборку, либо топ сколько-то, чтобы было понятно как вообще отбирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 12:09 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Программист-ЛюбительОбязаительно надо сразц высвечивать либо какую-то более-менее стандартную выборку, либо топ сколько-то, чтобы было понятно как вообще отбирать.У нас так было... в результате при открытии программы в 99% случаев человек менял критерии выборки сразу же. т.е. время потраченное на выбор и отображение данных - человек и сервер тратил впустую. Так что ОЧЕНЬ сильно зависит от специфики работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 12:12 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Bely т.е. время потраченное на выбор и отображение данных - человек и сервер тратил впустую. надо чтобы выбиралось быстро и по виду было понятно, что это такое выбрано топ50 по алфавиту - самое то. или листай дальше, если идиот, или задавай условия фильтра ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2008, 15:15 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
Посмотрите реализацию в аксесс (доступ к серверу через ODBC). Forwardonly курсор (только по ключевым полям)с учётом фильтра и сортировки(или без них) с асинхронным чтением и подготовленный селект для выборки содержимого для отображения на экране. Добавление записей - в конец списка(нехзависимо от фильтра и критерия сортировки) Можно создать тестовую базку и посмотреть, какие запросы идут на сервер ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2008, 16:18 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
thest ЛёхаSPbКак вариант можно сделать не просто поиск, а фильтры, например по первым буквам и/или по другим параметрам какие там у вас есть. И пользователю удобно и такую тучу записей загружать не придётся.. Значит пользователь будет постоянно видеть пустой список, пока не введёт строку в фильтр. Он этого не поймёт. Он привык к Outlook. Кстати как работает Outlook на больших списках контактов. Он их загружает полностью с Exchange или нет кто-то знает? Exchange отображает только видимый список. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2008, 08:02 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
авторОн привык к списку контактов в Outlook - открываешь огромный список и перематываешь его весь пока не найдёшь что нужно. Очень конструктивно... И почему на тех же Одноклассниках.ру так не сделали? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2008, 22:13 |
|
Отображени большого списка
|
|||
---|---|---|---|
#18+
А если заранее разбить ваши 100 тыс записей на группы? Я не знаю специфики, но наверняка клиенты как-то группируются: по территориальному положению, по алфавиту, еще как-то. Можно сделать несколько папок, в которые распихать клиентов (иерархический список). Самое простое решение "в лоб" - сделать 30 закладок с буквами алфавита (или блоками - "А-Г", "Д-З" и т.д.). Пользователь будет тыкать на соотв. закладку, а ему будут выпадать клиенты только на эту букву. Самое главное - не надо ничего вводить с клавиатуры. А если вдруг понадобятся все 100 тыс, можно сделать закладку "все". Главное - подробно изучить мотивацию пользователя и все возникающие варианты в его работе. Зачем ему все 1000 тыс записей? Что он с ними делает? Решение надо начинать с этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2008, 12:59 |
|
|
start [/forum/topic.php?fid=33&fpage=46&tid=1548840]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 158ms |
0 / 0 |