powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Отображени большого списка
23 сообщений из 23, страница 1 из 1
Отображени большого списка
    #35165206
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста мало опыта работы с БД
Не знаю как лучше отобразить большой список клиентов. 1-100 тыс записей. Скачивать его весь на клиент нехорошо. Сейчас я использую virtual listview, скачиваю на клиента только ID всех записей, сами записи подгружаю по мере прокрутки listview. Но в такой схеме нельзя сделать сортировку таблицы по разным полям на клиенте, придётся за сортировкой обращаться к серверу. Но тогда если пользователь добавляет новую запись в таблицу придётся обращаться к серверу за полным обновлением.
В текущей реализации список обновляется автоматически как только в базе происходят какие-то изменения. С сортировкой думаю это будет сложно для сервера - после каждого изменения обрабатывать одновременные запросы на обновления от всех клиентов. Придётся обновления сделать ручными по желанию пользователя.
Понимаю конечно, что весь этот список никому не нужен, реальная польза только от поиска по нему. Но что-то изначально ведь нужно отобразить. Пользователи требуют чтобы был список, был с сортировкой.
А может не так страшно скачать на клиента 100 тыс записей и там их отсортировать?

Как обычно разрешается такая ситуация?
Спасибо за любые комментарии!

Используются Firebird 1.5 + WinApi + Firebird API
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165252
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thest
А может не так страшно скачать на клиента 100 тыс записей и там их отсортировать?


Это очень страшно. Хотя часто встречал решения что качается вся таблица. Это мрак.
Я выбираю ровно, сколько нужно отобразить на экране.
При этом задается сортировка по любым полям, но обязательно добавляю последнее поле для упррядочивания PK.
А дальше поиск по первым введенным буквам, листяния PGUP/PGDN
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165355
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thest пишет:
> Помогите пожалуйста мало опыта работы с БД
> Не знаю как лучше отобразить большой список клиентов. 1-100 тыс записей.

Кому это надо смотреть несколько тыщ записей ?
Кто их смотреть будет ?

> Понимаю конечно, что весь этот список никому не нужен, реальная польза
> только от поиска по нему. Но что-то изначально ведь нужно отобразить.

Ты оказывается не безнадежен. Отобразить надо форму поиска,
пусть пользователь вводит критерии поиска и получает 10-100 записей.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165446
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apapacy thest
А может не так страшно скачать на клиента 100 тыс записей и там их отсортировать?


Это очень страшно. Хотя часто встречал решения что качается вся таблица. Это мрак.
Я выбираю ровно, сколько нужно отобразить на экране.
При этом задается сортировка по любым полям, но обязательно добавляю последнее поле для упррядочивания PK.
А дальше поиск по первым введенным буквам, листяния PGUP/PGDN

А список id всех записей вы не скачиваете? Тогда нельзя прокрутить список в произвольное место, только листать страницами?
И правильно ли я понимаю что обновление списка будет достаточно дорогой операцией так как потребует от сервера пересортировки? Делается ли в системах такого масштаба автоматическое обновление через триггеры, или это всегда слишком большая нагрузка на сервер?
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165448
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
thest пишет:
> Помогите пожалуйста мало опыта работы с БД
> Не знаю как лучше отобразить большой список клиентов. 1-100 тыс записей.

Кому это надо смотреть несколько тыщ записей ?
Кто их смотреть будет ?

> Понимаю конечно, что весь этот список никому не нужен, реальная польза
> только от поиска по нему. Но что-то изначально ведь нужно отобразить.

Ты оказывается не безнадежен. Отобразить надо форму поиска,
пусть пользователь вводит критерии поиска и получает 10-100 записей.

Posted via ActualForum NNTP Server 1.4

Согласен, пользы от этого списка никакой, его бы не было если бы я писал для себя. Но среднестатистический пользователь этого не понимает. Он не привык пользоваться поиском. Он привык к списку контактов в Outlook - открываешь огромный список и перематываешь его весь пока не найдёшь что нужно. Если что-то не так он начинает стонать что пользоваться программой невозможно. Нет задачи научить пользователя работать правильно, нужно чтобы уже с первого раза ему было удобно и приятно.

Спасибо :-)
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165464
ЛёхаSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант можно сделать не просто поиск, а фильтры, например по первым буквам и/или по другим параметрам какие там у вас есть. И пользователю удобно и такую тучу записей загружать не придётся..
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165490
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thest
А список id всех записей вы не скачиваете? Тогда нельзя прокрутить список в произвольное место, только листать страницами?
И правильно ли я понимаю что обновление списка будет достаточно дорогой операцией так как потребует от сервера пересортировки? Делается ли в системах такого масштаба автоматическое обновление через триггеры, или это всегда слишком большая нагрузка на сервер?

ИД не поможет если сортировка меняетя. Я использую Postgre у которого есть возможность выбирать записи с OFFSET а не только TOP, как у некоторых (не будем показывать пальцем).

Сказать конкретно будет ли дорогой или недорогой операцией выборка сложно - зависит от подробностей.
Наиболее часто я выбираю по первым введенным буквам некторого поля.
На самом деле это поле не всегда уникальное, но и не содержит сотни повторяющихся значений - два-три не больше.
Я выбираю ровно 7 (например) записей по первым введенным буквам, и поскольку на это поле есть индекс - выборка происходит быстро.

В случае листания - я тоже выбираю ровно 7 (например) - записей вперед/назад от имеющейся последней/первой записи.

Остается реализация перетягивания бегунка скроллинга. Я его не реализовывал - нет необходимости, но его можно реализовать, имея на клиенте count(*). Предположим, что COUNT=100 000. Тогда если бегунок находится на 61% вы выбираете
select limit 1000000*0.61, 7. На самом деле при больших количествах такой скроллинг не имеет смысла (ИМХО)
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165949
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛёхаSPbКак вариант можно сделать не просто поиск, а фильтры, например по первым буквам и/или по другим параметрам какие там у вас есть. И пользователю удобно и такую тучу записей загружать не придётся..

Значит пользователь будет постоянно видеть пустой список, пока не введёт строку в фильтр. Он этого не поймёт. Он привык к Outlook. Кстати как работает Outlook на больших списках контактов. Он их загружает полностью с Exchange или нет кто-то знает?
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165951
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apapacy thest
А список id всех записей вы не скачиваете? Тогда нельзя прокрутить список в произвольное место, только листать страницами?
И правильно ли я понимаю что обновление списка будет достаточно дорогой операцией так как потребует от сервера пересортировки? Делается ли в системах такого масштаба автоматическое обновление через триггеры, или это всегда слишком большая нагрузка на сервер?

ИД не поможет если сортировка меняетя. Я использую Postgre у которого есть возможность выбирать записи с OFFSET а не только TOP, как у некоторых (не будем показывать пальцем).

Сказать конкретно будет ли дорогой или недорогой операцией выборка сложно - зависит от подробностей.
Наиболее часто я выбираю по первым введенным буквам некторого поля.
На самом деле это поле не всегда уникальное, но и не содержит сотни повторяющихся значений - два-три не больше.
Я выбираю ровно 7 (например) записей по первым введенным буквам, и поскольку на это поле есть индекс - выборка происходит быстро.

В случае листания - я тоже выбираю ровно 7 (например) - записей вперед/назад от имеющейся последней/первой записи.

Остается реализация перетягивания бегунка скроллинга. Я его не реализовывал - нет необходимости, но его можно реализовать, имея на клиенте count(*). Предположим, что COUNT=100 000. Тогда если бегунок находится на 61% вы выбираете
select limit 1000000*0.61, 7. На самом деле при больших количествах такой скроллинг не имеет смысла (ИМХО)

А в вашей реализации значит бегунка нет совсем? Навигация только с клавиатуры PgUp/PgDown? И как на это реагируют пользователи? Это же очень неудобно/непривычно.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35165959
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попасть бегунком в нужную запись при количестве 100 000 записей - аналогично найти иголку в стоге сена.
Реагируют нормально. даже очень хорошо, т.к. поработал над интуитивом.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35166249
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если курсор не допускает чтения назад:
1. Читаем порциями по n записей
2. Все прочитанное записываем в буфер в ОП
3. На экран показываем записи из буфера в соотв. с размером экрана
...
Рейтинг: 0 / 0
Отображени большого списка
    #35176472
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз у Вас такие умные пользователи, дайте им возможность устанавливать размер страницы (10, 50, 100, 1000, до фига записей), и пусть сами парятся со скушанной оперативной памятью

но главное - юзер САМ поставит что ему надо. его уважают - он не жалуется

а по дефолту 10 или 50 (в размер экрана, как я понимаю, в правильном GUI нельзя отсчитать)
...
Рейтинг: 0 / 0
Отображени большого списка
    #35177299
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно такую же функциональность встречал в Delphi.

Список вычитывается двумя SQL запросами.
1) от текущей записи в направлении головы списка (т.е. order by desc), и
2) от текущей записи в направлении хвоста списка.
3) список в локальной памяти клиента формируется не сразу, а по мере того, как записи отображаются на экране.
4) записи из БД извлекаются относительно большими блоками, что позволяет сократить число обращений к серверу.

Что касается вставки в список, то в Oracle Forms вставка в список осуществляется в текущую позицию списка, даже если эта вставка нарушает порядок сортировки записей, зато это быстро, особенно, когда речь идёт о всавке многих записей. Если пользователь хочет получить упорядоченный список, он просто повторяет выборку новой версии списка из БД. К сожалениию Oracle Forms просто выполняет запрос на блоке, поэтому установить курсор на ту же запись достаточно проблематично.

Что касается поиска, то вашим пользователям видимо нечего делать, если они предполитают листать гигантские списки, вместо того, чтобы выполнять работу.
Сделать поиск по списку более быстрым можно по разному. Лично мне удобно сразу увидеть несколько образцов искомых записей, чтобы понять про что форма, что и по каким ключам в ней можно искать.

Сортировка на клиенте тоже не лучший выход, ведь для этого нужно вытащить из БД весь массив записей. На стороне БД некоторые сортировки вообще можно не делать, например при наличии подходящего индекса, да и методов сортировки в арсенале СУБД как правило гораздо больше, чем может позволить себе клиент.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35177417
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dogenраз у Вас такие умные пользователи, дайте им возможность устанавливать размер страницы (10, 50, 100, 1000, до фига записей), и пусть сами парятся со скушанной оперативной памятью

но главное - юзер САМ поставит что ему надо. его уважают - он не жалуется

а по дефолту 10 или 50 (в размер экрана, как я понимаю, в правильном GUI нельзя отсчитать)

Спасибо, ценный совет
...
Рейтинг: 0 / 0
Отображени большого списка
    #35177424
thest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab
Что касается вставки в список, то в Oracle Forms вставка в список осуществляется в текущую позицию списка, даже если эта вставка нарушает порядок сортировки записей, зато это быстро, особенно, когда речь идёт о всавке многих записей. Если пользователь хочет получить упорядоченный список, он просто повторяет выборку новой версии списка из БД. К сожалениию Oracle Forms просто выполняет запрос на блоке, поэтому установить курсор на ту же запись достаточно проблематично.

Да. Либо можно их просто в конец добавлять. По необходимости нажмут кнопку Обновить.

mcureenab
Что касается поиска, то вашим пользователям видимо нечего делать, если они предполитают листать гигантские списки, вместо того, чтобы выполнять работу.
Сделать поиск по списку более быстрым можно по разному. Лично мне удобно сразу увидеть несколько образцов искомых записей, чтобы понять про что форма, что и по каким ключам в ней можно искать.

Да, как раз для этого наверное и нужно отобразить список неотфильтрованный - чтобы пользователь сориентировался что это вообще за список.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35177861
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thest
Да, как раз для этого наверное и нужно отобразить список неотфильтрованный - чтобы пользователь сориентировался что это вообще за список.
в общем-то Вы правы. Почему-то считается, что нажимая на кнопку в системе пользователь знает всегда ее содержимое... нет конечно.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35177962
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень согласен с искрой. Есть масса систем, которые выдадут на гора данные только если пользователь ПРАВИЛЬНО задаст множество нетривиальных условий. Т.е. только квалифицированный пользователь уже имеющий опыт работы с системой имеет шанс получить что-либо на экран.

Обязаительно надо сразц высвечивать либо какую-то более-менее стандартную выборку, либо топ сколько-то, чтобы было понятно как вообще отбирать.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35177970
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительОбязаительно надо сразц высвечивать либо какую-то более-менее стандартную выборку, либо топ сколько-то, чтобы было понятно как вообще отбирать.У нас так было... в результате при открытии программы в 99% случаев человек менял критерии выборки сразу же.

т.е. время потраченное на выбор и отображение данных - человек и сервер тратил впустую.

Так что ОЧЕНЬ сильно зависит от специфики работы.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35178553
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely

т.е. время потраченное на выбор и отображение данных - человек и сервер тратил впустую.


надо чтобы выбиралось быстро и по виду было понятно, что это такое выбрано

топ50 по алфавиту - самое то. или листай дальше, если идиот, или задавай условия фильтра
...
Рейтинг: 0 / 0
Отображени большого списка
    #35179543
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите реализацию в аксесс (доступ к серверу через ODBC).

Forwardonly курсор (только по ключевым полям)с учётом фильтра и сортировки(или без них) с асинхронным чтением и подготовленный селект для выборки содержимого для отображения на экране.
Добавление записей - в конец списка(нехзависимо от фильтра и критерия сортировки)

Можно создать тестовую базку и посмотреть, какие запросы идут на сервер
...
Рейтинг: 0 / 0
Отображени большого списка
    #35181512
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thest ЛёхаSPbКак вариант можно сделать не просто поиск, а фильтры, например по первым буквам и/или по другим параметрам какие там у вас есть. И пользователю удобно и такую тучу записей загружать не придётся..

Значит пользователь будет постоянно видеть пустой список, пока не введёт строку в фильтр. Он этого не поймёт. Он привык к Outlook. Кстати как работает Outlook на больших списках контактов. Он их загружает полностью с Exchange или нет кто-то знает?

Exchange отображает только видимый список.
...
Рейтинг: 0 / 0
Отображени большого списка
    #35193164
Фотография cyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОн привык к списку контактов в Outlook - открываешь огромный список и перематываешь его весь пока не найдёшь что нужно.
Очень конструктивно... И почему на тех же Одноклассниках.ру так не сделали? ))
...
Рейтинг: 0 / 0
Отображени большого списка
    #35193485
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если заранее разбить ваши 100 тыс записей на группы? Я не знаю специфики, но наверняка клиенты как-то группируются: по территориальному положению, по алфавиту, еще как-то. Можно сделать несколько папок, в которые распихать клиентов (иерархический список). Самое простое решение "в лоб" - сделать 30 закладок с буквами алфавита (или блоками - "А-Г", "Д-З" и т.д.). Пользователь будет тыкать на соотв. закладку, а ему будут выпадать клиенты только на эту букву. Самое главное - не надо ничего вводить с клавиатуры. А если вдруг понадобятся все 100 тыс, можно сделать закладку "все".
Главное - подробно изучить мотивацию пользователя и все возникающие варианты в его работе. Зачем ему все 1000 тыс записей? Что он с ними делает? Решение надо начинать с этого.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Отображени большого списка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]